2011-05-16
PayPal APIの使い方 - SandboxのアカウントでCheckout Expressを試してみた
PayPalのAPIを使った基本的な課金の方法について調べたので、基本的なサンプルを動かすところまでメモしました。
PayPalの開発者向けの情報は、Developer Network x.com(https://www.x.com/)にあります。
ここで紹介する例は、まず、PayPal Sandboxにテスト用アカウントを作成します。次に、x.comのサンプルコードでExpress Checkoutを利用した基本的な課金システムのソースコードをウィザードで生成することができるので、そのコードを動かしてみました。
Sandbox
PayPalは、実際にお金のやりとりをしないでAPIの動作を確認するための開発用のアカウントを作成できる、PayPal Sandboxを用意しています。
Sandboxアカウントの作成
PayPal Sandboxを利用するにはまずPayPal Sandboxのアカウントを作成します。
https://developer.paypal.com/にアクセスし[Sign Up Now]をクリックします。
必要項目を入力し、[Agree and Submit]ボタンをクリックします。
指定したメールアドレスに確認メールが送信されるので、メール内にあるリンクをクリックします。
アカウントの作成が成功したことを示すメッセージが表示されたログイン画面が表示されます。
テスト用アカウントの作成
メニューの[Test Accounts]を開き、Sandboxアカウントを作成します。
作成方法は以下の2通り
- Create a preconfigured account:簡易入力によるアカウント作成、細かい項目は自動で設定される。
- Create an account manually:実際のアカウントと同じ画面でアカウントを作成する。
実際には、manuallyで作成した場合API Credentialが生成されないので、preconfigured accountのみ利用します。
以下、preconfiguredの画面
- Country:国。テストなのでUSのまま
- Account Type:Sandboxでは以下の種類のテストアカウントが作成できます。
- Login Email:ログイン用のメールアドレス
- Password:パスワード
- Add Credit Card:仮のクレジットカードを指定します。
- Add Bank Account:Yesにすると仮の銀行口座が設定されます。
- Account Balance:PayPal口座の残高を指定します。
- Notes:メモ書きです。
Integration Wizardを利用してソースコードを生成する
ここからIntegration Wizardを利用した、サンプルアプリの作成について説明していきます。
以下はウィザード開始時にも確認できるExpress Checkoutのフロー図です。
Express Checkoutのフローは以下の様になっています。
- カートの内容とPaypalボタンを表示
- ユーザがPayPalボタンをクリックしたらPayPalのログインページへリダイレクトする
- ユーザはPayPal上にて以下の情報を確認
- Shipping address:配送先
- Payment methods:支払い方法、登録されているクレジットカード
- Contact Information:ユーザID
- アプリケーションサイトに戻りカートの合計金額の確認(配送料を含む)画面を表示
- ユーザが確定したら、確認画面を最後に表示
上記はもっともシンプルな例で、クレジットカード決済を選択出きるようするなどのオプションもあります。
アプリケーションの構成
今回作成するサンプルアプリは以下の構成になります。
/document_root/index.php /paypalfunctions.php /expresscheckout.php /review.php /order_confirm.php
- index.php:カートのPayPalに飛ぶ前のページ
- paypalfunctions.php:NameValue Pair APIをラップする共通関数
- expresscheckout.php:ウィザードで設定したExpressCheckout用のパラメータを保持
- review.php:PayPalログイン、ユーザ情報確認後コールバックされるページ、カートの内容を再表示し確定ボタンを配置する
- order_confirm.php:注文確定の確認ページ
以降、Integration Wizardを利用して実際に動くアプリケーションを作成していきます。
Integration Wizardは、「サンプルコード」ページの[Integration Wizard]>Express Checkoutを開きます。
Step 1. Input and Generate Code
そのた、以下の様にフォームを埋めてみました。
- Shopping Cart Programming Language: PHP
- Return URL: http://www.example.com/review.php
- Cancel URL: http://www.example.com/index.php
- Payment Type: Sale
- Currency Code: USD
Payment Typeについては、説明をざっと読んでも分からなかったので、後で調べて見ないと。
Step 2. Add PayPal to your shopping cart page
Step 2に進むと以下の様にPayPalボタンのHTML、Step 1の設定が反映されたexpresscheckout.php、また共通関数を含むpaypalfunctions.phpのダウンロードリンクが表示されます。
2aのテキストエリアの表示されるPayPalボタンのコードを貼り付けるページでは、課金のプランを選んでサブミットするように実装しました。
<form action='expresscheckout.php' METHOD='POST'> <input id="monthly" type="radio" value="1" name="Payment_Amount"> $1 per month<br> <input id="yearly" type="radio" value="10" name="Payment_Amount"> $10 per year<br> <input id="biyearly" type="radio" value="18" name="Payment_Amount"> $18 per 2 years<br> <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'/> </form>
表示されるボタン
PayPalボタンをクリックするとexpresscheckout.phpが呼ばれ、PayPalのログインページにリダイレクトされます。
ログインページへリダイレクトするURLはpaypalfunctions.php内のCallShortcutExpressCheckout関数にて生成されます。
また、index.phpでは金額を選択してPOSTするので、その金額を受けてセッション「Payment_Amount」にセットするように変更しました。
$paymentAmount = $_POST["Payment_Amount"]; //$paymentAmount = $_SESSION["Payment_Amount"];生成されたソースはセッションから受けるようになっている $_SESSION["Payment_Amount"] = $paymentAmount;
次に、paypalfunctions.phpをダウンロードして、以下の箇所のAPIのユーザ名/パスワード、署名を書き換えます。
$API_UserName="<API_USERNAME>"; $API_Password="<API_PASSWORD>"; $API_Signature="<API_SIGNATURE>";
- API_USERNAME
- API_PASSWORD
- API_SIGNATURE
は、sandboxのAPI Credentialsで確認した値に変更します。
Step 3. Add PayPal to your billing page (payment option)
オプションなので今回はスキップします。
Step 4. Order Review - get shipping address from PayPal
PayPalでユーザ情報を確認後にアプリケーションへ戻されるページを生成していきます。
4aのHTMLを含む、注文の最終確認ページreview.phpを作成します。
review.phpでは、PayPalから渡されたトークンを利用して配送先なども含むユーザ情報を取得し(GetShippingDetails関数)表示します。
このページのアクションは、次に作成するorder_confirm.phpを指定します。
Step 5. Order Confirmation - confirm payment from PayPal
Step 5ではreview.phpでセットした金額をPayPalに送り支払いを確定します(ConfirmPayment関数)。
Step 6. Done
以上で終了です。
出来上がったソースはGithubに置きましたので、参考にしてみてください。
https://github.com/hrendoh/PayPal-Express-Checkout-example
動作の確認
支払い前のPayPal口座の残高
PayPal口座には$100残高がある
index.php
金額を選択してPayPalボタンをクリック
PayPalにログイン
index.phpのPayPalボタンとクリックするとPayPalのページにリダイレクトされます。
PayPalアカウント情報
review.php
ここでは、手抜きでユーザ名とメールアドレスと現在の金額のみ表示しています。[review]ボタンをクリックすると支払いを確定します。
order_confirm.php
PayPalへの支払い依頼が成功すると以下のように表示されます。
支払い後のPayPal口座の残高
再びPayPal口座を確認$18引かれています。
まとめ
とりあえず、なんとなく課金アプリの動きを作成しましたが、PayPalのAPIは非常に多岐にわたります。
ここまでできれば、後はwww.x.comのAPIドキュメントを読んで実装できそうですが、実際にサービスインするにあたってはPayPalのサポートを受けられそうなので、とりあえず話を聞くいてみることにします。
- 25 http://b.hatena.ne.jp/katoiek/AWS/
- 25 http://www.google.co.jp/url?sa=t&source=web&cd=1&ved=0CBwQFjAA&url=http://d.hatena.ne.jp/hrendoh/20110416/1302940242&rct=j&q=jetty コンテキスト 一覧&ei=dDfRTaSMG43-vQPx4q2
- 20 http://www.google.co.jp/url?sa=t&source=web&cd=1&ved=0CBkQFjAA&url=http://d.hatena.ne.jp/hrendoh/20100416/1271417707&rct=j&q=javascript内でrailsを書く&ei=FjLSTcXSDMjWiALDwIDuCg&usg=AFQjCNHoQQX5BYN2Tpv7tKw9_DM
- 15 http://b.hatena.ne.jp/ma_chupic_chu/
- 12 http://www.google.co.jp/url?sa=t&source=web&cd=2&ved=0CCMQFjAB&url=http://d.hatena.ne.jp/hrendoh/20110101/1293887229&rct=j&q=fastcgi php cakephp&ei=SzPSTfbBEZT0tgOdx-2qCQ&usg=AFQjCNEV7iagoCh8bYKf_4_yC2soX6Vpug&sig2=-R9wDq4APoSLLT3dr9O6TQ
- 11 http://www.google.co.jp/search?hl=ja&safe=off&q=centos+nginx&aq=f&aqi=g3&aql=&oq=
- 8 http://node-js.info/?p=255
- 8 http://pipes.yahoo.com/pipes/pipe.info?_id=966a2ee0c62a88318ff96398da4d1632
- 7 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rlz=1T4ADRA_jaJP425JP425&q=deprecation+for+details
- 7 http://www.google.co.jp/url?sa=t&source=web&cd=2&ved=0CCIQFjAB&url=http://d.hatena.ne.jp/hrendoh/20110501/1304271044&rct=j&q=CakePHP 1.3.8 CentOS&ei=6GbTTaqCMoSsugOssa26DQ&usg=AFQjCNE0cSNmPTZkqgZW-GZPTBXT2cwQcw&sig2=xDMtfTnm90NzPKRj9KnR6Q