##前置き
普段JPYしか使っていないと「…ん?」となる部分があったため書き残します。
##やりたかったこと
$50(USD)で決済させたい。
##起きた問題
###こうしたら
<form action="" method="POST">
<script
src="https://checkout.stripe.com/checkout.js" class="stripe-button"
data-key="key"
data-name="hoge"
data-amount=50
data-currency="USD">
</script>
</form>
data-currencyでUSDを指定したところ、金額がamountで指定した数値の1/100になってしまいました。
##原因
amountで指定した数値は、currencyで指定した通貨の最小単位(USDの場合はセント)の金額として適用されるようです。
これまでJPYしか使ってこなかったため、この仕様に気が付きませんでした。
API リクエストはすべて、金額が通貨の最小単位で指定されると想定しています。たとえば、10 USD を請求するには、amount の値を 1000 (1000 セント) で指定します。
小数点以下のない通貨の場合は、100 を掛けずに整数として金額を指定します。たとえば、500 円を請求するには、amount の値を 500 で指定します。
小数点以下のない通貨:
BIF, CLP, DJF, GNF, JPY, KMF, KRW, MGA, PYG, RWF, UGX, VND, VUV, XAF, XOF, XPF
##対処法
amountを通貨の最小単位に揃えましょう。
<form action="" method="POST">
<script
src="https://checkout.stripe.com/checkout.js" class="stripe-button"
data-key="key"
data-name="hoge"
data-amount=5000
data-currency="USD">
</script>
</form>
$stripe->charges->create([
'amount' => 5000,
'currency' => 'USD',
'source' => $token,
'description' => 'description',
]);