クイック サマリー:
PHPを使ってECサイトを開発しています。PayPalを使用して支払いを行います。昨年末から今まで、クラシック API エクスプレス チェックアウト (NVP) を使用した PayPal のサンドボックス モード (SetExpressCheckout を介して DoExpressCheckoutPayment から GetExpressCheckoutDetails への要求文字列の送信から、MySQL データベースへの支払いの詳細の保存まで) をうまく使用してきました。昨夜までは問題なく機能しており、サイトの PayPal セクションに大きな変更は加えられていません。これで、支払い要求ごとにhttps://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=[TOKEN]で「内部サーバー エラー」が発生します。
チュートリアル:
- 支払い要求の解析: "...&PAYMENTREQUEST_0_PAYMENTACTION=...",
- 「SetExpressCheckout」を呼び出し、
- [ACK] を取得 => 成功 (エラーなし = LONGMESSAGE なし)、
- 提供されたトークンhttps://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=[TOKEN]にリダイレクトします。
- 上記のリンクで毎回「Internal Server Error」を取得します。
私が見るもの:
Paypal SetExpressCheckout の返品:
Array
(
[TOKEN] => XX-XXXXXXXXXXXXXXXXX
[TIMESTAMP] => 2015-03-28T20:27:25Z
[CORRELATIONID] => XXXXXXXXXXXXX
[ACK] => Success
[VERSION] => 109.0
[BUILD] => 15840636
)
上記のリンクの PayPal サンドボックス エラー メッセージ:
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, webmaster@paypal.com and inform them of the time the error occurred, and anything you might have done that may have caused the error.
More information about this error may be available in the server error log.
答えが見つからない理由:
- 一般的な「Internal Server Error」メッセージは、問題が自分にあるのか (これが私の既定の想定です)、PayPal にあるのかわからないため、どこから調べたらよいかわからないことを意味します。
- ほとんどのソリューションは、本番環境とサンドボックスの URL/API 資格情報の不一致を指摘しています。これは問題ではありません。しばらくの間、Sandbox リンクで Sandbox 資格情報を正常に使用しています。
- 私が発見したすべての PayPal 内部サーバー エラーの問題は、REST API (または IPN) を使用しているユーザー向けです。クラシック API 駆動のエクスプレス チェックアウトを使用していますが、debug_id が返されたり、取得方法がわかりません。
- 過去の問題はすべて、返されたエラー メッセージ (ACK=Failure&L_ERRORCODE0=['some error code']&L_SHORTMESSAGE0=['short error message']&L_LONGMESSAGE0=['detailed error message']) を見ることで解決できます。成功として登録されるため、ここにはエラー メッセージはありません。
- API資格情報を変更しようとしましたが、標準のセキュリティヘッダーエラーが発生しました(その後、元に戻すとエラーが消え、リダイレクト時に内部サーバーエラーに戻ります)。
- リクエスト文字列をいじってみましたが、意図的にそれを台無しにすると、そのための標準エラーメッセージが表示されるため、それが問題ではないとかなり確信しています。