従量課金の導入方法

ユーザーから事前承認を取るまでのフローはAPI決済の「API認証情報の取得」と「API決済の導入方法」と同様の実装を行いますが、以下の変更を行ってください。

今後の支払い同意の取得

SetExpressCheckoutのL_BillingType0パラメータに
MerchantInitiatedBillingSingleAgreementを指定します。これによりPayPal決済画面には支払い同意が要求されていることが表示されます。

L_BILLINGTYPE0=MerchantInitiatedBillingSingleAgreement
以下は、決済をしつつ支払い同意を取るか、支払い同意のみを取って決済は後で行うかで、実装内容が異なります。

PayPal決済をしてかつ今後の支払い同意も取る場合

API決済の導入方法」と同じ実装をします。支払い同意ID(BillingAgreementID)がDoExpressCheckoutPayment APIのレスポンスとして返りますので、それを社会員情報に紐づけて保存することで、以降の決済に利用します。

今後の支払い同意のみを取って決済しない場合

同意処理のみを実行するには、「API決済の導入方法」の「PayPal決済を実行する」を行わず、代わりにCreateBillingAgreement APIを実行します。

1. CreateBillingAgreement実行とバージョン、API認証情報を指定します

METHOD=CreateBillingAgreement
VERSION=124
USER=API_username
PWD=API_password
SIGNATURE=API_signature

2.SetExpressCheckout で返却されたTokenを指定します

TOKEN=token

その他のパラメータについてはAPI仕様書を参照してください。
サンプルリクエスト:

curl -v https://api-3t.sandbox.paypal.com/nvp -d
  "USER={YourUserID}
  &PWD={YourPassword}
  &SIGNATURE={YourSignature}
  &METHOD=CreateBillingAgreement
  &VERSION=124
  &TOKEN={token}"

CreateBillingAgreementのレスポンスで支払い同意ID (BillingAgreementID)が返ります。取得した支払い同意IDを貴社会員データに紐づけて保存することで、以降の決済に利用します。

支払い同意取得後の決済を実行する

以降、DoReferenceTransactionを使用すると、購入者がPayPalログインなどの操作をすることなくPayPal決済を実行できます。
購入者はいつでもPayPalアカウント内で支払い同意を解約することができます。マーチャントはBillAgreementUpdate APIを使用して支払い同意のステータスを取得したり、解約することができます。
購入者に紐づけられている支払い同意IDを指定してDoReferenceTransaction APIを呼び出すことで決済を行います。DoReferenceTransaction APIでは以下のパラメータを指定します。

  • REFERENCEID (BillingAgreementIDを指定します)
  • PAYMENTACTION (Saleを指定します)
  • 決済金額や配送先など支払い情報

PayPalはレスポンスとしてTRANSACTIONIDを返しますので保存します。

サンプルリクエスト:

curl -v https://api-3t.sandbox.paypal.com/nvp -d
  "USER={YourUserID}
  &PWD={YourPassword}
  &SIGNATURE={YourSignature}
  &METHOD=DoReferenceTransaction
  &VERSION=124
  &REFERENCEID={BillingAgreementID}
  &PAYMENTACTION=Sale
  &AMT=7975
  &CURRENCYCODE=JPY
  &SHIPTONAME=氏名
  &SHIPTOZIP=郵便番号
  &SHIPTOSTATE=都道府県
  &SHIPTOCITY=市区町村
  &SHIPTOSTREET=番地
  &SHIPTOSTREET2=ビル名等
  &SHIPTOCOUNTRY=国
  &SHIPTOPHONENUM=電話番号"