Help us understand the problem. What is going on with this article?

多通貨決済の設定時に使えるパラメータ

More than 3 years have passed since last update.

多通貨決済って何?

今日は Stripe でよくあるお問い合わせの中から、簡単だけど意外と使えるパラメータを幾つか書いてみたいと思います。

あまり最初は理解されない 130 以上の通貨で決済ができるって、ん?どういうこと?という方もいます。

例えば、日本で展開しているサービスやプロダクトを、他の国のお客さんが使いたい・買いたい、ということがよく起こります。そうすると、そのお客さんとしては、その国に適した通貨で表示されていた方がありがたいわけです。

相手通貨に合わせて決済ができる

日本人である私が何か買いたいなー、とウェブサイトを徘徊し、欲しいものが見つかり、「よし買おう」と思ってクレカ決済画面へ行った際に、500 kr と書いてあったら、??? となる方が多いのではないでしょうか。kr はちなみに、Danish Krone (NOK)、Norwegian Krona (NOK)、Swedish Krona (SEK) のことを表せます。ちなみに、500 SEK が円でいうとどれくらいか調べると、だいたい 5,900 円くらいらしいです。なので、逆もまたしかりで、仮に英語で作った Website に日本国外からアクセスされ、買いたいという人がいた時に、円で表示されていても同じ気持ちになるはずです。

ですので、できれば相手に適した、もしくは少しでも馴染みのある通貨にしたい、というのが本音です。そんな時に、どうやって設定したら良いのだろうか。そんな問い合わせが最近増えています。

なお、少々補足をしますと、こちらの記事でも書いていただいておりますが、「25か国対応」と、「多通貨決済」は異なります。

25 ヶ国に展開という意味につきましては、Stripeのアカウントを作成し、オンライン決済をしてビジネスをできる国数が25か国、という意味となります
http://akiyoko.hatenablog.jp/entry/2016/12/25/085750

akiyoko さん素敵な記事をありがとうございます。

運用をする上で重要なことは、日本の Stripe アカウントをお持ちの場合、どのような通貨で決済しても、Stripe が自動で外貨を両替し(両替手数料として、ミッドレートに 2% 上乗せする形で Stripe が両替し)、各ユーザさまの Stripe アカウントに登録されている日本の銀行に日本円で毎週お振込する、ということです。

Stripe の仕組みのところでデベロッパーの皆様やビジネスサイドの方に負荷をかけなくてもいいように、できるだけシンプルになっています。

Currency パラメータの使い方

Stripeでは、支払い(Charge)のリクエスト時に、currency というパラメータを用います。
決済フォームの情報でTokenを作成した後、Charge の Request を Post する際、Currency を 3 文字の ISO code の記載にのっとって指定します。

例えば、ある商品を 500 Swedish Krona (SEK) での決済をしたいという場合は、以下のようになります。

rb
# Chargeの作成
  charge = Stripe::Charge.create(
    :amount => 50000, # SEK は Cents 単位なので 100 倍表示の Integer
    :currency => "sek",
    :source => token,
    :description => "Product Name Test", # 領収書情報 (receipt) に表記
    :stament_descriptor => "Toku Shop Tokyo" # クレジットカードの明細表記
  )
rescue Stripe::CardError => e
  # カードが拒否された時
end

上記 2 行目のように currency を設定することで、エンドユーザが決済する通貨を設定することができます。

最後に、2つ以上の通貨で設定をしたいという場合には、円と外貨の対応テーブルを用意しておき、ユーザが選べるように通貨をスクロールできるようにしておくというのがオススメです。また、IP アドレスなどで国を判別し、国によってデフォルト通貨を設定することもできます。

通貨設定時によくある単位のトラブル

ここでよくいただくトラブルとしては、 米国ドル(usd)で $10 のテスト決済をしたら、失敗してしまった という問い合わせです。以下のような例です。

間違い
#... 省略
    :currency => "usd",
    :amount => 10,
#... 省略

これは小数点で通貨を表す通貨とそうではない非小数通貨の違いです。米国ドルやユーロなどの多くは、小数点を使いセント (cents) を表しますので、$10 としたい場合は amount1000 とする必要があります。さらに、失敗になった理由は、米国ドルでの決済最小金額は $0.5 ですが、それに達していないためにエラーとなります。(1度の決済最大額は8桁です。)

Screen Shot charge error.png

ご参考までに、ダッシュボードの Log のページに上記のようにログに残ります。
https://dashboard.stripe.com/test/logs
(テスト環境なので、/test が入っております)

正しい
#... 省略
    :currency => "usd",
    :amount => 1000,
#... 省略

日本円 (jpy) は非少数通貨ですので ¥1,000 とする場合は、amount1000で OK です。 1,000円の決済をしたはずなのに、100,000円となってしまって焦る という問い合わせもいただきますが、原因はここにあります。

以上、参考になると幸いです。

参考リンク

y_toku
現 Rapyuta Robotics 前 Stripe の日本 でございます。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした