PayPal Express Checkout 1回限りのデジタルコンテンツ決済の覚書

Pocket

PayPalは多くの決済手段を提供いていますが、
Express Checkout NVP/SOAPについて記載します。

Express Checkout NVP/SOAP

Express Checkoutはいくつかの決済方法を提供しています。
今回はデジタルコンテンツで品目は1つの1回限りの支払いを想定します。
(送料などはありません。)

資料

上記資料を中心に個別APIはそれどれのドキュメントを見ました

必要情報

  • API署名情報
    • APIユーザー名
    • APIパスワード
    • 署名
  • APIエンドポイント
    • 本番環境
      https://api-3t.paypal.com/nvp
    • sandbox
      https://api-3t.sandbox.paypal.com/nvp
  • リダイレクト先
    • 本番環境
      https://www.paypal.com/cgi-bin/webscr?cmd=_express-checkout&useraction=commit&token=tokenValue1
    • sandbox
      https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&useraction=commit&token=tokenValue
  • TOKEN
    SetExpressCheckoutで取得
  • PayerID
    PayPalから復帰するとき取得

決済フロー

SetExpressCheckout(必須) <決済処理開始>
    ---> PayPalへリダイレクト PayPal側でユーザーは「同意して支払い」実行
        ---> returnURLへ復帰
            ---> GetExpressCheckoutDetails(任意) <詳細情報取得>
                ---> 最終確認
                    ---> DoExpressCheckoutPayment(必須) <決済実行>

SetExpressCheckout、GetExpressCheckoutDetails、DoExpressCheckoutPaymentはそれぞれ決められたパラメータでリクエストしレスポンスを取得します。

決済処理開始

SetExpressCheckoutを呼び出し決済フローで使用するトークンを取得します。
取得トークンを付与しユーザーをPayPalへリダイレクトします。

項目
METHOD SetExpressCheckout
PAYMENTREQUEST_0_AMT 決済総額
PAYMENTREQUEST_0_CURRENCYCODE 言語
PAYMENTREQUEST_0_PAYMENTACTION Sale
PAYMENTREQUEST_0_DESC 説明文
PAYMENTREQUEST_n_INVNUM 請求書番号2
returnURL 復帰URL
cancelURL キャンセル時復帰URL

リダイレクト

sandboxの例

public function redirectToPayPal( $token ) {
$payPalURL = 'https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&useraction=commit&token=' . urlencode($token);
header( "Location: " . $payPalURL );
exit;
}

決済詳細情報取得

GetExpressCheckoutDetailsで決済詳細情報を所得できます。
必要に応じて最終確認画面へ表示します。

項目
METHOD GetExpressCheckoutDetails
TOKEN token
PAYERID PayerID

token, PayerIDはPaypalから復帰URLが呼ばれる際にクエリラメーターとして付与されています。

決済実行

DoExpressCheckoutPaymentを呼び出し決済を実行します。

項目
METHOD DoExpressCheckoutPayment
PAYMENTREQUEST_0_AMT 決済総額
PAYMENTREQUEST_0_CURRENCYCODE 言語
PAYMENTREQUEST_0_PAYMENTACTION Sale
TOKEN 処理トークン
PAYERID PayerID

URLエンコーディング

cURLのパラメーターはURLエンコードし送信します。またNVP/SOAP APIのレスポンスは全てURLデコードします。

Appendix

レスポンス

SetExpressCheckout

[TOKEN] => EC-xxxxxxxxxxx
[TIMESTAMP] => 2016-10-29T00:47:48Z
[CORRELATIONID] => xxxxxxxxxxx
[ACK] => Success
[VERSION] => 124
[BUILD] => 26126731

GetExpressCheckoutDetails

[TOKEN] => EC-xxxxxxxxxxx
[BILLINGAGREEMENTACCEPTEDSTATUS] => 0
[CHECKOUTSTATUS] => PaymentActionNotInitiated
[TIMESTAMP] => 2016-01-01T00:00:00Z
[CORRELATIONID] => xxxxxxxxxxx
[ACK] => Success
[VERSION] => 124
[BUILD] => 26126731
[EMAIL] => buyer@example.com
[PAYERID] => xxxxxxx
[PAYERSTATUS] => verified
[FIRSTNAME] => 
[LASTNAME] => 
[COUNTRYCODE] => JP
[ADDRESSSTATUS] => Confirmed
[CURRENCYCODE] => JPY
[AMT] => 1080
[ITEMAMT] => 1080
[SHIPPINGAMT] => 0
[HANDLINGAMT] => 0
[TAXAMT] => 0
[DESC] => サンプル商品 1080円
[INSURANCEAMT] => 0
[SHIPDISCAMT] => 0
[INSURANCEOPTIONOFFERED] => false
[PAYMENTREQUEST_0_CURRENCYCODE] => JPY
[PAYMENTREQUEST_0_AMT] => 1080
[PAYMENTREQUEST_0_ITEMAMT] => 1080
[PAYMENTREQUEST_0_SHIPPINGAMT] => 0
[PAYMENTREQUEST_0_HANDLINGAMT] => 0
[PAYMENTREQUEST_0_TAXAMT] => 0
[PAYMENTREQUEST_0_DESC] => minKer サンプル商品 1080円
[PAYMENTREQUEST_0_INSURANCEAMT] => 0
[PAYMENTREQUEST_0_SHIPDISCAMT] => 0
[PAYMENTREQUEST_0_SELLERPAYPALACCOUNTID] => seller@example.com
[PAYMENTREQUEST_0_INSURANCEOPTIONOFFERED] => false
[PAYMENTREQUEST_0_ADDRESSSTATUS] => Confirmed
[PAYMENTREQUESTINFO_0_ERRORCODE] => 0

DoExpressCheckoutPayment

[TOKEN] => EC-xxxxxxxxxxx
[SUCCESSPAGEREDIRECTREQUESTED] => false
[TIMESTAMP] => 2016-01-01T00:00:00Z
[CORRELATIONID] => xxxxxxxxxxxxxxxx                     // PayPal との取引を一意に識別する相関 ID。
[ACK] => Success
[VERSION] => 124
[BUILD] => 26126731
[INSURANCEOPTIONSELECTED] => false
[SHIPPINGOPTIONISDEFAULT] => false
[PAYMENTINFO_0_TRANSACTIONID] => xxxxxxxxxxxxxx
[PAYMENTINFO_0_TRANSACTIONTYPE] => expresscheckout
[PAYMENTINFO_0_PAYMENTTYPE] => instant
[PAYMENTINFO_0_ORDERTIME] => 2016-01-01T00:00:00Z
[PAYMENTINFO_0_AMT] => 1080
[PAYMENTINFO_0_FEEAMT] => xxx
[PAYMENTINFO_0_TAXAMT] => 0
[PAYMENTINFO_0_CURRENCYCODE] => JPY
[PAYMENTINFO_0_PAYMENTSTATUS] => Completed                // 処理が完了しています。
[PAYMENTINFO_0_PENDINGREASON] => None
[PAYMENTINFO_0_REASONCODE] => None
[PAYMENTINFO_0_PROTECTIONELIGIBILITY] => Ineligible
[PAYMENTINFO_0_PROTECTIONELIGIBILITYTYPE] => None
[PAYMENTINFO_0_SECUREMERCHANTACCOUNTID] => xxxxxx
[PAYMENTINFO_0_ERRORCODE] => 0
[PAYMENTINFO_0_ACK] => Success

  1. tokenValueでSetExpressCheckoutで取得します。 

  2. 取引を特定するために利用します 

コメント

No comments yet.

コメントの投稿

改行と段落タグは自動で挿入されます。
メールアドレスは表示されません。