问题描述
我正在尝试在 Magento 中创建一个新客户.这是我为此编写的 PHP 脚本
I am trying to create a new customer in Magento. Here's PHP script I wrote for that
<?php $callbackUrl = "http://localhost/magento/webservices/NewCustomer1.php"; $temporaryCredentialsRequestUrl = "http://localhost/magento/oauth/initiate?oauth_callback=". urlencode($callbackUrl); $*****AuthorizationUrl = 'http://localhost/magento/*****/oauth_authorize'; $accessTokenRequestUrl = 'http://localhost/magento/oauth/token'; $apiUrl = 'http://localhost/magento/api/rest'; $consumerKey = 's3xt7w8lwhfrrfzrfvwm3lrilkf66d5n'; $consumerSecret = 'vr3eq1x899pz1cf4zzxjzx3q03t66r3n'; session_start(); if (!isset($_GET['oauth_token']) && isset($_SESSION['state']) && $_SESSION['state'] == 1) { $_SESSION['state'] = 0; } try { $authType = ($_SESSION['state'] == 2) ? OAUTH_AUTH_TYPE_AUTHORIZATION : OAUTH_AUTH_TYPE_URI; $oauthClient = new OAuth($consumerKey, $consumerSecret, OAUTH_SIG_METHOD_HMACSHA1, $authType); $oauthClient->enableDebug(); if (!isset($_GET['oauth_token']) && !$_SESSION['state']) { $requestToken = $oauthClient->getRequestToken($temporaryCredentialsRequestUrl); $_SESSION['secret'] = $requestToken['oauth_token_secret']; $_SESSION['state'] = 1; header('Location: ' . $*****AuthorizationUrl . '?oauth_token=' . $requestToken['oauth_token']); exit; } else if ($_SESSION['state'] == 1) { $oauthClient->setToken($_GET['oauth_token'], $_SESSION['secret']); $accessToken = $oauthClient->getAccessToken($accessTokenRequestUrl); $_SESSION['state'] = 2; $_SESSION['token'] = $accessToken['oauth_token']; $_SESSION['secret'] = $accessToken['oauth_token_secret']; header('Location: ' . $callbackUrl); exit; } else { $oauthClient->setToken($_SESSION['token'], $_SESSION['secret']); $resourceUrl = "$apiUrl/customers/create"; $customerData = json_encode(array( 'firstname' => 'demofirstname', 'lastname' => 'demolastname', 'email_address' => 'demo@gmail.com', 'password' => 'demo1234', 'confirmation' => 'demo1234', )); $headers = array('Content-Type' => 'application/json'); $oauthClient->fetch($resourceUrl, $customerData, OAUTH_HTTP_METHOD_POST, $headers); print_r($oauthClient->getLastResponseInfo()); } } catch (OAuthException $e) { print_r($e); } ?>
我收到此错误
OAuthException:无效的身份验证/错误请求(得到 405,预期为 HTTP/1.120X 或重定向)在 C:wampwwwmagentoWebServices ewcustomer1.php在第 47 行调用堆栈 #TimeMemoryFunctionLocation 10.0010386016{main}(.. ewcustomer1.php:0 20.0017391216OAuth->fetch().. ewcustomer1.php:47 )
OAuthException: Invalid auth/bad request (got a 405, expected HTTP/1.1 20X or a redirect) in C:wampwwwmagentoWebServices ewcustomer1.php on line 47 Call Stack #TimeMemoryFunctionLocation 10.0010386016{main}( ).. ewcustomer1.php:0 20.0017391216OAuth->fetch( ).. ewcustomer1.php:47 )
我是 Oauth 和 PHP 的新手.如果有人可以提供帮助,我会很高兴.
I am new to Oauth and PHP. Will be glad if someone can help.
推荐答案
这个自定义 API 我写的作品就像轻而易举.您需要从 Magento 管理面板创建一个 SOAP 用户并添加 SOAP 用户 &以下代码中的数据库凭据以使其工作.
This custom API I wrote works like a breeze. You will need to create a SOAP user from Magento ***** Panel and add SOAP user & DB credentials in following code to make it work.
require_once('../app/Mage.php' ); $dbhost = 'localhost'; $dbUsername = 'root'; $dbPassword = 'password'; $dbName = 'magento'; $soapUsername = 'soapuser'; $soapPassword = 'password'; Mage::app("default"); $store = Mage::app()->getStore(); $storeId = $store->getId(); $websiteId = Mage::app()->getStore()->getWebsiteId(); $email = $_POST['email']; $firstname = $_POST['firstname']; $lastname = $_POST['lastname']; $password = $_POST['password']; $proxy = new SoapClient('http://yourdomain/magento/index.php/api/?wsdl'); // TODO : change url $session = $proxy->login($soapUsername, $soapPassword); try{ $result = $proxy->call($session,'customer.create',array(array('email' => "$email", 'firstname' => "$firstname", 'lastname' => "$lastname", 'password' => "$password", 'website_id' => "$websiteId", 'store_id' => "$storeId", 'group_id' => 1))); echo json_encode("New Customer created with Id-$result"); $custId = $result; $shoppingCartId = $proxy->call($session, 'cart.create', array(1)); $customer = array( 'firstname' => "$firstname", 'lastname' => "$lastname", 'email' => "$email", 'password' => md5("$password"), 'customer_id' => "$custId", 'mode' => 'customer', 'website_id' => "$websiteId", 'store_id' => "$storeId", 'group_id' => 1 ); $resultCustomerSet = $proxy->call($session, 'cart_customer.set', array( $shoppingCartId, $customer, $storeId) ); $db_handle = mysql_connect($dbhost, $dbUsername, $dbPassword) or die(mysql_error()); $db_found = mysql_select_db($dbName, $db_handle); mysql_query("UPDATE `sales_flat_quote` SET `is_active` = '1' WHERE `customer_email` = '$email' "); mysql_query("INSERT INTO `wishlist` VALUES('','$custId','0','','$timestamp')"); } catch( Exception $e ) { echo json_encode($e->getMessage()); }