私たちは、Spree をベースとし、Heroku でホストされているオンライン ストアを構築しています。チェックアウトをできるだけ簡単にしたいので、PayPal Express Checkout と Instant Update API を使用して送料を決定することにしました。
HTTP 経由でチェックアウト プロセスをテストしたところ、すべてが完全に機能しました。ユーザーが配送先住所を入力すると、PayPal がバックグラウンドでサーバーにクエリを実行し、配送料を取得しました。
ただし、SSL に切り替えると、送料が更新されず、デフォルトの定額料金に戻ります。今回はアプリが HTTPS、つまりhttps://myapp.herokuapp.com経由でアクセスされることを除いて、すべてが同じであるため、何が問題なのかわかりません。
ログを確認したところ、PayPal のサーバーがクエリを作成したことがわかりましたが、PayPal のチェックアウト ページで送料が更新されていません。
何が悪いのか何か考えはありますか?
アップデート:
さらにテストした結果、PayPal はトランザクション設定で設定されたタイムアウトに従っていないようです。単純な "sleep(x)" をコールバック メソッドに追加して、人為的に遅延 (x 秒) を誘発しました。通常の HTTP を介しても、わずか 1 秒の遅延で PayPal が応答を無視するのに十分です。
最大タイムアウトは 6 秒のはずですが、実際にはまったくそうではないようです。そして、それを HTTPS (接続の確立に時間がかかる) と組み合わせると、そもそもコールバックが失敗した理由と考えられます。
PayPal にチケットを送信しましたが、PayPal が対応してくれるかどうか、または何か対応してくれるかどうかわかりません...