PayPal Client integration のJPYが効かない件
PayPal Client integration で日本円を扱おうとしたら、Checkout画面がUSD
になってしまう現象にハマった。currency=JPY
で指定すれば、通貨を日本円に出来るだろうって簡単に思っていたけど、そんなに甘くなかった。
結論から言うと、金額(purchase_units.amount.value)に小数点が含まれていたのが原因。
現象
SDK指定時のURLクエリパラメータにcurrency=JPY
で指定しているにも関わらず、PayPalのCheckout画面が日本円(JPY)
ではなく米ドル(USD)
で表示された。
JPYではなくUSDになってしまった時の実装
ほぼ、実装ガイドや、実装サンプルの通りのソースコード。 異なるのはSDK指定時のURLクエリパラメータのみ。
<script src="https://www.paypal.com/sdk/js?client-id=ほげほげ¤cy=JPY&disable-funding=card,sepa"></script>
paypal.Buttons({ // Set up the transaction createOrder: function(data, actions) { return actions.order.create({ purchase_units: [{ amount: { value: '0.01' } }] }); }, // Finalize the transaction onApprove: function(data, actions) { return actions.order.capture().then(function(details) { // Show a success message to the buyer alert('Transaction completed by ' + details.payer.name.given_name + '!'); }); } }).render('#paypal-button-container');
解決方法
JavaScriptで記述している固定の金額(purchase_units.amount.value)にありえない金額(=小数点)が含まれていたため、バリデーションがかかった模様。
結果、デフォルトのUSD
が適用されたCheckout画面が表示されたみたい。なので、以下のように修正。
// Set up the transaction createOrder: function(data, actions) { return actions.order.create({ purchase_units: [{ amount: { value: '100' // ここを修正 } }] }); },
検証をコピペで楽してたのがいけないんだけどね。実際のサービスと組み合わせながら実装していたらハマっていない気もする。
いやー、ツラかった。