我想我只是在这里遗漏了一些明显的东西,但我似乎无法完成链式支付(使用沙盒中的 PHP SDK)。我能够获得成功的响应,当我将用户重定向到 PayPal 时,交易详细信息显示正常,但是当用户尝试完成付款时,他们会遇到可怕的错误:
您的付款无法完成。请返回参与网站并重试。
令人沮丧的是,我已经转储了正在发送的请求数据,并将其与 the example given in the documentation 中的数据进行了比较。并调整我的要求,直到它们实际上完全相同,但仍然没有骰子。我也没有在任何帐户上看到任何表明付款已尝试、待处理或失败的信息。
这是正在发送的内容:
requestEnvelope.errorLanguage=en_US
&clientDetails.ipAddress=127.0.0.1
&clientDetails.applicationId=APP-80W284485P519543T
&actionType=PAY
&cancelUrl=http%3A%2F%2Fdomain.com%2Fpaypal%2Fcancel
¤cyCode=USD
&feesPayer=EACHRECEIVER
&memo=Test+Payment
&receiverList.receiver(0).amount=3.25
&receiverList.receiver(0).email=merchant%40domain.com
&receiverList.receiver(0).primary=1
&receiverList.receiver(1).amount=1.5
&receiverList.receiver(1).email=seller%40domain.com
&senderEmail=buyer%40domain.com
&returnUrl=http%3A%2F%2Fdomain.com%2Fpaypal%2Freturn
响应对我来说很好:
PayPal\Types\AP\PayResponse Object
(
[responseEnvelope] => PayPal\Types\Common\ResponseEnvelope Object
(
[timestamp] => 2013-07-28T23:25:52.676-07:00
[ack] => Success
[correlationId] => bf1ba2c8a50d4
[build] => 6941298
)
[payKey] => AP-XXXXXXXXXXXXXXXXC
[paymentExecStatus] => CREATED
[payErrorList] =>
[paymentInfoList] =>
[sender] =>
[defaultFundingPlan] =>
[warningDataList] =>
[error] =>
)
我还尝试将操作类型设置为 PAY_PRIMARY,因为我指定了主要收件人,而这正是我所追求的理想情况。
更新:鉴于我仍然没有收到关于我通过 PayPal 开立的票据的回复,也没有人对这个问题发表评论,我做了一些进一步的测试。如果我使用 API 资源管理器生成相同的请求,交易将正常完成。但是 完全相同的请求 通过 API 失败了。我已经验证(通过复制和粘贴生成的 header 和请求正文)API Explorer 生成的请求与 SDK 代码之间唯一的区别如下:
- 浏览器创建的 header 在名称和值之间有一个空格
- API Explorer 不包含应用程序 ID
- 我的 API 调用确实在 header 和请求正文中包含应用程序 ID
如果我删除应用程序 ID 引用,SDK API 调用仍然不起作用,这是为了解决此问题而添加的。
我不明白为什么由 SDK(由 PayPal 提供)生成的付款无法完成,但是当浏览器调用它时,确切的调用工作正常。如有任何帮助或建议,我们将不胜感激。
最佳答案
因此,在与 PayPal 的商家技术支持解决这个问题近一个月后(大部分时间根本没有得到任何回应)并等待近两周的升级回应,事实证明问题源于 SDK配置。
尽管在整个 API 文档和 SDK 代码中,应用程序 ID 被引用为 applicationId,显然 SDK 要求将其作为 acct1.AppId 输入到配置文件中.我是在遇到 this wiki page on configuring the SDK 之后才发现的,24 小时前甚至不存在。
一旦我更新了我的配置,我就能够无误地授权付款。
关于paypal - 链式支付无法完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17917525/