Skip to content

Instantly share code, notes, and snippets.

@ttokutake
Last active August 24, 2020 06:42
Show Gist options
  • Save ttokutake/6f415953866f7a6d018740c688a4157b to your computer and use it in GitHub Desktop.
Save ttokutake/6f415953866f7a6d018740c688a4157b to your computer and use it in GitHub Desktop.
#通貨 #JavaScript #決済 #送金

値段の表示が国際化されるときに調査した内容のメモ

自分が実装したときに使ったサービス

  • 決済サービス: https://stripe.com/jp
    • サポートしている通貨: https://stripe.com/docs/currencies
    • APIのパラメータamountが整数値しか受け付けないので上記の補助単位の桁数を利用して変換する必要がある
  • 為替レートを取得するAPIのサービス: https://openexchangerates.org/
  • 送金サービス: https://www.payoneer.com/ja/
    • 当初はTransferWiseを使おうとしたが、日本法人のビジネス利用はできなかった
      • ヨーロッパに法人を持っていないと使えない
    • もともとはStripe Connectを使っていたが海外ユーザーへの送金をするためには審査が必要
      • 審査には1か月ほど時間がかかる。我々の場合は審査結果の通知が結局されなかった
      • 国を跨いでの送金を利用している日本のサービスは滅多にないらしい
      • また送金する金額(currency)がホストアカウントの通貨で指定しないといけないので送金後の金額をユーザーに合わせて指定することができなかった

JSの実装の注意点

  • 数値誤差が結構発生するので Math.round()よりよい解決策を参考にして回避
    • 80.7 - 10.1 // = 70.60000000000001
    • round(80.7 - 10.1, 2) // = 70.60
  • 通常のNode.jsだとIntl.NumberFormatはまともに使えない
    • https://nodejs.org/api/intl.html
    • 自前でビルドするのが面倒な感じだったのでintlパッケージを利用した
      • global.Intl.NumberFormat = require("intl").NumberFormatのようにIntlを丸ごと入れ替えるのは得策ではない
      • 丸ごと入れ替えてしまうと(自動テストで判明したが)LuxonなどのライブラリーがIntlに依存していてタイムゾーン周りの計算が正しく動かなくなった
  • NumberFormat.prototype.formatToParts()がSafariで対応してなかった
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment