0

我正在使用 PHP 的 SoapClient 类连接到贝宝。我有很多问题:

  1. 我传递给soap调用的参数是,array('ReturnAllCurrencies'=>0, 'Version'=>'63.0')但正如您在下面的请求中看到的那样,63.0放入<param1>任何内容。我什至没有在请求中看到 ReturnAllCurrencies。

在这个请求中,我正在执行一个GetBalance命令:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:ebay:api:PayPalAPI" xmlns:ns2="urn:ebay:apis:eBLBaseComponents">
      <SOAP-ENV:Header>
            <ns1:RequesterCredentials>
                  <ns2:Credentials>
                        <ns2:Username>xxxx</ns2:Username>
                        <ns2:Password>xxx</ns2:Password>
                        <ns2:Signature>xxx</ns2:Signature>
                  </ns2:Credentials>
            </ns1:RequesterCredentials>
      </SOAP-ENV:Header>
      <SOAP-ENV:Body>
            <ns1:GetBalanceReq/>
            <param1>63.0</param1>
      </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

我通过 SoapClient::__getLastRequest() 找到了上面的请求。它看起来不像贝宝网站上的示例。GetBalanceReq标签怎么了?为什么它有 *Req 后缀?

2.使用生产服务器和wsdl文件时,出现php错误:

SOAP-ERROR:解析 WSDL:无法从“ https://www.paypal.com/wsdl/PayPalSvc.wsdl' ”加载;: 需要开始标签,'<' 未找到

此外,如果我尝试访问 FireFox ( https://api.paypal.com/2.0/ ) 中的生产证书 url,我会收到 ssl_error_handshake_failure_alert

我应该下载 wsdl 文件并在 SoapClient::__construct 的第一个参数中指向本地版本,还是应该简单地指向贝宝托管副本?我最初认为是后者,但现在我不确定

4

1 回答 1

0

首先,“ReturnAllCurrencies”应该是一个字符串,而不是一个整数。此外,您需要将 GetBalanceRequestType 字段包装在 GetBalanceRequest 元素中以使其工作。有关问题第一部分的更多信息以及可行的解决方案,请查看此处:

需要支付宝的简单 php SoapClient 示例

您问题的第二部分听起来像是 Paypal 基础设施的临时问题。最佳实践是不使用 WSDL 的本地副本,而是打开 WSDL 缓存并让 PHP 决定何时刷新它。

于 2011-04-11T07:41:37.980 回答