やりたい事
Stripeのcheckout.phpでdata-amountパラメータを受け取り、それを反映したい。
トラブル・問題
何故かStripeのdata-amountパラメータを受け取れません。
こちらがWordpressのショートコード追加関数で作った申込みフォームです。data-amountは5300としています。
php
1function pay_test() { 2 require_once ('/home/users/1/hoeghogehoge/web/hogehoge/wp-load.php'); 3 global $current_user; 4 get_currentuserinfo(); 5 $email = $current_user->user_email; 6 $label = '申し込む'; 7 echo ' 8 <form action="https://hogehogehoge.com/wp-content/themes/ALC/paysystem/checkout.php" method="POST"> 9 <script src="https://checkout.stripe.com/checkout.js" 10 class="stripe-button" 11 data-key="pk_test_hogehogehogehogehoge" 12 data-amount="5300" 13 data-name="hogehogeプラン" 14 data-description="hogehogeサポート・hogehoge代行" 15 data-image="https://stripe.com/img/documentation/checkout/marketplace.png" 16 data-locale="auto" 17 data-currency="jpy" 18 data-zip-code="false" 19 data-allow-remember-me="true" 20 data-email="' . $email . '" 21 data-label="' . $label . '"> 22 </script> 23 </form> 24 '; 25 } 26add_shortcode('pay_test', 'pay_test');
そしてこちらがcheckout.phpです。
https://stripe.com/docs/checkout
↑を参考にし、
$amount = $_POST['data-amount'];
でdata-amountを受け取ろうとしましたが、
var_dumpによるとNULL でした。
なぜでしょうか…?
php
1 2// Set your secret key: remember to change this to your live secret key in production 3// See your keys here: https://dashboard.stripe.com/account/apikeys 4\Stripe\Stripe::setApiKey("sk_test_hogehogehogehogehoge"); 5 6// Token is created using Stripe.js or Checkout! 7// Get the payment token submitted by the form: 8$token = $_POST['stripeToken']; 9$email = $_POST['stripeEmail']; 10$amount = $_POST['data-amount']; 11var_dump($amount); 12// フォームから情報を取得: 13try { 14 $charge = \Stripe\Charge::create(array( 15 "amount" => $amount, 16 "currency" => "jpy", 17 "source" => $token, 18 "description" => "alpha", 19 )); 20}catch (\Stripe\Error\Card $e) { 21 // 決済できなかったときの処理 22 die('決済が完了しませんでした'); 23}
この状態でテストモードによる支払いをしてみると、
売上は計上されず、ログのほうには
JSON
1{ 2 "error": { 3 "code": "parameter_missing", 4 "doc_url": "https://stripe.com/docs/error-codes/parameter-missing", 5 "message": "Missing required param: amount.", 6 "param": "amount", 7 "type": "invalid_request_error" 8 } 9}
このように出ます。やはりamountがなくなっているようです。
実験
PHP
1// Set your secret key: remember to change this to your live secret key in production 2// See your keys here: https://dashboard.stripe.com/account/apikeys 3\Stripe\Stripe::setApiKey("sk_test_hogehogehogehoge"); 4 5// Token is created using Stripe.js or Checkout! 6// Get the payment token submitted by the form: 7$token = $_POST['stripeToken']; 8$email = $_POST['stripeEmail']; 9$amount = $_POST['data-amount']; 10var_dump($amount); 11$amount = '500000'; 12// フォームから情報を取得: 13try { 14 $charge = \Stripe\Charge::create(array( 15 "amount" => $amount, 16 "currency" => "jpy", 17 "source" => $token, 18 "description" => "alpha", 19 )); 20}catch (\Stripe\Error\Card $e) { 21 // 決済できなかったときの処理 22 die('決済が完了しませんでした'); 23} 24
このように500000をあえて代入すると支払いは成功します。
http://d.hatena.ne.jp/kitokitoki/20080819/1219074548
こちらのサイトの入れ知恵で、
PHP
1foreach($_POST as $idx => $val){echo "$idx = $val<br>";}
これを使うとPOSTでとれるデータが全てとれるみたいなんですが、
これを使ってみると
stripeToken
stripeTokenType
stripeEmail
の3つしか受け取っていませんでした。なぜでしょうか…
英語なのでかなり浅い理解なのですが、海外のサイト⇓
https://gist.github.com/siddarth/1379771
https://stackoverflow.com/questions/39487550/stripe-checkout-charge-passing-amount
https://stackoverflow.com/questions/37854933/stripe-dynamically-set-amount-returns-null-when-called-on-charge-php
を見ると、
https://stripe.com/docs/checkout
にある
$amount = $_POST['data-amount'];
ではなく、
$amount = $_POST['amount'];
でしたのでこれでもやってみましたが結果は変わらずNULLでした。
既定の情報
Stripeのライブラリは6.4.1 です。
どなたかこれの原因/対処法を教えてくださいませ。
回答1件
あなたの回答
tips
プレビュー