Могу ли я получить простой пример использования класса SoapClient из PHP, чтобы сделать пустой звонок в Paypal ни с чем, кроме номера версии? У меня есть правильный URL-адрес URL-адреса WSDL и сервер, поэтому мне не нужна помощь. Это то, что у меня есть:
public function SOAPcall($function, $args=array()) { $args['Version'] = '63.0'; $args = new SoapVar($args, SOAP_ENC_ARRAY, $function.'_Request'); $args = array(new SoapVar($args, SOAP_ENC_ARRAY, $function.'_Req', 'urn:ebay:api:PayPalAPI')); $results = $this->soapClient->__soapCall($function, $args, array('location' => $this->activeKeys['certificate']), $this->soapOptions); }
Я надеюсь, что все в порядке, я не показываю все. Тело запроса полностью ошибочно, как вы можете видеть ниже:
<?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns1="urn:ebay:api:PayPalAPI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns2="urn:ebay:apis:eBLBaseComponents"> <SOAP-ENV:Header> <ns1:RequesterCredentials> <ns2:Credentials> <ns2:Username>xxx</ns2:Username> <ns2:Password>xxx</ns2:Password> <ns2:Signature>xxx</ns2:Signature> </ns2:Credentials> </ns1:RequesterCredentials> </SOAP-ENV:Header> <SOAP-ENV:Body> <ns1:GetBalanceReq xsi:type="ns1:GetBalance_Req"> <xsd:string>63.0</xsd:string> </ns1:GetBalanceReq> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
Он должен выглядеть так:
<?xml version=”1.0” encoding=”UTF-8”?> <SOAP-ENV:Envelope xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xmlns:SOAP-ENC=”http://schemas.xmlsoap.org/soap/encoding/” xmlns:SOAP-ENV=”http://schemas.xmlsoap.org/soap/envelope/” xmlns:xsd=”http://www.w3.org/2001/XMLSchema” SOAP-ENV:encodingStyle=”http://schemas.xmlsoap.org/soap/encoding/” ><SOAP-ENV:Header> <RequesterCredentials xmlns=”urn:ebay:api:PayPalAPI”> <Credentials xmlns=”urn:ebay:apis:eBLBaseComponents”> <Username>api_username</Username> <Password>api_password</Password> <Signature/> <Subject/> </Credentials> </RequesterCredentials> </SOAP-ENV:Header> <SOAP-ENV:Body> <specific_api_name_Req xmlns=”urn:ebay:api:PayPalAPI”> <specific_api_name_Request> <Version xmlns=urn:ebay:apis:eBLBaseComponents”>service_version </Version> <required_or_optional_fields xsi:type=”some_type_here”> data </required_or_optional_fields> </specific_api_name_Request> </specific_api_name_Req> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
Конечно, Paypal выдает ошибку «Версия не поддерживается».
Это самое чистое решение, которое я мог бы придумать:
$client = new SoapClient( 'https://www.sandbox.paypal.com/wsdl/PayPalSvc.wsdl', array( 'soap_version' => SOAP_1_1 )); $cred = array( 'Username' => $username, 'Password' => $password, 'Signature' => $signature ); $Credentials = new stdClass(); $Credentials->Credentials = new SoapVar( $cred, SOAP_ENC_OBJECT, 'Credentials' ); $headers = new SoapVar( $Credentials, SOAP_ENC_OBJECT, 'CustomSecurityHeaderType', 'urn:ebay:apis:eBLBaseComponents' ); $client->__setSoapHeaders( new SoapHeader( 'urn:ebay:api:PayPalAPI', 'RequesterCredentials', $headers )); $args = array( 'Version' => '71.0', 'ReturnAllCurrencies' => '1' ); $GetBalanceRequest = new stdClass(); $GetBalanceRequest->GetBalanceRequest = new SoapVar( $args, SOAP_ENC_OBJECT, 'GetBalanceRequestType', 'urn:ebay:api:PayPalAPI' ); $params = new SoapVar( $GetBalanceRequest, SOAP_ENC_OBJECT, 'GetBalanceRequest' ); $result = $client->GetBalance( $params ); echo 'Balance is: ', $result->Balance->_, $result->Balance->currencyID;
Это создает следующий XML-запрос, который на момент написания был успешно принят и обработан PayPal:
<?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:ebay:apis:eBLBaseComponents" xmlns:ns2="urn:ebay:api:PayPalAPI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <SOAP-ENV:Header> <ns2:RequesterCredentials> <ns1:Credentials xsi:type="Credentials"> <Username>***</Username> <Password>***</Password> <Signature>***</Signature> </ns1:Credentials> </ns2:RequesterCredentials> </SOAP-ENV:Header> <SOAP-ENV:Body> <ns2:GetBalanceReq xsi:type="GetBalanceRequest"> <GetBalanceRequest xsi:type="ns2:GetBalanceRequestType"> <ns1:Version>71.0</ns1:Version> <ns2:ReturnAllCurrencies>1</ns2:ReturnAllCurrencies> </GetBalanceRequest> </ns2:GetBalanceReq> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
В ответ на некоторые другие комментарии на этой странице:
Вы проверили API, предоставляемый PayPal здесь ? И прямая ссылка на загрузку API SOAP PHP.
И вот ссылка на API NVP, который рекомендует использовать PayPal.
PHP имеет очень простой в использовании soapClass. Что можно найти здесь.