前回、Paypalを使った決済システムを導入して「これは良いです!使えます!」と豪語していたのですが・・・
<前回記事>
sandboxのテストを終えて実際にliveで本アカウントのIDを使って決済をテストしてみましたところ、下記のようなエラーが出て決済へ進めなくなってしまいました。
checkout.js:2844 ppxo_unhandled_error Object {stack: "Error: Invalid env: live↵ at Object.props.env.v…://www.paypalobjects.com/api/checkout.js:4929:37)",
どうやら今までのテストで、{env:'sandbox'}としていたリクエストが{env:'live'}と変更されたものに対して「そんなん知らん!」とお叱りを受けている様子です。
PayPalのAPI許可設定の間違いなのか?コードに問題があるのか?はたまたAPIの許可に時間がかかっているだけなのか?
色々調べて半ば諦めかけていたのですが、丸一日かけて解決策を発見しました。
なんと!「envリクエストそのものを無くす」という手段で解決しました。
Djangoテンプレートだとこうなります。
<テンプレートの問題の一部分だけ抜粋>
paypal.Button.render({
{% if paypal_mode == 'sandbox' %}env: '{{ paypal_mode }}',{% endif %}
payment: function (resolve, reject) {
要するに、paypal_modeが'sandbox'じゃ無い場合はenv:自体を消す。
というコードです。
実際に自分のPayPal口座から決済をしてみましたが何事も無かったかのようにスムーズに決済完了しました。
丸一日悩んでなんじゃそりゃ!という話です。
しかし、「live」とすればOKなはずで、しかも何処を調べてもそのような記載は無いので若干気持ち悪いのですが、同じように悩んでいる方もあるんじゃないかと思い、備忘録として残しておきます。
また、「その解決策は絶対ちがうぞ!!」という方がおられましたら正しい情報のご一報をお待ちしています。
ちゃんと動けば、Paypal決済はすごく良いですよー!