Hatena::ブログ(Diary)

hrendohの日記

2011-05-16

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]をクリックします。

f:id:hrendoh:20110516001522p:image

必要項目を入力し、[Agree and Submit]ボタンをクリックします。

f:id:hrendoh:20110516001521p:image

指定したメールアドレスに確認メールが送信されるので、メール内にあるリンクをクリックします。

f:id:hrendoh:20110418021351p:image

アカウントの作成が成功したことを示すメッセージが表示されたログイン画面が表示されます。

f:id:hrendoh:20110516001739p:image

テスト用アカウントの作成

メニューの[Test Accounts]を開き、Sandboxアカウントを作成します。

作成方法は以下の2通り

  • Create a preconfigured account:簡易入力によるアカウント作成、細かい項目は自動で設定される。
  • Create an account manually:実際のアカウントと同じ画面でアカウントを作成する。

実際には、manuallyで作成した場合API Credentialが生成されないので、preconfigured accountのみ利用します。

以下、preconfiguredの画面

f:id:hrendoh:20110516002845p:image

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

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

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

f:id:hrendoh:20110417235352j:image

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アプリケーションを作成します。

そのた、以下の様にフォームを埋めてみました。

f:id:hrendoh:20110516005909p:image

Payment Typeについては、説明をざっと読んでも分からなかったので、後で調べて見ないと。

Step 2. Add PayPal to your shopping cart page

Step 2に進むと以下の様にPayPalボタンのHTML、Step 1の設定が反映されたexpresscheckout.php、また共通関数を含むpaypalfunctions.phpダウンロードリンクが表示されます。

f:id:hrendoh:20110516010033p:image

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で確認した値に変更します。

f:id:hrendoh:20110417231816p:image

Step 3. Add PayPal to your billing page (payment option)

オプションなので今回はスキップします。

Step 4. Order Review - get shipping address from PayPal

PayPalでユーザ情報を確認後にアプリケーションへ戻されるページを生成していきます。

f:id:hrendoh:20110516012218p:image

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関数)。

f:id:hrendoh:20110516012517p:image

Step 6. Done

以上で終了です。

出来上がったソースはGithubに置きましたので、参考にしてみてください。

https://github.com/hrendoh/PayPal-Express-Checkout-example

動作の確認

支払い前のPayPal口座の残高

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

f:id:hrendoh:20110516143059p:image

index.php

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

f:id:hrendoh:20110516143058p:image

PayPalログイン

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

f:id:hrendoh:20110516143057p:image

PayPalアカウント情報

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

f:id:hrendoh:20110516143056p:image

review.php

PayPalからアプリケーションに処理がもどります。

ここでは、手抜きでユーザ名とメールアドレスと現在の金額のみ表示しています。[review]ボタンをクリックすると支払いを確定します。

f:id:hrendoh:20110516143055p:image

order_confirm.php

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

f:id:hrendoh:20110516143054p:image

支払い後のPayPal口座の残高

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

f:id:hrendoh:20110516143053p:image

まとめ

とりあえず、なんとなく課金アプリの動きを作成しましたが、PayPalAPIは非常に多岐にわたります。

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

socratessocrates 2011/06/09 09:30 突然の質問にもかかわらず、ご親切に教えていただきありがとうございました。おかげ様で解決することができました。ありがとうございました。

tahktahk 2011/07/27 15:15  御足労おかけして申しいわけございません。
Integration Wizardを利用してソースコードを生成するから前に進みません。
Integration Wizardは、どこにあるのでしょうか。
よろしくお願いいたします。

tahktahk 2011/07/27 15:16  御足労おかけして申しいわけございません。
Integration Wizardを利用してソースコードを生成するから前に進みません。
Integration Wizardは、どこにあるのでしょうか。
よろしくお願いいたします。

hrendohhrendoh 2011/07/28 10:32 この記事を書いた時点から、x.comの構成が変わってしまってメニューからたどれなくなってしまったようです。
以下のページを見つけました。
https://www.paypal-labs.com/integrationwizard/index.php

palkopalko 2012/04/03 20:11 > API_USERNAME
> API_PASSWORD
> API_SIGNATURE
>は、sandboxのAPI Credentialsで確認した値に変更します。
が、現在、次のようになっていて、上記3項目の値が表示されておりませんが、これは何が不備かおわかりでしたら、どうかお助けください。

API Credentials
To try out PayPal APIs in the Sandbox, create a business test account, which associates the account with an API signature you can use for testing.

Test Account Date Created
Your test accounts do not have credentials.

To get started with Website Payments Pro and Express Checkout in the Sandbox, you must first create a business test account, which automatically creates an API signature.

Create Test Account

palkopalko 2012/04/03 20:20 ビジネス・テスト・アカウント
を作る必要がある。と書いてありますね。これはどこで作れますでしょうか?

palkopalko 2012/04/03 20:31 わかりました。
テスト用アカウントの作成
で、buyerしか作っていませんでした。sellerを作りましたら、
> API_USERNAME
> API_PASSWORD
> API_SIGNATURE
が表示されました。

palkopalko 2012/04/04 12:19 ご説明どおりのテストまで出来ました。ありがとうございました。
そこで…ご説明のままですと、
<input id="monthly" type="radio" value="1" name="Payment_Amount">
などと、総額のみ受け渡ししているため、

paypalに移った直後の
Your order summary(お客さまの注文の明細)の表示は、
---------------
お客さまの注文の明細
説明
現在の購入内容
支払い前に注文の詳細を確認できます。
---------------
となるだけですね。(これもご説明とおりですが)
他の正式なpaypalを利用したサイトでみましたが、
・商品名称
・商品番号
・商品金額
を出すには、どうすればよいのでしょうか?
どうかお助けください。

palkopalko 2012/04/04 13:27 https://cms.paypal.com/jp/cgi-bin/?&cmd=_render-content&content_ID=developer/e_howto_api_ECCustomizing
こんな情報をみつけました。

paypalfunctions.php の
CallShortcutExpressCheckout
の中で、
$nameTmp = mb_convert_encoding("ホゲホゲ商品", "UTF-8", "EUC-JP");
$nvpstr = $nvpstr . "&L_PAYMENTREQUEST_0_NAME0=".$nameTmp;
$nvpstr = $nvpstr . "&L_PAYMENTREQUEST_0_NUMBER0=101";
$nvpstr = $nvpstr . "&L_PAYMENTREQUEST_0_QTY0=1";
$nvpstr = $nvpstr . "&L_PAYMENTREQUEST_0_AMT0=31000";
などと、追加することで表示されました。

hrendohhrendoh 2012/04/05 10:02 対応遅れてすみません。
情報ありがとうございます。
解決されたようで、良かったです。

hihi 2014/05/31 16:37 PayPal SandBoxを利用してテスト環境を作りたいのです。PayPalアカウントを取得する際はパーソナルとビジネスのどちらで登録すれば宜しいでしょうか?
売り手と買い手両方を試したいです。宜しく御願いします。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証