Я пытаюсь создать нового клиента в Magento. Вот PHP-скрипт, который я написал для этого
<?php $callbackUrl = "http://localhost/magento/webservices/NewCustomer1.php"; $temporaryCredentialsRequestUrl = "http://localhost/magento/oauth/initiate?oauth_callback=". urlencode($callbackUrl); $adminAuthorizationUrl = 'http://localhost/magento/admin/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: ' . $adminAuthorizationUrl . '?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: неверный запрос auth / bad (получил 405, ожидаемый HTTP / 1.1 20X или перенаправление) в C: \ wamp \ www \ magento \ WebServices \ newcustomer1.php в строке 47 Call Stack #TimeMemoryFunctionLocation 10.0010386016 {main} (). . \ newcustomer1.php: 0 20.0017391216OAuth-> fetch () .. \ newcustomer1.php: 47)
Я новичок в Oauth и PHP. Будем рады, если кто-то может помочь.
По линии 36:
$resourceUrl = "$apiUrl/customers/create";
Удалите create
в конце. так это сейчас:
$resourceUrl = "$apiUrl/customers/";
У вас уже есть OAUTH_HTTP_METHOD_POST
чтобы указать этот глагол для REST. поэтому результирующий URL-адрес ресурса должен быть: http://localhost/magento/api/rest/customers/
Ошибка, которую вы получаете, это HTTP 405 Method Not Allowed
означающий, что ваша конечная точка запрещает POST
или не знает об этом. В вашем случае это последнее.
Узнайте больше о конечных точках ресурсов здесь: http://www.magentocommerce.com/api/rest/Resources/resources.html
Официальный magento rest api позволяет создавать клиента с правами администратора. Используйте разрешение администратора, чтобы сделать это или просто реализовать пользовательский для разрешения гостя.
Этот пользовательский API, который я написал, работает как легкий ветерок. Вам нужно будет создать пользователя SOAP из панели администрирования Magento и добавить учетные данные пользователя и базы данных SOAP в следующий код, чтобы он работал.
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()); }
по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()); }