もしかしたらそんな間抜けは僕だけなのかもしれませんが、いままでPayPalの実装を3回失敗しているので、エントリーを書いておきます。「ああ、ミニコme!の開発をやってるんだな」と思っていていただければ幸いです。
PayPalの提供する決済サービスの種別
PayPalについては以前印税95%で云々カンヌンという釣り記事を書いたとおり、凄まじいポテンシャルを秘めているのですが、日本ではあんまりです。ときどき「進出する気がないのかな?」と思うことがありますが、まあ、PayPalを見ているとハラハラする理由については後述します。
ともかく、PayPalの提供しているサービスは以下です。PayPalのページに書いてあります。ただ、なんでかは全然わからないんですが、この分類の仕方がいまいち釈然としないというか、変なんですね。「ソリューション一覧」とまとめられていますが、できることや役割、対象範囲がかなり違います。肉と魚が並べられている売り場に、ボールペンが混じっているという感じでしょうか。とにかく、この違和感を表現するためにその詳細について書きます。
- ウェブ ペイメント スタンダード
- PayPalの一番スタンダードな支払い方法。PayPalの管理画面に入ると「ボタンを作成」というのがあって決済用ボタンを作れるんですが、これはウェブペイメントスタンダードの一種(多分)。ただのHTMLフォームなのでセキュリティ的にアレだが、クレジットカードのみでの取引を受け付ける。
- ウェブペイメントプラス
- ウェブ ペイメント スタンダードの駄目なところをiframeで補うというスーパーソリューション(?)だが月額3000円で有料。Twitterでご指摘いただいたのですが、ウェブペイメントプラスの特徴は
クレジットカード情報だけで決済ができることと、バーチャルターミナルがあることですね。iframeはあくまでもオプション
だそうです。ウェブペイメントスタンダードは「クレジットカード情報+メールアドレスなどの個人情報もろもろ」なので、そこが違うということでしょうか。あと画面のカスタマイズもできるっぽいです。バーチャル端末というのは居酒屋のレジの横にあるクレジットカードを読み取る機械をブラウザで代行させちゃうよということですね。詳しくは日本では使えないPaypalの隠れ機能紹介その1【バーチャルCAT端末】をご覧ください。現時点では日本でも使えるようになってるっぽいです。 - エクスプレス チェックアウト
- PayPalのAPIを叩くことでデータのやりとりができる。ウェブ ペイメント スタンダードよりはるかに安全
だが、最大の欠点は「PayPalに登録していないと決済できない」こと。これも間違い。アカウントを取得しなくてもできる。詳細は後述また、ウェブ ペイメント スタンダードと同時に使うことはできない(多分)。嘘。できるっぽい。PayPalユーザーにExpress Checkoutを提供しつつ、クレジットカードのみのユーザーにはウェブ ペイメント スタンダードを提供するのははありかも。検証します。 - 定期支払い
- ウェブペイメントスタンダードのオプション。定期購読を実現できる。
- リファレンストランザクション*
- 後で請求する。たとえば、携帯の通話料のようなイメージ。
- 請求書ツール
- 管理画面から請求書が発行できる。「ソリューション」といえばソリューションだが、PayPalというサービスの機能の一貫のような気もする。
- 一括支払い*
- 一括で金額を支払うことができる。ただ、ぱっと見では受け取る側がPayPalアカウントを持っていないと駄目っぽい。ランサーズみたいに登録者に対して報酬を支払うようなサービスを提供している場合はありかも。
- PayPal for Digital Goods*
- 電子書籍用に向いているのではと思われるソリューション。ユーザーが同意すれば、PayPalにログインしなくても決済ができる。
- モバイル決済*
- モバイルといっても基本的にはスマートフォン向け。PayPalはガラケーに対応していない。要するにPayPalの決済画面をスマートフォン向けに最適化したということだと思う。iPhone/Androidアプリ用のSDKもあり。
- アダプティブペイメント*
- 支払いを仮受けにして後で決済したり、複数人に対して請求したりできる。要するに、一度承認を経た決済を自由に操れるようにするという機能。最近話題のグルーポン系サービスもこれで実現できる。
- マイクロペイメント
- ソリューションというより、PayPalの手数料の料率に新しいオプションが加わったよということ。2000円以下の決済ならこっちの方が得だったはず。ちなみに、ブラウザがChromeだとJavaScriptエラーが起きて登録できない。
こうしてみると色々あるなーという感じですが、基本的にすべてのソリューションは下記に分類できると思います。
- ウェブ ペイメント スタンダードに代表される、心もとないがPayPalのアカウントを必要としないソリューション
エクスプレスチェックアウトに代表される、エクスプレス チェックアウトはPayPalアカウントがなくても大丈夫のようです。PayPalアカウントを必須とするが、APIを叩いて色んなことができるソリューション- 請求書発行に代表される、PayPal機能の紹介みたいなソリューション
*が付いているソリューションはユーザーがPayPalアカウントを持っていることが前提です。
「月額手数料払いたくないし、PayPalに登録しなくても買い物できるようにしたい」と考える僕のように図々しい輩はウェブ ペイメント スタンダードしか選択肢がありません。クレジットカード決済が可能な選択肢があるならPayPal必須ってのでもいいかもしれませんが、PayPalってそんなに普及してないし、難しいところですね。
Web Payment StandardとExpress Checkoutの仕様の違い
コピペで使えるサンプルコードとかを配れると一番いいのですが、めんどくさいので概要の紹介だけにとどめます。ここからは「ウェブ ペイメント スタンダード」とかの半角スペース入りの表記がいかにもださいので、英語表記にします。最大の違いは「APIを叩けるか叩けないか」です。
Web Payment Standard
APIが叩けないので、トランザクションは自分で実装する必要があり。また、致命的なのは「HTMLによるフォーム」で情報を投げるので、悪意のあるユーザーは情報を改竄することができる(本当は2000円の買い物なのに、価格を1000円に変えたりとか)。結果的にエラー処理を行うことが多くなり、コーディングがめんどくさい。BMCreateButtonというAPIがあって、これで決済情報を動的に暗号化できることが判明。ただし、Sandboxでは微妙にエラー。検証後、報告。でもPHPとかで動的に暗号化するぐらいならExpress Checkoutでいいような気も…
また、あとからAPIを叩くことができないので、通信エラーが発生した場合のためにIPNという仕組みが用意されているが、それもなんだかなという感じ。単なるHTMLフォームでのやりとりなので、バックエンドの処理が行いづらい。
Express Checkout
PayPalアカウントが必要なことを除けば、ほぼ問題ない。普通のクレジットカード決済はこうしたAPIを備えているはずだと思う。幾つか使ったことがあるが、大体こんなだった。
Express Checkoutの追記
Yoさんからいただいたコメントで知ったのですが、Express Checkoutでもクレジットカードのみの決済は可能なようです。
ただし、Sandbox環境だとアカウント取得を強制されます。本番環境だとオーケーです。
このように「Sandboxと本番でかなり違う」のがPayPalスタンダードなので、混乱しないように気をつけてください。僕は何回も間違えています。
Express Checkoutでクレジットカードのみの決済が可能だったということは、他も大丈夫なものがあるかもしれませんね…ちょっと検証してみないとわからないかもしれません。
PayPalの良質な日本語ドキュメントはあんまりない
PayPalの実装の詳細について述べているドキュメントはあんまりありません。主な公式サイトは下記4つです。
- PayPal
- http://www.paypal.jp/jp PayPalのサイト。PayPalとはそもそもなんなのかということが書かれているため、一応目を通しておいた方がよいのだが、実装の詳細は相変わらずよくわからない。
- PayPal デベロッパーセントラル
- https://cms.paypal.com/jp/cgi-bin/?cmd=_render-content&content_ID=developer/home PayPalの開発者向け情報が書かれている。が、ところどころ日本語化されていなかったり、これはPayPal全体にいえることだが、リンク切れが多い。英語が苦手な人にとっては最後の砦。
- PayPal X Developper Network
- https://www.x.com/ PayPalの仕様書をまとめているサイト。部分的に日本語化さているが、リンク切・エラーともに多い。ドメイン名が短い。ハードに作ろうと思ったらここは目を通さざるを得ないが、落とし穴もあるので注意。なお、モバイル決済などを使う場合はここのサイトへの登録が必須。
- PayPal Sandbox
- https://developer.paypal.com/ 毎回クレジット決済なんてやってられないので、開発環境として容易されているサイト。開発用アカウントを作って実際の処理を試すことができる。
- 個人的な意見ですが、個人レベルのWebサービスを作っていて英語ができない人は、PayPalで開発しないで、素直にEC CubeとかのPayPalモジュール使うか、イプシロンなどの格安サービス(PayPalの方が安いけど)を使う方がいいと思います。一応日本語でも幾つかリソースはあるので、
- を晒しときます。
注意点1. PayPalは国際的なサービスだが、世界共通仕様ではない
中途半端に英語ができると陥りがちなことですが、PayPalのすべてのサービスはすべての国で使えるわけではありません。たとえば、ドイツ限定の機能とかもありますし、日本だけ使えない機能とかもあります。
その代表的な例が、Express CheckoutのDoDirectPaymentsという機能です。これはクレジットカード番号を入力してもらうことで、その場で決済を行うことができる大変便利な機能なのですが、これは日本だと使えません。Sandboxだと動いてしまうので、行けると思ってしまいますが、日本だと駄目です。なんでだかはわかりません。
いずれにせよ、日本でExpress CheckoutがPayPalユーザー限定になってしまっているのは、このDoDirectPaymentsが許可されていないためですExpress CheckoutはPayPalユーザーでなくてもできますが、DoDirectPaymentsは許可されていません。。。
僕は海外のMac用ソフトとかをオンラインで買うことがよくあるのですが、あちらでは普通に実現されてるんですよね。
同じ機能をミニコme!にもつけたいと思って実装したら日本では動かなかったということがありました。とんだ時間の無駄をしました。どうやら、事業者の国籍で判断しているみたいですね。
注意点2. ガラケーには対応していない
PayPalのサイトはCookieを使っているので、日本の携帯電話は(ほとんど)駄目です。これは改善しないような気がするので、ガラケーに対応したい人はがんばって公式サイトのCPになるか、PAYGENTみたいなサービスを導入するかのどっちかですね。いずれにせよ、個人レベルでは難しいと思います。僕は以前会社勤めをしていたときに公式3キャリアのCPになったことがありますが、めちゃくちゃめんどくさかったですからね。半年以上かかりました。資本金とか謎のコンサル料とか、知り合いの知り合いが某キャリアの誰々の何々とか、そういう大人のアレが求められます。
PayPalに必要なもの
というわけで、PayPalについて色々書きましたが、僕がPayPalにおこがましくも提案したいのは、財務省の天下りを受け入れろということです。場合によっては国交省(旧運輸省)と総務省(旧逓信省)も入れた方がいいでしょう。
PayPalは画期的なサービスですが、日本での機動力が弱いというか、いまどきCGIがもっさりというか、翻訳の質がアレというか、ガラケーに対応していないというか、Apple, Google, Amazonのようにガラパゴス日本の壁を打ち破るパンチに欠けます。ましてや金融というクリティカルな分野に切り込むのであれば、なおのことです。なんとなくですが、Luluと同じ匂いがします。このままでは駄目です。圧倒的なクオリティで打ちのめすのでなければ、部族の長老を自分の娘でたらし込むような藤原道長メソッドを展開してでもサービスを普及させてほしいです。
2010年に個人間の送金が禁止されたりするのは、どう考えても誰かを守るためとしか思えないので、その誰かがおそらくいるであろう財務省の天下りを受け入れることで、色んなアレをアレしてもらうのが吉でしょう。
[429] [429] Client error: `POST https://webservices.amazon.co.jp/paapi5/getitems` resulted in a `429 Too Many Requests` response: {"__type":"com.amazon.paapi5#TooManyRequestsException","Errors":[{"Code":"TooManyRequests","Message":"The request was de (truncated...)