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の画面
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
今回はPHPでアプリケーションを作成します。
そのた、以下の様にフォームを埋めてみました。
- 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
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_Password=" "; $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のAPIは非常に多岐にわたります。
ここまでできれば、後はwww.x.comのAPIドキュメントを読んで実装できそうですが、実際にサービスインするにあたってはPayPalのサポートを受けられそうなので、とりあえず話を聞くいてみることにします。