простой пример php SoapClient для PayPal

Могу ли я получить простой пример использования класса 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> 

В ответ на некоторые другие комментарии на этой странице:

  • Я довольно уверен, что OP прочитал API-документ, потому что именно здесь появился пример XML, который он пытается воспроизвести с помощью PHP SOAP-библиотеки.
  • API-интерфейс PayPal PHP имеет некоторые недостатки, самый большой из которых заключается в том, что он не работает с включенными предупреждениями E_STRICT. Он также требует PEAR, поэтому, если вы в настоящее время не используете PEAR в своем проекте, это означает перетаскивание большого количества нового кода, что означает большую сложность и потенциально больший риск для достижения двух или трех довольно простых обменов XML для базовой реализации.
  • API NVP тоже выглядит неплохо, но я за то, что я наказан, поэтому я выбрал сложный путь. 🙂

Вы проверили API, предоставляемый PayPal здесь ? И прямая ссылка на загрузку API SOAP PHP.

И вот ссылка на API NVP, который рекомендует использовать PayPal.

PHP имеет очень простой в использовании soapClass. Что можно найти здесь.

http://www.php.net/manual/en/class.soapclient.php