PayPal APIの使い方 - SandboxのアカウントでCheckout Expressを試してみた

PayPalAPIを使った基本的な課金の方法について調べたので、基本的なサンプルを動かすところまでメモしました。

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では以下の種類のテストアカウントが作成できます。
    • Buyer:買い手
    • Seller:売り手
    • Website Payments Pro:売り手、ProアカウントのAPIも使える?
  • Login Email:ログイン用のメールアドレス
  • Password:パスワード
  • Add Credit Card:仮のクレジットカードを指定します。
  • Add Bank Account:Yesにすると仮の銀行口座が設定されます。
  • Account Balance:PayPal口座の残高を指定します。
  • Notes:メモ書きです。

Integration Wizardを利用してソースコードを生成する

ここからIntegration Wizardを利用した、サンプルアプリの作成について説明していきます。

以下はウィザード開始時にも確認できるExpress Checkoutのフロー図です。

Express Checkoutのフローは以下の様になっています。

  1. カートの内容とPaypalボタンを表示
  2. ユーザがPayPalボタンをクリックしたらPayPalのログインページへリダイレクトする
  3. ユーザはPayPal上にて以下の情報を確認
    • Shipping address:配送先
    • Payment methods:支払い方法、登録されているクレジットカード
    • Contact Information:ユーザID
  4. アプリケーションサイトに戻りカートの合計金額の確認(配送料を含む)画面を表示
  5. ユーザが確定したら、確認画面を最後に表示

上記はもっともシンプルな例で、クレジットカード決済を選択出きるようするなどのオプションもあります。

アプリケーションの構成

今回作成するサンプルアプリは以下の構成になります。

/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でアプリケーションを作成します。
そのた、以下の様にフォームを埋めてみました。


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_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口座の残高

PayPal口座には$100残高がある

index.php

金額を選択してPayPalボタンをクリック

PayPalにログイン

index.phpのPayPalボタンとクリックするとPayPalのページにリダイレクトされます。

PayPalアカウント情報

PayPalのアカウント情報を確認してアプリに戻る

review.php

PayPalからアプリケーションに処理がもどります。
ここでは、手抜きでユーザ名とメールアドレスと現在の金額のみ表示しています。[review]ボタンをクリックすると支払いを確定します。

order_confirm.php

PayPalへの支払い依頼が成功すると以下のように表示されます。

支払い後のPayPal口座の残高

再びPayPal口座を確認$18引かれています。

まとめ

とりあえず、なんとなく課金アプリの動きを作成しましたが、PayPalのAPIは非常に多岐にわたります。
ここまでできれば、後はwww.x.comのAPIドキュメントを読んで実装できそうですが、実際にサービスインするにあたってはPayPalのサポートを受けられそうなので、とりあえず話を聞くいてみることにします。