ここで明らかな何かが欠けているだけだと思いたいのですが、チェーン支払いを完了することができないようです (サンドボックスでPHP SDKを使用)。私は成功した応答を得ることができ、ユーザーを PayPal にリダイレクトすると、トランザクションの詳細は正常に表示されますが、ユーザーが支払いを完了しようとすると、恐ろしいエラーが発生します。
お支払いを完了できません。参加している Web サイトに戻って、もう一度やり直してください。
イライラするのは、送信されているリクエストデータをダンプし、それをドキュメントに記載されている例のデータと比較し、それらが事実上同一になるまでリクエストを微調整したことです。また、どのアカウントにも、支払いが試みられたか、保留中か、失敗したかを示すものは何も表示されません。
これは送信されているものです:
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 Explorer で同じリクエストを生成すると、トランザクションは正常に完了します。しかし、まったく同じリクエストが API 経由で失敗します。API Explorer によって生成されたリクエストと SDK コードの違いは次のとおりであることを(生成されたヘッダーとリクエスト本文をコピーして貼り付けることにより) 確認しました。
- エクスプローラーによって作成されたヘッダーには、名前と値の間にスペースがあります
- API Explorer にアプリケーション ID が含まれていない
- 私の API 呼び出しには、ヘッダーと要求本文の両方にアプリケーション ID が含まれています
そもそもこの問題を解決するために追加されたアプリケーション ID 参照を削除しても、SDK API 呼び出しは機能しません。
SDK (PayPal によって提供される) によって生成された支払いが完了しない理由がわかりませんが、エクスプローラーが呼び出すと正確な呼び出しが正常に機能します。ヘルプやアドバイスをいただければ幸いです。