クレジットカード決済にOmiseを導入してみている最中で、良さそうな点・いまいちな点

## 2018/05/14 追記

最初に記事書いてから1年半くらい経過しますが、Omise は引き続き利用しています。
記事は書いた当時のままにしておきますが、一点、その中で伏せ字にしていた部分は、

> * 日本向けに ******(本決まり未定とのことで一応伏せ字) の実装予定がある

コンビニ決済、ということでした。コンビニ決済に対応してくれるって、すごいですよね。すごいんですよ。大変だったと思います。既得権益とか大きそうですもんね、この界隈……

> * 日本向けに コンビニ決済の実装予定がある

これについて新しい記事を書きましたので、リンクをつけておきます。

[Omiseのコンビニ対応について公式ドキュメントの不備不足を補填してみた](https://qiita.com/Hi_Noguchi/items/bc7541ee39ed25e37275)


---
以後は投稿当時 (2017/01) のままです。

## 前置き
2017年の1月も半ばですね。
[Webpay終了事件](https://linecorp.com/ja/pr/news/ja/2016/1560)への対応に追われている方々が、結構出てきている頃なんじゃないかなーと思いますがいかがでしょうか。

当協会では、あれこれ検討した結果、[Omise](https://www.omise.co/ja)さんを移行の第一候補として進めることにいたしました。


## 導入の決め手
導入の決め手はいくつかありますが、

* バックグラウンドがしっかりしていそう（Webpayのようなクローズはなさそう）
* Recursions API (定期課金) の実装予定がある
* 日本向けに ******(本決まり未定とのことで一応伏せ字) の実装予定がある
* 日本向けにJCBの実装もできる
* リンク型決済の実装がある
* 営業担当者さんのご対応

このへんが、やはり大きいところでした。

APIの充実度などはやはり[Stripe](https://stripe.com/jp)に惹かれるところもありましたが、JCB対応できないというのが、当協会としてはかなり厳しい判定要因になりました。


## リンク型決済とは
さて、導入理由の4番目、

* リンク型決済の実装がある

と書きました、これについて。

そもそもリンク型決済って何ぞや、という話については簡潔に。
特定のURLを、メールなりチャットなりで、支払して欲しい相手に送信する。……と、それだけで、クレジットカード決済できる。

例えば以下のような感じになります(テストショップのURLになります)

[テストショップのリンク型決済例](https://link.omise.co/DCBDFFF5)

[PayPal](https://www.paypal.com/jp/home)なんかでよくあるアレですね。
決済を申込フォームと切り離し、疎結合にできるので、素敵です。

ただ、これで決済完了に至っても、「決済完了メール」が飛ぶような実装にはなっていないんですね。
このあたりがPayPalと違って貧弱で、悲しいところです。
なので、自分で作らないといけない。悲しい(強調)


## OmiseのWebhook
自分で作る。面倒です。  
OmiseのWebhookがPOSTで渡してくれるJSONデータを受け取るクチを用意しなくてはなりません。面倒です(強調)

なるべくサーバレスでやりたいと考えているので、ひとまず、GoogleAppsScriptで受け取るようにしてみます。
ただ、ドキュメントを読んでみても、情報が少なくて何が返ってくるんだかよく分からないのですね。

[Omise Documents - Webhooks](https://www.omise.co/ja/api-webhooks)

「え、ドキュメントに VERSION-2015-11-17 とか書いてあるけれど何これ古いの？」という疑問を持たれた方は当然いらっしゃると思います。
サポートさんにお問い合わせしてみたのですが、最新です、とのことでした。が……(これについて、本筋から離れるので、末尾の補足に記しておきます)

で、GoogleAppsScriptで受け取る部分については、別記事に切り離してまとめましたので、以下ご参照ください。

[Qiita - クレジットカード決済のOmiseからPOSTで渡されるデータをGoogleAppsScriptにて受け取る](http://qiita.com/Hi_Noguchi/items/effbcf129dfaa77608b7)

結論だけ書くと、返ってきたデータはJSON形式でした。
後はこれをお料理すれば……

……あれ？


## そういや個人情報どこにもないじゃん
ええ、そうなんです、Omiseのリンク型決済って、PayPalみたいに、名前もメールアドレスも何も入力させられないんですよね。
なので、個人情報の収集のしようがない、だからJSONにそんなデータが入っているはずもない。
メールを送れない、どころか、支払者の個人特定が困難。

ん？　じゃあ、「複数使用可能なリンク型決済」って、使い道あるの……？


### 使い道ないです。現状、落とし穴です。

クレジットカード名義（アルファベット）しか取得できないので……特に日本じゃきつすぎる（同姓同名とか……）

まあ、人間が目視確認すれば、誰が何について入金したか、っていうのを、ある程度はつきあわせて照合できる、のかも、しれ、ま、せん、が、が、が……

もっとも、リンク型決済の作成を「一回限りの支払」という設定にして、「このリンクURLを送信したのはこの人」というように一対一対応しておけば、個人特定はできます。
が、その場合、リンク型決済URLが大量増殖していくので、ちょっと管理がつらみ。
リンク型決済は、数少なく抑えておいた方が、運用が楽でいいと思います。その方がDRYです。


## リンク型決済は今のところ使わない方がよいです
……という結論になりますね。
このあたり、何とかしてくださいよ、という要望は、Omiseさんにはお伝えしていますが、今のところ、有効回答はいただけていません。
何とかして欲しいです（切実）

何らか有効なご回答いただけたら本記事も更新予定ではおります。
きっといただけるんじゃないかなーという期待はあります。

Webpay事件でクレジットカード決済の移行先を検討中の方々、Omiseをこれから導入しようと考えている方々に、少しでも参考になればと共有させていただきます。


## 補足：実はドキュメントは最新じゃないし、Githubソースコードも最新じゃないですよ、という落とし穴
もうちょっとだけ続くんじゃよ。

サポートさんからは、最新です、と言われていたドキュメントですが、どう見ても最新じゃなさそうです。

[Omise Documents - Card.js](https://www.omise.co/ja/card-js-api)

こちらCard.jsのドキュメントページで、どういうものかというと、

> Card.jsを使って[今すぐ支払う(Pay Now)]ボタンをフォームに設置できます。このボタンにより、ユーザーがクレジットカード情報を入力することのできるポップアップウィンドウが起動します。

ということで、必要不可欠な機能ですね。
なのに、まずいきなり文中に、

> currency: 'jpy' は、現在未対応です。

と出ています。
が、そんな馬鹿な、ですよね、日本で展開しているのに日本円に対応していないわけがない……

[Omise Documents - Currency と Amount](https://www.omise.co/ja/currency-and-amount)

「Currency と Amount」ページを見ると、jpyについての記載もあります（当然）

Card.js のドキュメントに戻ってきて、読み進めてみると、サンプルコードがあります。
そのまま引用させていただきます。

``` html
<html>
...
<body>
<form name="checkoutForm" method="POST" action="checkout">
    <input type="hidden" name="description" value="商品合計 10,025円" />
    <script type="text/javascript" src="https://cdn.omise.co/card.js"
      data-key="YOUR_PUBLIC_KEY"
      data-image="PATH_TO_LOGO_IMAGE"
      data-frame-label="Merchant site name"
      data-button-label="Pay now"
      data-submit-label="Submit"
      data-location="yes"
      data-amount="10025"
      data-currency="jpy"
      >
    </script>
    <!--the script will render <input type="hidden" name="omiseToken"> for you automatically-->
</form>
</body>
</html>
```

……ん？　サンプルコード中に、思いっきり、

``` html
data-currency="jpy"
```

ってあるじゃないですか。じゃあ、これでいけるじゃないですかー、と思うじゃないですか。
で、やってみると、

![example_card_js.png](https://qiita-image-store.s3.amazonaws.com/0/37739/0291cc27-6300-3f4c-2e70-8ffccf988782.png)


……THB！　THBじゃないか！！

まあ、そうですよね、

> currency: 'jpy' は、現在未対応です。

って言ってましたものね、ここに嘘偽りは無いんですね……

あれ、じゃあ、Omiseって日本で使えないんじゃない！？
そんな馬鹿な話は無いと思って、色々試してみました、当協会の @hirdot と一緒に。
そうしましたらですね、

``` html
<script type="text/javascript" src="https://cdn.omise.co/card.js"
```

　↓

``` html
<script type="text/javascript" src="https://cdn.omise.co/omise.js"
```

こう書き換えると、なんと！

![example_omise_js.png](https://qiita-image-store.s3.amazonaws.com/0/37739/bad9a824-e074-42f2-fde8-18392d36833f.png)


いける。ちゃんとjpyで表示されている。っていうか、デザインが全然違う、イケてる感じになってる。
……え、何、この裏技？　こんなのドキュメントに書いてない。
そりゃ、頭に、

> Card.jsはOmise.js上で構築されており

と書かれてはいるけれど、まさか、 Card.js は廃止？で、 Omise.js が完全に代替できてしまうなんて、そんな馬鹿な。

Github 行って、中身を見てみることにしました。

[Github - Omise - Omise.js - /blob/src/omise.js](https://github.com/omise/omise.js/blob/master/src/omise.js)

……あれ？
CDNにあがっているソースコードと違うんじゃね？？

[OmiseCDN - omise.js](https://cdn.omise.co/omise.js)
※minifyされてます

違いますね、ええ、どう見ても……
このあたりで、ちょっと疲れてきて思考が止まってきました。

Github上では、最終コミット日が

> 16 Nov 2015

となっているので、ドキュメントの日付とは符号します。
が、CDN上のファイルだとjpyに対応しているので、おそらく、CDNのファイルはGithubと連携されずに更新されているのだと思います。

うん……うん？　……うん。

こんなこと書いてくると、「Omise導入つらい」という結論になりそうなものですが、とはいえ、誤りは正してもらえそうな雰囲気は今のところ感じられてはおりますし（当然ではあるんですが、当然が通用しないような企業もあるのでしてね……）将来性は感じられるので、もう少しOmiseで突っ込んでみようとは思っています。

Omiseさん、がんばってください。


## 続きの記事
[Omise.jsのdata-amount値を可変にする](http://qiita.com/Hi_Noguchi/items/14a3d4e16afcf6fb35ed)