Paypalエクスプレスを導入して、クレジットの支払いをシステム化する

格安・お手軽クレジットカード決済サービス Paypalをご存じ?

paypalというサービスが有ります。

ホームページにクレジットカード決済機能をつけようとすると、クレジットカード会社からの審査を受けたり、毎月一定額の手数料が発生するなど、手軽に導入するには抵抗がありますが、paypalは、売上に対する数パーセントが手数料で引かれるだけで、売上のない月は費用も掛からない、弱小サイトの心強い味方です。

PaypalとPaypalエクスプレス

paypalは、とても簡単に使えるペイパルスタンダードと、自由度の高いペイパルエクスプレスがあります。Paypalスタンダードは操作説明が不要なくらい簡単ですが、Paypalエクスプレスはとにかくわかりにくい。一番ひどいのが、公式ホームページの見にくさです。マニュアルがどこにあるのかわかりづらいし、日本語版は古かったり、サンプルコードがおいてないなど、とにかく理解するのが大変です。ちょっとした宝探しです。

paypalエクスプレスの導入

ペイパルエクスプレスを使えば、例えば自社サービスを使ってくれるお客さんがログインして、ログイン中に支払をすれば、支払った会員情報をmysqlなんかに書き込んで、有料会員って自動で切り替えたりできます。有効期限があれば、期日を取得してプラス何ヶ月とか処理を書いてあげればできるはずです。原状、文書管理システムは口座振り込みのみに対応しているので、クレジットカードに対応させたいと思い、今回paypalエクスプレスを色々調べてみました。
とにかくマニュアルやらサンプルを探すのが大変です。わかりやすいサイトを何個も渡り歩いてやっとなんとなく理解できました。役に立ったサイトをご紹介します。

PayPalのエクスプレスチェックアウトをインテグレーションするには?
画像が豊富でわかりやすい。そして日本語の有り難みを感じます。全3ページに渡り丁寧に解説してくれます。
PayPal APIの使い方
ここもわかりやすい。CallShortcutExpressCheckoutの意味を教えてくれた。

PHPでPaypalのExpress Checkout をやってみた
画像は無いが分かりやすかった
PayPal Products
サンプルコードを、ウィザード式で作ってくれるサイト。公式です。まず公式ホームページからこのウィザードへリンクで辿れないあたり、マニュアルの散乱がどれだけひどいかわかっていただけると思います。
サンプルコードを簡単に作れるので、これを元に色々いじればいいのです。

ログインユーザのパラメータを渡す

自社サービスにログインしているユーザが、支払ボタンをおしたとき、そのユーザのIDを取得して、決済が完了した時、そのユーザIDの情報をmysqlに追記します。このときどうやってユーザのIDを、決済完了のページヘ渡せばいいのか、小一時間悩みました。ペイパルにそういう値を渡せるのかなと考えて調べたんですが、結局見つからず。シンプルにSESSIONで記録すれば行けるのでは?と思いやってみたら、問題なく動きました。
こちらのサイトを参考にした場合の、処理の流れは次の通りです

  1. HTMLのフォーム
  2. expresscheckout.php
  3. (決済に進んだ場合)review.php
  4. order_complete.php

つまりHTMLでは

<!-- paypal START-->
<form action='http://localhost/xxxx/xxxx/xxxx/expresscheckout.php' METHOD='POST'>
<input type='image' name='submit' src='https://www.paypal.com/en_US/i/btn/btn_xpressCheckout.gif' border='0' align='top' alt='Check out with PayPal'/>
<select name="Payment_Amount">
		<option value="10000">10,000円</option>
		<option value="20000">20,000円</option>
		<option value="30000">30,000円</option>
</select>
<input type="hidden" name="loginId" value="hoge">
</form>
<!-- paypal End -->

これで、loginIdの値をわたします。

$_SESSION['myData'] = $_POST['myData'];

決済完了のページで、mysqlにアクセスする時も、
$_SESSION[‘myData’]でIDがとれます。