ネイティブペイメント(出荷売上) (1.0)

はじめに

本書では、主にオンデマンドサービスやeコマースWebサイト向けの事前にユーザーのウォレットから決済金額をブロックする機能について説明します。 加盟店が注文を作成する際に、ユーザーのウォレットから必要な金額をブロックし、注文が確定した際にユーザーから決済金額を回収することができます。

TLSの実装

PayPay Open Payment APIでは、セキュリティ対策としてTLS 1.2以上の使用が必須となっております。TLS1.0およびTLS1.1では接続できませんのでご注意ください。

加盟店を登録する

PayPay OPAの利用を開始するには、事前に定義されたプロセスに従って、PayPay加盟店として登録をしなければなりません。 このプロセスは 情報収集、手動検証、契約確認、およびクレデンシャル情報の発行から構成されます。 このプロセスが完了すると、加盟店はPayPayプラットフォームに登録され、 QRコードスキャンとPOS統合によってPayPayユーザーからオフラインでの決済を回収する準備が整います。 オンライン決済統合の場合、加盟店用にOPAクライアントが作成され、以下の項目が設定されます。

  • api keyとsecret
  • 許可された認可コールバックドメイン
  • ユーザー認可有効期間
  • Webhookエンドポイント
  • クライアントIPホワイトリスト

これらの設定はすべて、登録プロセス中に作成された加盟店ログインアカウントで管理されます。

ユーザーからのPayPayアプリ、PayPayWeb画面への日本国外からのアクセスは制限されています。詳細については個別にご相談ください。

ユーザー認可を取得する

PayPayユーザーのウォレットから決済を回収できるようにするには、ユーザーの認可を明示的に取得する必要があります。

ユーザー認可を取得する方法については、 こちら をご参照ください。

また、SCOPEには"preauth_capture_native,get_balance"を指定してください。 Get user wallet balanceを使用する場合のみ、"preauth_capture_native, get_balance"を指定してください。

API認証

本ドキュメントに記載されているAPIは、HMAC方式での認証が必要です。 HMAC方式での認証の実装においては、認証オブジェクト生成に対してすべてのリクエストを考慮します。

認証オブジェクトに必要なパラメータ

Value Description Example
API Key PayPayから発行されたAPI Key APIKeyGenerated
API Key secret PayPayから発行されたAPI Key secret APIKeySecretGenerated
Request URI リクエストURL path /v2/codes
Request method HTTPメソッド POST
Epoch 現在のエポックタイムスタンプ(秒単位),
Note : サーバー時刻との差が2分未満である必要があります。
1579843452
Nonce ランダムに生成された文字列。
Note : 任意の文字列、length 8を推奨。
acd028
Request body リクエストで渡されるbody。

{"sampleRequestBodyKey1":"sampleRequestBodyValue1","sampleRequestBodyKey2":"sampleRequestBodyValue2"}

Request content type リクエストヘッダーで渡されるコンテンツタイプ。 application/json;charset=UTF-8;
hash (MD5(Request body, Request content type)) リクエストの本文とコンテンツタイプのハッシュ。以下に記載されているStep1で生成されます。 1j0FnY4flNp5CtIKa7x9MQ==

これらから生成されるサンプルHMAC Authヘッダーは以下の通りです。

hmac OPA-Auth:APIKeyGenerated:NW1jKIMnzR7tEhMWtcJcaef+nFVBt7jjAGcVuxHhchc=:acd028:1579843452:1j0FnY4flNp5CtIKa7x9MQ==

HMAC authヘッダーの生成ステップ

Step 1: MD5アルゴリズムを使用してbodyとcontent-typeをハッシュ化する

サンプルコード

private String requestBody;
private String contentType;

MessageDigest md = MessageDigest.getInstance("MD5");
md.update(contentType.getBytes(StandardCharsets.UTF_8));
md.update(requestBody.getBytes(StandardCharsets.UTF_8));
String hash = new String(
          Base64.getEncoder().encode(md.digest()),
          StandardCharsets.UTF_8);

Note : HTTP GETメソッドの場合など、リクエストの本文がない場合、MD5を生成する必要はありません。代わりに、hashには"empty"がセットされます。

Step 2: HMAC-SHA256でハッシュ化される文字列を生成します。

リクエストの署名には、以下のパラメータが必要です。

private String requestUrl; //Only the request URI Example: "/v2/codes/payments/dynamic-qr-test-00002"
private String httpMethod;
private String nonce; //Random string
private String epoch;
private String contentType;
private String hash; //Output of step 1
private static final String DELIMITER = "\n";

byte[] hmacData = new StringBuilder()
                    .append(requestUrl)
                    .append(DELIMITER)
                    .append(httpMethod)
                    .append(DELIMITER)
                    .append(nonce)
                    .append(DELIMITER)
                    .append(epoch)
                    .append(DELIMITER)
                    .append(contentType)
                    .append(DELIMITER)
                    .append(hash != null ? hash : "")
                    .toString()
                    .getBytes(StandardCharsets.UTF_8);

Note : HTTP GETメソッドの場合など、リクエストの本文がない場合、content-typeおよびhashには"empty"がセットされます。

Step 3 : Step2で生成された値と、Key secretを使用してHMACオブジェクトを生成します。

public final String toBase64HmacString() {
    private String apiKeySecret;
    private byte[] dataToSign; //Output from step 2
    try {
      SecretKeySpec signingKey = new SecretKeySpec(apiKeySecret.getBytes(StandardCharsets.UTF_8),
          "HmacSHA256");
      Mac sha256HMAC = Mac.getInstance("HmacSHA256");
      sha256HMAC.init(signingKey);
      byte[] rawHmac = sha256HMAC.doFinal(dataToSign);
      return java.util.Base64.getEncoder().encodeToString(rawHmac);
    } catch (GeneralSecurityException e) {
      LOGGER.error("Unexpected error while creating hash: " + e.getMessage());
      throw new IllegalArgumentException(e);
    }
  }

Step 4 : ヘッダーオブジェクトを生成します。

String authHeader = "hmac OPA-Auth:" + api-key +
":" + macData + ":" + nonce + ":" + epoch + ":" + hash;

Note: macDataはStep3で生成された値を使用してください。また、nonceとepochは、Step2で使用した値を渡す必要があります。

HTTP GETメソッドの場合などリクエストの本文がない場合、hash値は"empty"となるため、ヘッダーオブジェクトは下記の通りとなります。

String authHeader = "hmac OPA-Auth:" + api-key +
":" + macData + ":" + nonce + ":" + epoch + ":empty";

authHeaderの値を、HttpHeader.AUTHORIZATIONにセットして渡してください。
PayPay側で渡ってきたデータをデコードし、SHA256( "key"、requestParams)を再作成します。 再作成したmacDataとヘッダーで渡ってきた値が一致しているかを検証します。

リクエスト時に加盟店(ブランド)を指定する

APIのリクエスト時に加盟店識別子をセットする必要があります。 加盟店識別子をセットするには2つの方法があります。

クエリの中にセットする:

?assumeMerchant={MerchantId}

HTTPヘッダにセットする:

X-ASSUME-MERCHANT: {MerchantId}

両方を指定した場合、クエリにセットしたパラメーターが優先されます。

エラー処理

PayPay OPAはhttpレスポンスステータスコードとOPAエラーコードを使用してリクエストの成功または失敗を示します。 これらの情報を使用して、どのようなエラー対応をするかを判断できます。 PayPay OPAは以下のhttpレスポンスステータスコードを返します。

レスポンスコード一覧

各API共通レスポンスコード

Status Code Description
200 SUCCESS Success
400 INVALID_REQUEST_PARAMS リクエストにより提供された情報に無効なデータが含まれています。例: サポートされていない通貨
401 OP_OUT_OF_SCOPE The operation is not permitted.
400 MISSING_REQUEST_PARAMS 設定されたパラメータが無効です。
401 UNAUTHORIZED 有効なapi keyとsecretが提供されていません。
404 OPA_CLIENT_NOT_FOUND OPAクライアントが見つかりません。
429 RATE_LIMIT リクエスト制限数超過。
500 SERVICE_ERROR サービスエラーが発生しました。
500 INTERNAL_SERVER_ERROR このコードは問題が発生したことを意味しますが、トランザクションが発生したかどうか正確にはわかりません。不明な支払いステータスとして処理する必要があります。
503 MAINTENANCE_MODE メンテナンス中です。

Create a payment authorization

Status Code Description
400 CANCELED_USER 対象のユーザーが存在しません。
400 INVALID_PARAMS 受信したパラメータが無効です。
400 NO_SUFFICIENT_FUND ユーザーの残高が不足しているため決済ができません。
400 UNSUPPORTED_PAYMENT_METHOD 指定された支払い方法はサポートされていません。
400 PRE_AUTH_CAPTURE_UNSUPPORTED_MERCHANT この加盟店は PreAuth & Capture をサポートしていません。
400 PRE_AUTH_CAPTURE_INVALID_EXPIRY_DATE 有効期限日が最大許容有効期限日の許容限度を超えています。
400 NO_SUFFICIENT_FUND 十分な資金がありません。
400 SUSPECTED_DUPLICATE_PAYMENT

加盟店が5分以内に同じユーザーから同じ金額を決済しようとすると、そのリクエストはこのエラーコードにより拒否されます。この設計は主に、重複決済を防止するためのものです。重複決済は通常、クライアントコードにおける設計上の欠陥に起因します。

しかし、加盟店が意図して単一のユーザーから複数回同じ金額を決済する場合があります。そのような場合、クライアントは、重複チェックをバイパスするために特定のパラメータを送信する必要があります。この詳細はpayment creation apiの仕様をご確認ください。

400 UNACCEPTABLE_OP リクエストされた操作は現状では処理できません。例: 不審なユーザー
400 LIMIT_EXCEEDED 支払い上限額を超えています。
400 USER_DEFINED_DAILY_LIMIT_EXCEEDED ユーザ設定の支払い上限額(24時間)を超えています。
400 USER_DEFINED_MONTHLY_LIMIT_EXCEEDED ユーザ設定の支払い上限額(30日)を超えています。
401 USER_STATE_IS_NOT_ACTIVE ユーザーのステータスが非アクティブなので、 リクエストを受け入れることができません。
401 INVALID_USER_AUTHORIZATION_ID userAuthorizationId(PayPayのユーザー認可ID)の有効期限が切れているか、ユーザーによりuserAuthorizationIdが取り消された場合、クライアントはuserAuthorizationIdを取得するために再度認可フローを実施する必要があります。
401 EXPIRED_USER_AUTHORIZATION_ID ユーザー認証IDの有効期限が切れています。
404 NO_VALID_PAYMENT_METHOD 指定された支払い方法はサポートされていません。
404 PAYMENT_METHOD_NOT_FOUND ユーザーの支払方法が見つかりません。
500 TRANSACTION_FAILED このコードはPayPay側でトランザクションが失敗したことを意味します。妥当な待ち時間後、同じトランザクションを新たに作成できます。

以下のエラーはユーザーがKYC(本人確認)を完了していない場合に発生します。

Status Code Description
400 NON_KYC_USER ユーザーがKYCを完了していません。

以下のエラーは使用した支払い方法がCREDIT_CARDまたはPAY_LATER_CCの場合に発生します。

Status Code Description
400 CC_LIMIT_EXCEEDED クレジットカードの利用限度超過。
400 PPC_BAD_REQUEST PayPayカード処理に何らかのエラーが発生しました。
400 PPC_EXPIRED PayPayカードの有効期限が切れています。
400 PPC_LIMIT_EXCEEDED PayPayカード限度額超過。
429 INTERNAL_SERVICE_RATE_LIMIT リクエスト制限数超過。PayPay外部のシステムにおいて一定時間内の制限を超えたリクエストが行われた場合に発生します。時間を空けたのちmerchantPaymentIdを変更してリトライしてください。

Cancel a payment authorization

Status Code Description
400 ORDER_NOT_REVERSIBLE 以下の場合にこのコードを返します。
1) 対象オーダーのステータスが REFUNDED, EXPIRED, COMPLETED, CANCELED の場合
2) キャンセル期間を過ぎた場合

以下のエラーは使用した支払い方法がCREDIT_CARDまたはPAY_LATER_CCの場合に発生します。

Status Code Description
429 INTERNAL_SERVICE_RATE_LIMIT リクエスト制限超過。

Update a payment authorization

Status Code Description
201 USER_CONFIRMATION_REQUIRED 増額ReAuthorize処理が開始しました。
400 REAUTHORIZE_REJECTED 1. オーダーのステータスがAUTHORIZEDでない時
2. オーダータイプがサポートされていない時
3. 指定された支払い方法がサポートされていない時
4. 同一のリクエストを受付済の時
400 PAY_METHOD_INVALIDATED 元の取引(Authorization)に使用された支払い方法が期限切れまたは無効の時。別の支払い方法を指定するようにユーザを誘導する必要があります。
400 REAUTH_AMOUNT_UNCHANGED ReAuthorizeの金額が同じ場合のエラー。
400 REAUTH_MAX_LIMIT_EXCEEDED ReAuthorizeの最大試行回数超過。最大試行回数は10回です。
400 REAUTHORIZE_FAILED オーダーのステータス更新に失敗しました。
404 RESOURCE_NOT_FOUND オーダーが存在しない。

Capture a payment authorization

Status Code Description
202 USER_CONFIRMATION_REQUIRED 増額キャプチャの実施にあたり、ユーザーに通知を送信しています。
400 HIGHER_AMOUNT_CAPTURE_NOT_ALLOWED productTypeを指定した決済に対し、キャプチャ閾値よりも高い金額でキャプチャした場合に発生します。
400 ORDER_NOT_CAPTURABLE Captureできない支払いです。
400 CANCELED_USER 対象のユーザーが存在しません。
400 INVALID_PARAMS 受信したパラメータが無効です。
400 NO_SUFFICIENT_FUND ユーザーの残高が不足しているため決済ができません。
400 ORDER_EXPIRED オーダーの有効期間が過ぎています。
400 REAUTHORIZATION_IN_PROGRESS PayPayの処理と競合しています。
400 ALREADY_CAPTURED 既に決済完了しています。
400 TOO_CLOSE_TO_EXPIRY リクエストが有効期限に近すぎるため、処理できません。
400 NO_SUFFICIENT_FUND 十分な資金がありません。
400 UNACCEPTABLE_OP リクエストされた操作は現状では処理できません。例: 不審なユーザー
400 LIMIT_EXCEEDED 支払い上限額を超えています。決済金額が事前承認された金額を超える場合、発生する可能性があります。
400 USER_DEFINED_DAILY_LIMIT_EXCEEDED ユーザ設定の支払い上限額(24時間)を超えています。決済金額が事前承認された金額を超える場合、発生する可能性があります。
400 USER_DEFINED_MONTHLY_LIMIT_EXCEEDED ユーザ設定の支払い上限額(30日)を超えています。決済金額が事前承認された金額を超える場合、発生する可能性があります。
400 USER_DAILY_LIMIT_FOR_MERCHANT_EXCEEDED 支払い金額が加盟店制限を超過しています。
401 USER_STATE_IS_NOT_ACTIVE ユーザーのステータスが非アクティブなので、 リクエストを受け入れることができません。
404 RESOURCE_NOT_FOUND オーダーが見つかりません。
500 BACKEND_TIMEOUT 外部サービスへのアクセス中にタイムアウトが発生しました。

Revert a payment authorization

Status Code Description
400 INVALID_PARAMS 受信したパラメータが無効です。
400 ORDER_NOT_CANCELABLE Revertできない支払いです。
404 RESOURCE_NOT_FOUND オーダーが見つかりません。

Refund a payment

Status Code Description
400 INVALID_PARAMS 受信したパラメータが無効です。
400 UNACCEPTABLE_OP 返金できません。例: 不審なユーザー
400 CANCELED_USER 対象のユーザーが存在しません。
400 THROTTLED_MULTIPLE_REFUND_REJECTED 同様の処理が進行中のため、返金リクエストが拒否されました。1分後にリトライできます。
400 REFUND_LIMIT_EXCEEDED 返金の最大数に達しているため、処理できません。加盟店の複数回返金機能が有効化されている場合にのみ発生する可能性があります。
400 REFUND_WINDOW_EXCEED 返金可能な期間を超過しています。
401 USER_STATE_IS_NOT_ACTIVE ユーザーのステータスが非アクティブなので、 リクエストを受け入れることができません。
403 MERCHANT_MULTIPLE_REFUND_REJECTED 加盟店の複数回返金機能が有効化されていません。
404 NO_SUCH_REFUND_ORDER 対象の返金が存在しません。
404 RESOURCE_NOT_FOUND オーダーが見つかりません。

Get refund details

Status Code Description
404 NO_SUCH_REFUND_ORDER 対象の返金が存在しません。

Create a topup QR Code

Status Code Description
400 DUPLICATE_TOPUP_QR_REQUEST 同一のmerchantTopUpIdを持つトップアップQRが存在します。

Get topup status

Status Code Description
404 TOPUP_DETAILS_NOT_FOUND merchantTopUpIdが無効です。

Delete QR code

Status Code Description
404 TOPUP_QR_CODE_NOT_FOUND QR codeIdが無効です。
400 TOPUP_ALREADY_DONE Topupは完了しています。
Status Code Description
401 INVALID_USER_AUTHORIZATION_ID 指定したuserAuthorizationId(PayPayのユーザー認可ID)が無効です。

Get user authorization status

Status Code Description
400 CANCELED_USER 対象のユーザーが存在しません。
401 INVALID_USER_AUTHORIZATION_ID 指定したuserAuthorizationId(PayPayのユーザー認可ID)が無効です。

Get masked user profile

Status Code Description
401 INVALID_USER_AUTHORIZATION_ID 指定したuserAuthorizationId(PayPayのユーザー認可ID)が無効です。

Check user wallet balance

Status Code Description
400 CANCELED_USER 対象のユーザーが存在しません。

Expected cashback

Status Code Description
400 VALIDATION_FAILED_EXCEPTION 誤った入力データです。
500 UNAUTHORIZED_ACCESS 不正アクセスです。

Timeout

推奨タイムアウト値は各APIで指定されています。 決済APIのタイムアウト値は30秒以下であってはいけません。 タイムアウトが発生した場合、それは状態が不明な決済として扱ってください。

状態が不明な決済の処理

この状況に対処する方法は2つあります。

  1. 取引の状況を照会するには、照会APIを使用してください。PayPayにおいて元の取引が失敗になっているか存在しない場合は、同じ取引として新しいトランザクションを開始できます。
  2. キャンセルAPIが提供されている場合は、取引をキャンセルすることもできます。キャンセルが承認された後、同じ取引として新しいトランザクションを開始できます。

OPAに関するその他のFAQについては こちら をご覧ください。

ユーザー認可のステータス変更に伴うAPI実行結果

ユーザー認可のステータス変更に伴い、APIの実行に失敗する場合があります。 想定されるユーザー状態と、対応するAPI実行結果は下記の通りとなります。他APIにおいて、ステータス変更に伴うエラーは発生しません。


Get user authorization status

ユーザーの状態
ユーザー退会ユーザー認可の有効期限切れアプリ操作での認可解除
http status:400
Code="CANCELED_USER"
http status:200
data.expiresAt<現在日
http status:200
data.status="inactive"

Create a payment authorization、Get payment methods、 Get Sets of Cashback Information、Create topup QR code、Get user wallet balance、 Check user wallet balance、Get masked user profile

ユーザーの状態
ユーザー退会ユーザー認可の有効期限切れアプリ操作での認可解除
http status:401
Code="INVALID_USER_AUTHORIZATION_ID"
http status:401
Code="EXPIRED_USER_AUTHORIZATION_ID"
http status:401
Code="INVALID_USER_AUTHORIZATION_ID"
※2022/2/25までに退会したユーザーに対して上記APIを実行した場合、
エラーコードは"VALIDATION_FAILED_EXCEPTION"となります。

Refund a payment

ユーザーの状態
ユーザー退会ユーザー認可の有効期限切れアプリ操作での認可解除
http status:400
Code="CANCELED_USER"
http status:200
Code="SUCCESS"
http status:200
Code="SUCCESS"

画面遷移図

この画面遷移図は購入操作後のアプリの表示について記載しています。

APIのRequest Parameterと表示画面のマッピングはこちらを参照してください。

購入操作後のアプリの表示はこちらを参照してください。

決済

決済・取消に関して

Create a payment authorization

ユーザーが利用可能な支払い方法(PayPay残高、PayPay(クレジット)、クレジットカード)を指定して決済リクエストを作成し、 決済金額をブロックするための支払いAuthorization(オーソリ、信用照会)を作成します。

タイムアウト: 30秒

query Parameters
agreeSimilarTransaction
string

(オプション)パラメータが「true」に設定されている場合、決済重複チェックはバイパスされます。

Request Body schema: application/json

Payment

merchantPaymentId
required
string (MerchantPaymentId) <= 64 characters

加盟店発番のトランザクション毎に一意に特定できるトランザクションID
同じmerchantPaymentIdを指定した場合は、前回の結果が返却されます。

userAuthorizationId
required
string (UserAuthorizationId) <= 64 characters

ユーザー認可フローによって返却されたPayPayユーザー認可ID

required
object (MoneyAmount)
requestedAt
required
integer (EpochTime)

エポックタイムスタンプ(秒単位)

expiresAt
integer <EpochTime> (AuthorizationExpiry)

エポックタイムスタンプ(秒単位)。有効期限は、加盟店ごとに許可されている有効期間の範囲内で設定してください。

注: PAY_LATER_CCによるオーソリの場合の有効期間は、 ユーザーがPayPay(クレジット)をキャンセルしたなどの特別な状況下で短縮される可能性があります。 このような場合、PayPayはWebhook通知により、 加盟店のオーソリ期間が切れる前に有効期間の更新(短縮)を事前に加盟店に通知します (「トランザクションイベント > AUTHORIZED | Create a payment authorization 」セクションを参照)。 キャプチャーの失敗を避けるために、加盟店はこのようなイベントを受信した後、適切な処理を実装することをお勧めします。

storeId
string <= 255 characters

加盟店に紐付く店舗ID

terminalId
string <= 255 characters

店舗に紐付く端末ID

orderReceiptNumber
string <= 255 characters

加盟店発番の注文番号

orderDescription
string <= 255 characters

注文内容の説明

Array of objects (MerchantOrderItem)
metadata
object

このパラメータは廃止となりました。
下位互換性のために項目が残されていますが、将来のリリースでは削除される予定です。

paymentMethodType
string (PaymentMethodType)

加盟店はこのフィールドを使用して決済トランザクションで使用する支払い方法を指定します。 "WALLET", "PAY_LATER_CC" (オンライン決済でPayPay(クレジット)を受け付けている加盟店が利用可能), "CREDIT_CARD" (オンライン決済でクレジットカードを受け付けている加盟店が利用可能). "PAY_LATER_CC", "WALLET", "CREDIT_CARD"が渡された場合、 決済トランザクションにPayPay(クレジット), PayPay残高、クレジットカードが使用されます。 指定した支払い方法で決済が失敗した場合でも、支払いはフォールバックされません。 指定しなかった場合、決済処理の手順はPayPay側で以下のように決定されます。 ユーザーが支払いの優先順位を設定している場合、利用可能な支払い方法の中から優先順位に従って支払い処理が試行されます。 ユーザーが支払いの優先順位を設定していない場合、PayPay残高からの支払い処理を行います。

paymentMethodId
string (PaymentMethodId)

paymentMethodTypeで指示した支払いを指定するために、paymentMethodIdはpaymentMethodTypeと共に使用します。 (特に、同一のpaymentMethodTypeで複数の支払い方法をユーザーが持つ可能性がある"CREDIT_CARD""PAY_LATER_CC"等で指定が必要です) "PAY_LATER_CC", "WALLET", "CREDIT_CARD"が渡された場合、決済トランザクションにPayPay(クレジット), PayPay残高、クレジットカードが使用されます。 この値はGet payment methods APIで取得できます。

paymentMethodTypeに"WALLET"を指定した場合は、paymentMethodIdを設定する必要はありません。

paymentMethodTypePAY_LATER_CCを指定した場合、paymentMethodIdを設定せずリクエストすることは可能ですが、その場合は最も古くPayPayに登録されたものが自動的に選択されます。

productType
string (PreauthProductType)
Enum: "DONATION" "POINT" "TICKET"

PayPayシステムのプロダクトタイプ。通常、このパラメータはオプションです。
一部の加盟店は、特定のプロダクトタイプのみの使用に制限されているため、プロダクトタイプを適切に設定する必要があります。

onetimeUseCashback
string (OnetimeUseCashback)
Enum: "ENABLED" "DISABLED"

NOTE: このパラメータを利用するためにはonetime_use_cashbackスコープが必要です。

この決済トランザクションに限りユーザーのPayPayポイントを利用するかどうかを指定します。 例えば"ENABLED"を指定した場合、ユーザーのPayPayポイント利用設定が「貯める」となっていた場合でもPayPayは当該決済トランザクションに限りPayPayポイントを使用します。 同様に"DISABLED"を指定した場合、ユーザーのPayPayポイント利用設定が「支払いに使う」となっていた場合でもPayPayは当該決済トランザクションに限ってPayPayポイントを使用しません。 ただし、設定が「ポイント運用に自動追加」の場合はこのパラメータは無視されます。

このパラメータが指定されていない場合はユーザーのPayPayポイント利用設定に従って決済を試みます。

Responses

Request samples

Content type
application/json
{
  • "merchantPaymentId": "string",
  • "userAuthorizationId": "string",
  • "amount": {
    },
  • "requestedAt": 0,
  • "expiresAt": 0,
  • "storeId": "string",
  • "terminalId": "string",
  • "orderReceiptNumber": "string",
  • "orderDescription": "string",
  • "orderItems": [
    ],
  • "metadata": { },
  • "paymentMethodType": "string",
  • "paymentMethodId": "string",
  • "productType": "DONATION",
  • "onetimeUseCashback": "ENABLED"
}

Response samples

Content type
application/json
{
  • "resultInfo": {
    },
  • "data": {
    }
}

Get payment details

決済の詳細を取得します。

Timeout: 15s

path Parameters
merchantPaymentId
required
string (schemas-MerchantPaymentId) <= 64 characters

加盟店発番のトランザクション毎に一意に特定できるトランザクションID

Responses

Response samples

Content type
application/json
{
  • "resultInfo": {
    },
  • "data": {
    }
}

Cancel a payment authorization

このAPIは、支払いのリクエスト中にクライアントが支払いのステータスを判断できない場合に使用します。 たとえば、クライアントがタイムアウトしたり、レスポンスに支払いステータスが含まれていない場合などです。

このAPIを呼び出すことで、最終的に支払い金額がユーザーのアカウントに戻ることを保証します。


Note: キャンセルはオーダーが発生した翌日の00:14:59 AMまで使用することができます。
翌日の00:15 AM以降の払い戻しはRefund a payment(返金)を使用してください。
ステータスがAUTHORIZEDの場合は、いつでも使用できます。
支払いが完了してステータスがCOMPLETEDになるか、期限を過ぎてEXPIREDになると、使用できません。

Timeout: 15s

path Parameters
merchantPaymentId
required
string (schemas-MerchantPaymentId) <= 64 characters

加盟店発番のトランザクション毎に一意に特定できるトランザクションID

Responses

Response samples

Content type
application/json
{
  • "resultInfo": {
    }
}

Update a payment authorization

このAPIは事前にユーザーの残高からブロックしていた決済金額を同じ決済手段で変更するために使用されます。

APIのコール中に、新しい AUTHORIZED イベントWebHookが発動し、トランザクションのステータスは AUTHORIZED のまま保持されます。

減額Reauthorize処理がコールされた場合、正常処理の場合に200を返し処理は完了します。

増額ReAuthorize処理が開始されると、このAPIは201: ユーザーへの再認証要求完了を返します。

突合ファイルの中では、同じオーダーIDのAUTHORIZEDトランザクションが複数存在します。突合ファイルの概要は下記です。

orderId merchantId brandName storeId terminalId transactionStatus acceptedAt amount orderReceiptNumber methodOfPayment merchantPaymentId paymentDetails
xx123456 yy08181 〇〇加盟店 1234567 0 COMPLETED 2020-01-30T10:53:25+09:00 480 000-0001 wallet, point 000-0001 [{"paymentMethod":"POINT", "amount":80}, {"paymentMethod":"wallet", “amount":400}]
xx123456 yy08181 〇〇加盟店 1234567 0 REFUNDED 2020-01-30T16:53:25+09:00 -480 000-0001 wallet refund_000-0001 [{"paymentMethod":"wallet", “amount":-480}]
xx567890 yy08181 〇〇加盟店 1234567 0 AUTHORIZED 2020-01-30T13:31:43+09:00 2924 000-0005 wallet 000-0005 [{"paymentMethod":"wallet", “amount":2924}]
xx567890 yy08181 〇〇加盟店 1234567 0 AUTHORIZED 2020-01-31T13:50:43+09:00 1000 000-0005 wallet 000-0005 [{"paymentMethod":"wallet", “amount":1000}]

タイムアウト: 30秒

Request Body schema: application/json

Reauthorize

requestId
required
string (schemas-RequestId) <= 255 characters

加盟店によるReAuthを識別するための一意のID

paymentId
required
string (PaymentId) <= 64 characters

PayPay発番の決済取引ID

required
object (schemas-MoneyAmount)
requestedAt
integer (schemas-EpochTime)

Epoch timestamp in seconds

merchantComment
string (MerchantComment) <= 255 characters

ReAuthが必要とされる理由。渡されるとPost Transaction画面に表示される

redirectUrl
string (RedirectUrlRequest)

再認証成功後にPayPayがリダイレクトするUrl。増額ReAuthorizeのリクエストでは必須です。

redirectType
string (RedirectTypeRequest)
Enum: "APP_DEEP_LINK" "WEB_LINK"

再認証成功後のリダイレクトタイプ。増額ReAuthorizeのリクエストでは必須です。

userAgent
string (UserAgentRequest)

ブラウザのユーザーエージェント文字列。増額ReAuthorizeのリクエストでは必須です。

Responses

Request samples

Content type
application/json
{
  • "requestId": "string",
  • "paymentId": "string",
  • "updatedAmount": {
    },
  • "requestedAt": 0,
  • "merchantComment": "string",
  • "redirectUrl": "string",
  • "redirectType": "APP_DEEP_LINK",
  • "userAgent": "string"
}

Response samples

Content type
application/json
{
  • "resultInfo": {
    },
  • "data": {
    }
}

Capture a payment authorization

事前にユーザーの残高からブロックしていた決済金額をキャプチャ(決済)します。
増額キャプチャの場合、ユーザーに承諾を求める通知を送信します。

Timeout: 30s

Request Body schema: application/json
merchantPaymentId
required
string (schemas-MerchantPaymentId) <= 64 characters

加盟店発番のトランザクション毎に一意に特定できるトランザクションID

required
object (schemas-MoneyAmount)
merchantCaptureId
required
string (MerchantCaptureId) <= 64 characters

加盟店発番のトランザクション毎にCaptureを一意に特定できるトランザクションID

requestedAt
required
integer (EpochTime)

エポックタイムスタンプ(秒単位)

orderDescription
required
string <= 255 characters

キャプチャの説明

Responses

Request samples

Content type
application/json
{
  • "merchantPaymentId": "string",
  • "amount": {
    },
  • "merchantCaptureId": "string",
  • "requestedAt": 0,
  • "orderDescription": "string"
}

Response samples

Content type
application/json
{
  • "resultInfo": {
    },
  • "data": {
    }
}

Revert a payment authorization

このAPIは、ユーザーの残高から決済金額をブロックしている状態をキャンセルする場合に使用します。
例えば、注文のキャンセルが発生した場合等。

Timeout: 30s

Request Body schema: application/json

Revert Authorized Order Request

merchantRevertId
required
string (MerchantRevertId) <= 64 characters

加盟店発番のトランザクション毎にRevertを一意に特定できるトランザクションID

paymentId
required
string (schemas-PaymentId) <= 64 characters

PayPay発番の決済トランザクションID

requestedAt
required
integer (EpochTime)

エポックタイムスタンプ(秒単位)

reason
string (schemas-Reason) <= 255 characters

オプション

Responses

Request samples

Content type
application/json
{
  • "merchantRevertId": "string",
  • "paymentId": "string",
  • "requestedAt": 0,
  • "reason": "string"
}

Response samples

Content type
application/json
{
  • "resultInfo": {
    },
  • "data": {
    }
}

Refund a payment

ユーザーへ返金します。
返金の受付のみを行い、PayPay側の非同期処理にて返金を実施しています。
返金の結果については、Get refund detailsにてご確認下さい。

タイムアウト: 30秒

Request Body schema: application/json

Refund

merchantRefundId
required
string (MerchantRefundId) <= 64 characters

加盟店発番のトランザクション毎に返金を一意に特定できるトランザクションID
複数回の返金を行う場合は、返金トランザクションごとに一意なmerchantRefundIdを設定。
複数回の返金時に、同じmerchantRefundIdを指定した場合は、前回の結果が返却されます。

paymentId
required
string (PaymentId) <= 64 characters

PayPay発番の決済取引ID

required
object (MoneyAmount)
requestedAt
required
integer (EpochTime)

エポックタイムスタンプ(秒単位)

reason
string (Reason) <= 255 characters

オプション (最大長255バイト)

Responses

Request samples

Content type
application/json
{
  • "merchantRefundId": "string",
  • "paymentId": "string",
  • "amount": {
    },
  • "requestedAt": 0,
  • "reason": "string"
}

Response samples

Content type
application/json
{
  • "resultInfo": {
    },
  • "data": {
    }
}

Get refund details

GET Refund Details APIの任意のリクエストクエリパラメータ paymentId: POST Refund APIにおいて、同じ merchantRefundId を複数の異なる paymentId に使う場合のみに渡す必要があります。

複数の異なる paymentId (異なる決済トランザクションのID)に同じ merchantRefundId を使う場合、PayPayでは1つの merchantRefundId に対して複数の返金データが紐付けられます。
PayPayは merchantIdmerchantRefundIdpaymentId を返金トランザクションの詳細を特定するための固有なキー(idempotency-key)であるものとしています。
1つの merchantRefundId に複数の paymentId が紐付けられる場合、merchantRefundId に加えて paymentId をリクエストパラメータに追加することにより固有の返金トランザクションが返されます。本ケースで paymentId を追加しない場合、最新の返金トランザクションが返されます。

Timeout: 15s

path Parameters
merchantRefundId
required
string (MerchantRefundIdSimple) <= 64 characters

加盟店発番のトランザクション毎に返金を一意に特定できるトランザクションID

query Parameters
paymentId
string (PaymentId) <= 64 characters

PayPay発番の決済取引ID

Responses

Response samples

Content type
application/json
{
  • "resultInfo": {
    },
  • "data": {
    }
}

Get Sets of Cashback Information

  • この参照系 REST API は、支払い方法ごとの予定のキャッシュバックを返します。
  • 顧客が注文をする前に、利用可能なキャッシュバック情報を提供します。

タイムアウト: 15秒

Request Body schema: application/json

リクエスト・パラメータ

requestId
required
string (RequestId) <= 64 characters

加盟店による予定のキャッシュバックリクエストを識別するための一意のID

merchantPaymentId
string <= 64 characters

加盟店発番のユニークな決済取引ID。 Create Payment API と同じmerchantPaymentIdを Get Sets of Cashback Information API に渡して、キャッシュバック金額を確認します。

userAuthorizationId
required
string (UserAuthorizationId) <= 64 characters

ユーザー認可フローによって返却されたPayPayユーザー認可ID

merchantId
string (MerchantId)

PayPayで採番された加盟店識別子

storeId
string (StoreId) <= 255 characters

加盟店に紐づく店舗を識別するためのID

requestedAt
integer <int64>

UNIXタイムスタンプ

Array of objects (MerchantOrderItem)

この項目か amount のどちらかが必須です。

object (MoneyAmount)
productType
string (ProductType)
Enum: "VIRTUAL_BONUS_INVESTMENT" "PAY_LATER_REPAYMENT" "REAL_INVESTMENT"

PayPayシステムのプロダクトタイプ。通常、このパラメータはオプションです。
一部の加盟店は、特定のプロダクトタイプのみの使用に制限されているため、プロダクトタイプを適切に設定する必要があります。

Responses

Request samples

Content type
application/json
{
  • "requestId": "string",
  • "merchantPaymentId": "string",
  • "userAuthorizationId": "string",
  • "merchantId": "string",
  • "storeId": "string",
  • "requestedAt": 1234567890,
  • "orderItems": [
    ],
  • "amount": {
    },
  • "productType": "VIRTUAL_BONUS_INVESTMENT"
}

Response samples

Content type
application/json
{
  • "resultInfo": {
    },
  • "data": [
    ]
}

Get payment methods

決済トランザクションの中で、支払いの前にユーザーが利用可能な支払い方法を取得できます。

このAPIはユーザーが利用可能なPaymentMethodTypeとPaymentMethodIdを返します。支払い方法にはPayPay(クレジット)(PayPay(クレジット)についてはこちら)、またはクレジットカードが含まれます。ウォレットは決済APIでPaymentMethodIdを指定する必要がないため、このAPIでは返しません。

このAPIは、アカウントリンク時にget_balanceスコープによって残高情報を見る権限がユーザーに付与されているときに限って、walletInfoを返します。

ユーザーが複数のPayPayカードをPayPayアプリに登録している場合(paymentMethodTypePAY_LATER_CCのもの)、このAPIは登録されたPayPayカードをそのグレードの高い順・登録日の早い順に全て返却します。

タイムアウト: 30秒

query Parameters
userAuthorizationId
required
string (UserAuthorizationId) <= 64 characters

ユーザー認可フローによって返却されたPayPayユーザー認可ID

productType
string (ProductTypeForPaymentMethodsMixin)
Enum: "VIRTUAL_BONUS_INVESTMENT" "PAY_LATER_REPAYMENT" "REAL_INVESTMENT"

PayPayシステムのプロダクトタイプ。 特定のマーチャント以外はこのパラメータはオプションです。 特定のプロダクトタイプのみを使用するよう制限されている一部のマーチャントの場合、プロダクトタイプを適切に設定する必要があります。

Responses

Response samples

Content type
application/json
{
  • "resultInfo": {
    },
  • "data": {
    }
}

ウォレット

ユーザーのウォレット残高に関して

Check user wallet balance

ユーザーが支払いをするための十分な残高があるかを確認します。

タイムアウト: 15秒

Authorizations:
None
query Parameters
userAuthorizationId
required
string (UserAuthorizationId) <= 64 characters

ユーザー認可フローによって返却されたPayPayユーザー認可ID

amount
required
integer
currency
required
string
Value: "JPY"
productType
string (ProductType)
Enum: "VIRTUAL_BONUS_INVESTMENT" "PAY_LATER_REPAYMENT" "REAL_INVESTMENT"

PayPayシステムのプロダクトタイプ。通常、このパラメータはオプションです。
一部の加盟店は、特定のプロダクトタイプのみの使用に制限されているため、プロダクトタイプを適切に設定する必要があります。

onetimeUseCashback
string (OnetimeUseCashbackForGetBalance)
Enum: "ENABLED" "DISABLED" "ENABLED" "DISABLED"
Example: onetimeUseCashback=ENABLED

NOTE: このパラメータを利用するためにはonetime_use_cashbackスコープが必要です。

照会する残高にユーザーのPayPayポイントを含めるか否かを指定します。 例えば"ENABLED"を指定した場合、ユーザーのPayPayポイント利用設定が「貯める」となっていた場合でもPayPayポイントを含めた残高で計算します。 同様に"DISABLED"を指定した場合、ユーザーのPayPayポイント利用設定が「支払いに使う」となっていた場合でもPayPayポイントを除いた残高で計算します。 ただし、設定が「ポイント運用に自動追加」の場合はこのパラメータは無視されます。

このパラメータが指定されていない場合はユーザーのPayPayポイント利用設定に従って計算します。

Responses

Response samples

Content type
application/json
{
  • "resultInfo": {
    },
  • "data": {
    }
}

Get user wallet balance

ユーザーの残高を参照します。残高参照については、別途PayPay側に申請が必要となります。

Timeout: 15s

query Parameters
userAuthorizationId
required
string (UserAuthorizationId) <= 64 characters

ユーザー認可フローによって返却されたPayPayユーザー認可ID

currency
required
string
Value: "JPY"
productType
string (ProductTypeForGetBalanceMixin)
Enum: "VIRTUAL_BONUS_INVESTMENT" "PAY_LATER_REPAYMENT" "REAL_INVESTMENT" "POINT"

PayPayシステムのプロダクトタイプ。 特定の加盟店以外はこのパラメータはオプションです。 特定のプロダクトタイプのみを使用するよう制限されている一部の加盟店の場合、プロダクトタイプを適切に設定する必要があります。
productTypeにVIRTUAL_BONUS_INVESTMENTまたはPOINTを設定した場合、ユーザーのキャッシュバック設定状況に関係なく、現在のPayPayポイントを返します。

onetimeUseCashback
string (OnetimeUseCashbackForGetBalance)
Enum: "ENABLED" "DISABLED" "ENABLED" "DISABLED"
Example: onetimeUseCashback=ENABLED

NOTE: このパラメータを利用するためにはonetime_use_cashbackスコープが必要です。

照会する残高にユーザーのPayPayポイントを含めるか否かを指定します。 例えば"ENABLED"を指定した場合、ユーザーのPayPayポイント利用設定が「貯める」となっていた場合でもPayPayポイントを含めた残高で計算します。 同様に"DISABLED"を指定した場合、ユーザーのPayPayポイント利用設定が「支払いに使う」となっていた場合でもPayPayポイントを除いた残高で計算します。 ただし、設定が「ポイント運用に自動追加」の場合はこのパラメータは無視されます。

このパラメータが指定されていない場合はユーザーのPayPayポイント利用設定に従って計算します。

Responses

Response samples

Content type
application/json
{
  • "resultInfo": {
    },
  • "data": {
    }
}

Create topup QR code

このAPIは、トップアップ用のQRコードを作成します。 ユーザーはこのQRコードをスキャンし、PayPay残高にトップアップすることができます。

Timeout: 30s

Request Body schema: application/json

QRCode

merchantTopUpId
required
string (MerchantTopUpId) <= 64 characters

加盟店発番の一意のトップアップ取引ID

userAuthorizationId
required
string (UserAuthorizationId) <= 64 characters

ユーザー認可フローによって返却されたPayPayユーザー認可ID

required
object (MoneyAmountForTopupQR)

本取引における最小トップアップ金額(最小: 1,000円, 最大: 500,000円)

metadata
object

このパラメータは廃止となりました。
下位互換性のために項目が残されていますが、将来のリリースでは削除される予定です。

codeType
required
string
Value: "TOPUP_QR"
requestedAt
required
integer (EpochTime)

エポックタイムスタンプ(秒単位)

redirectType
string (RedirectType)
Enum: "WEB_LINK" "APP_DEEP_LINK"

トップアップ後のリダイレクト種別

redirectUrl
string

トップアップ後に遷移するページ・AppのURL

userAgent
string

WEBブラウザのUser agentを設定してください。このパラメーターを設定すると、PayPayアプリが起動し決済完了した後に起動するWEBブラウザを指定することが可能です。 この値は、javascriptのfunction navigator.userAgentを活用することで取得することができます。 このパラメータは、以下のWEBブラウザーをサポートします。(以下のWEBブラウザ以外が設定されると、ユーザのデフォルトブラウザがトランザクション後に起動されます。)

  • Android - Chrome, Firefox, UC Browser
  • iOS - Safari, Chrome, Firefox, UC Browser

また、このパラメータを指定しない場合にもユーザのデフォルトブラウザがトランザクション後に起動されます。

Responses

Request samples

Content type
application/json
{
  • "merchantTopUpId": "string",
  • "userAuthorizationId": "string",
  • "minimumTopUpAmount": {
    },
  • "metadata": { },
  • "codeType": "TOPUP_QR",
  • "requestedAt": 0,
  • "redirectType": "WEB_LINK",
  • "redirectUrl": "string",
  • "userAgent": "string"
}

Response samples

Content type
application/json
{
  • "resultInfo": {
    },
  • "data": {
    }
}

Get topup details

QRコードで実施したトップアップの詳細を取得します。

Timeout: 30s

path Parameters
merchantTopUpId
string (MerchantTopUpId) <= 64 characters

加盟店発番の一意のトップアップ取引ID

Responses

Response samples

Content type
application/json
{
  • "resultInfo": {
    },
  • "data": {
    }
}

Delete QR code

トップアップ用のQRコードを削除します。

Timeout: 30s

path Parameters
codeId
required
any

生成したトップアップ用QRコードの一意のID

Responses

Response samples

Content type
application/json
{
  • "resultInfo": {
    }
}

ユーザー

ユーザー管理に関して

Unlink user

クライアントからユーザーのリンクを解除します。

タイムアウト: 15秒

path Parameters
userAuthorizationId
required
string (UserAuthorizationId) <= 64 characters

ユーザー認可フローによって返却されたPayPayユーザー認可ID

Responses

Response samples

Content type
application/json
{
  • "resultInfo": {
    }
}

Get user authorization status

ユーザー認可状態を取得します。

タイムアウト: 15秒

path Parameters
userAuthorizationId
required
string (UserAuthorizationId) <= 64 characters

ユーザー認可フローによって返却されたPayPayユーザー認可ID

Responses

Response samples

Content type
application/json
{
  • "resultInfo": {
    },
  • "data": {
    }
}

Get masked user profile

マスクされたユーザーの電話番号を取得します。

query Parameters
userAuthorizationId
required
string (UserAuthorizationId) <= 64 characters

ユーザー認可フローによって返却されたPayPayユーザー認可ID

Responses

Response samples

Content type
application/json
{
  • "resultInfo": {
    },
  • "data": {
    }
}

Get PayPaySTEP rate

当月または次月に関する、PayPaySTEPを考慮した決済時PayPayポイント付与率に関する情報を取得します。

このAPIを利用するためにはcashbackスコープが必要かつユーザーの同意も必要です。

Timeout: 10s

query Parameters
userAuthorizationId
required
string (UserAuthorizationId) <= 64 characters

ユーザー認可フローによって返却されたPayPayユーザー認可ID

period
required
string
Enum: "current_month" "next_month" "current_month,next_month"

レスポンスに含めたい期間(複数の場合カンマ区切り)

Responses

Response samples

Content type
application/json
{
  • "resultInfo": {
    },
  • "data": {
    }
}

イベント発生時のユーザーへの通知

ユーザーがPayPayアプリからの通知を許可している場合、以下の内容の通知がユーザーへ配信されます。

通知

イベント カテゴリ メッセージ(例)
Create a payment authorization:API Push通知 〇〇が注文を受け付けました。
注文が完了しなかった場合、YYYY/MM/DD hh:mmに返戻されます。
金額: ¥1,000
決済番号: xxxxxxxxxxxxxxxxxxxx
Update a payment authorization:API Push通知 〇〇が支払い依頼金額を変更しました
注文が完了しなかった場合、YYYY/MM/DD hh:mmに返金されます
変更後の金額: ¥1,000
決済番号: xxxxxxxxxxxxxxxxxxxx
Capture a payment authorization:API Push通知 〇〇への支払いが完了しました。
金額: ¥1,000
決済番号: xxxxxxxxxxxxxxxxxxxx
Revert a payment authorization:API Push通知 支払い受付が〇〇によって取り消されました。
金額: ¥1,000
決済番号: xxxxxxxxxxxxxxxxxxxx
増額の承認要求 Push通知 〇〇が支払い依頼金額を変更しました
詳細の確認の上、支払い処理をしてください
追加された金額: ¥1,000
決済番号: xxxxxxxxxxxxxxxxxxxx
増額の承認要求 アクションバー 〇〇が支払い依頼金額を変更しました
残高ブロックの有効期限を超過 Push通知 支払い受付が取り消されました。
金額: ¥1,000
決済番号: xxxxxxxxxxxxxxxxxxxx
Refund a payment:API Push通知 〇〇から返金が行われました。
金額: ¥1,000
決済番号: xxxxxxxxxxxxxxxxxxxx

基本的なステータスの遷移

イベント毎の基本的なステータスの遷移と、WEBHOOK通知については下記の通りとなります。

実施処理 実施前 実施後 WEBHOOK通知
Create a payment authorization:API - AUTHORIZED AUTHORIZED
Update a payment authorization:API AUTHORIZED AUTHORIZED AUTHORIZED
Capture a payment authorization:API AUTHORIZED COMPLETED COMPLETED
残高ブロックの有効期限を超過 AUTHORIZED EXPIRED EXPIRED
Revert a payment authorization:API AUTHORIZED CANCELED CANCELED
Cancel a payment authorization:API AUTHORIZED FAILED 無し
Refund a payment:API COMPLETED REFUNDED 無し

Webhookの設定

PayPayは、アカウントでイベントが発生したときにアプリケーションに通知するWebhookを送信します。 通知を受信するためには、POSTメソッドを使用してクライアントにデータを送信するWebhook URLを設定する必要があります。 すべての通知データには、どのイベントが発生したかを判断するためにクライアントサービスで使用できるnotification_typeフィールドがあります。

Webhook処理が正常に終了した場合、200 OK のHTTPステータスコードを返してください。 レスポンスボディは必須ではないですが、"OK"など、簡単な文字列を返していただくことを推奨します。

セキュリティ上の問題から、通知受信において、クライアントによるPayPay IPアドレスのホワイトリスト登録を強く推奨します。

現在Webhookに送信されている通知について、以下もご一読ください。

カスタマーイベント

ユーザー状態の変化に関連するイベント

customer.authroization.succeeded

この通知は、クライアントがユーザーの認可を正常に取得した場合に送信されます

{
  "notification_type": "customer.authroization.succeeded",
  "notification_id": "evt_aXnbdeFt2Ke",
  "createdAt": "1349654313",
  "referenceId": "yyyy",
  "nonce": "12345",
  "scopes": "preauth_capture_native",
  "userAuthorizationId": "xxxxx",
  "profileIdentifier": "<masked phone number or email>",
  "expiry": 1234567  // the authorization id expiration epoch timestamp in seconds
}

customer.authroization.failed

この通知は、クライアントがユーザーの認可の取得に失敗した場合に送信されます。

{
  "notification_type": "customer.authroization.failed",
  "notification_id": "evt_aXnbdeFt2Ke",
  "createdAt": "1349654313",
  "referenceId": "yyyy",
  "nonce": "12345",
  "result": "declined",  // or bad_request
  "reason": "invalid scope"
}

Payloadのresult(結果)は、 リクエストがユーザーによって拒否された場合はdeclined(拒否された)、 リクエストに無効な情報がある場合はbad_request(不正な要求)のいずれかになります。

customer.authroization.revoked

この通知は、ユーザーがPayPayアプリから、認可を取り消した場合に送信されます。

{
  "notification_type": "customer.authroization.revoked",
  "notification_id": "evt_aXnbdeFt2Ke",
  "createdAt": "1349654313",
  "userAuthorizationId": "xxxxx",
  "referenceId": "yyyy"
}

customer.authroization.extended

この通知は、ユーザー認可の期限がPayPayによって延長された場合に送信されます。

支払いの実施/認可の取得をした場合にユーザー認可の期限を延長します。 これにより、ユーザー操作による認可の取得を減らすことができるため、ユーザーへの負担を減らすことができます。

{
    "notification_type": "customer.authroization.extended",
    "notification_id": "evt_aXnbdeFt2Ke",
    "createdAt": "1349654313",
    "scopes": "preauth_capture_native",
    "userAuthorizationId": "xxxxx",
    "expiry": 1234567  // 秒単位の認証ID有効期限エポックタイムスタンプ
}

customer.authroization.canceled

この通知は、ユーザーが退会した時に送信されます。

サンプル・イベント:

{
  "notification_type": "customer.authroization.canceled",
  "notification_id": "evt_aXnbdeFt2Ke",
  "createdAt": "1349654313",
  "userAuthorizationId": "xxxxx"
}

トランザクションイベント

トランザクションのステータスが変更になった際、Webhookで通知します。

AUTHORIZED | Create a payment authorization

この通知は、以下の2つのケースで発生します。

  1. 支払い承認が正常に作成された場合。
  2. PayLater 側で制御不能な事象が発生し、支払承認の有効期限が予期せず短縮された場合(PAY_LATER_CC オーソリにのみ適用可能)。

ケース 2 の場合、更新された有効期限がペイロードに含まれます。 マーチャントはこのようなイベントの発生後、キャプチャ失敗を回避するために適切な処理を実装する必要があります。

{
  "notification_type": "Transaction",
  "merchant_id": "123456789",
  "store_id": "123456",
  "pos_id": "123",
  "order_id": "123456789123456",
  "merchant_order_id": "",
  "authorized_at": "2020-03-13T13:35:30Z",
  "expires_at": "2020-04-13T13:35:29Z",
  "paid_at": null,
  "order_amount": 12345,
  "state": "AUTHORIZED"
}

AUTHORIZED | Update a payment authorization

この通知は、ReAuthorize処理が成功した際に送信されます。

{
  "notification_type": "Transaction",
  "merchant_id": "123456789",
  "store_id": "123456",
  "pos_id": "123",
  "order_id": "123456789123456",
  "merchant_order_id": "",
  "authorized_at": "2020-03-13T13:35:30Z",
  "expires_at": "2020-04-13T13:35:29Z",
  "paid_at": null,
  "order_amount": 12345,
  "reauth_request_id": "123456789",
  "state": "AUTHORIZED"
}

COMPLETED

この通知は、オーダーステータスがCOMPLETEDに変わった際に送信されます。

{
  "notification_type": "Transaction",
  "merchant_id": "123456789",
  "store_id": "123456",
  "pos_id": "123",
  "order_id": "123456789123456",
  "merchant_order_id": "",
  "authorized_at": "2020-03-13T13:35:30Z",
  "expires_at": "2020-04-13T13:35:29Z",
  "paid_at": "2020-04-13T13:35:29Z",
  "order_amount": 12345,
  "state": "COMPLETED"
}

CANCELED

この通知は、オーダーステータスがCANCELEDに変わった際に送信されます。

{
  "notification_type": "Transaction",
  "merchant_id": "123456789",
  "store_id": "123456",
  "pos_id": "123",
  "order_id": "123456789123456",
  "merchant_order_id": "",
  "authorized_at": "2020-03-13T13:35:30Z",
  "expires_at": "2020-04-13T13:35:29Z",
  "paid_at": null,
  "order_amount": 12345,
  "state": "CANCELED"
}

EXPIRED

この通知は、オーダーステータスがEXPIREDに変わった際に送信されます。

{
  "notification_type": "Transaction",
  "merchant_id": "123456789",
  "store_id": "123456",
  "pos_id": "123",
  "order_id": "123456789123456",
  "merchant_order_id": "",
  "authorized_at": "2020-03-13T13:35:30Z",
  "expires_at": "2020-04-13T13:35:29Z",
  "paid_at": null,
  "order_amount": 12345,
  "state": "EXPIRED"
}

EXPIRED_USER_CONFIRMATION

この通知は、ユーザーへの増額の承認要求が期限切れとなった際に送信されます。 増額の承認要求は、リクエストから6時間後に期限切れになります。

{
  "notification_type": "Transaction",
  "merchant_id": "123456789",
  "store_id": "123456",
  "pos_id": "123",
  "order_id": "123456789123456",
  "merchant_order_id": "",
  "authorized_at": "2020-03-13T13:35:30Z",
  "expires_at": "2020-04-13T13:35:29Z",
  "confirmation_expires_at": "2020-04-13T13:35:29Z",
  "order_amount": 12345,
  "reauth_request_id": "123456789",
  "state": "AUTHORIZED"
}

突合ファイル

PayPayでは取引明細ファイル(突合ファイル)を日次の処理で生成し、Webhookで通知します。
transactionStatus: "FAILED"の場合、エラー原因によっては、突合ファイルに出力されない場合があります。
突合ファイルに取引データが出力されない例は以下となります。
・ユーザーの利用限度額超過による取引失敗
・1回の決済上限額超過による取引失敗

突合ファイル連携仕様

Category Description Note
ファイル連携方法 Webhook
ファイル名 preauth_transaction_<merchant_id>_<from>_<to>.csv
ファイル作成単位 加盟店(merchant_id)単位
実行サイクル (JST) 日次処理 PayPay側の取引日時が作成対象日の 00:00:00 – 23:59:59 の範囲
通知時間 (JST) 毎日 1:30 から 10:00 の間
フォーマット CSV
ファイル取得可能期間 2時間程度
ファイル保持期間 1週間 加盟店障害などにより突合ファイルを取得できなかった場合に、PayPay側でwebhookを再送可能な期間となります。
再通知をご希望の際はお問い合わせください。
文字コード(ファイル本文) Shift_JIS
文字コード(ファイル名) UTF-8
改行コード CRLF

ファイルレイアウト

項目名 取得元 備考
orderId paymentId PayPayで採番された決済番号
merchantId merchant_id PayPayで採番された加盟店識別子
brandName brandName PayPayで管理しているブランド名
storeId storeId リクエスト時にセットされたstoreId
storeName storeName PayPayで管理している店舗名
terminalId terminalId リクエスト時にセットされたterminalId
transactionStatus "AUTHORIZED" , ”CANCELED” , "COMPLETED" , "EXPIRED", "FAILED", "REFUNDED" PayPayで管理している取引データのステータス
transactionStatus: "FAILED"の場合、エラー原因によっては、突合ファイルに出力されない場合があります。
突合ファイルに取引データが出力されない例は以下となります。
・ユーザーの利用限度額超過による取引失敗
・1回の決済上限額超過による取引失敗
acceptedAt 下の別表に記載
amount amount 絶対値表記のみ
orderReceiptNumber "orderReceiptNumber" リクエスト時にセットされたorderReceiptNumber
methodOfPayment "wallet", "pay_later_cc", "point" カンマ区切りの支払い方法。
merchantPaymentId 下の別表に記載 加盟店で採番された決済番号
paymentDetails [{"paymentMethod":"POINT", "amount":80}, {"paymentMethod":"WALLET", “amount":400}] 支払い方法ごとの支払い金額です。

merchantPaymentId、acceptedAtは、transactionStatus毎に値の取得元が変わるため、下記に記載します。

transactionStatus merchantPaymentId acceptedAt
AUTHORIZED merchantPaymentId Create a payment authorization request: acceptedAt
Update a payment authorization: acceptedAt
Get payment details response: acceptedAt
CANCELED merchantRevertId Revert a payment authorization request: acceptedAt
Get payment details response: revert.data.[].acceptedAt
COMPLETED merchantCaptureId Capture a payment authorization response: acceptedAt
Get payment details response: captures.data.[].acceptedAt
EXPIRED merchantPaymentId Get payment details response: expiresAt
FAILED merchantPaymentId Get payment details response: failedAt
REFUNDED merchantRefundId Refund a payment response: acceptedAt
Get payment details response: refunds.data.[].acceptedAt

Sampleファイルをダウンロード

Webhookでの通知

Webhookで通知されたpathからファイルを取得してください。

{
  "notification_type":"file.created",
  "notification_id": "<UUID>",
  "fileType":"transaction_recon",
  "path":"https://<server_path>/<filename>?parameters",
  "requestedAt":"<epoch time>"
}

FAQ

最新のFAQについてはこちらをご参照ください。

変更履歴

ドキュメント更新日 リリース日 種別 セクション 変更箇所
2022.08.23 2022.12.05 Feature Update a payment authorization 1. エラーコードからHIGHER_AMOUNT_REAUTH_NOT_SUPPORTEDを削除しました。
2. 増額ReAuthorize処理と減額ReAuthorize処理のシーケンスフロー図を追加しました。
3. 増額ReAuthorizeリクエスト用にredirectUrl, redirectType, userAgentプロパティを追加しました。
4. 増額ReAuthorizeリクエスト時のレスポンスコード:201を追加しました。
2022.09.07 2022.12.07 Feature Create a payment authorization リクエストパラメータ "paymentMethodType" の説明を更新
2022.09.10 2022.12.05 Feature Update a payment authorization 1. USER_CONFIRMATION_REQUIREDのコードを08300104に変更しました。
2. Update a payment authorization APIのUSER_CONFIRMATION_REQUIREDレスポンスからqrCodeId, deeplinkを削除しました。
3. USER_CONFIRMATION_REQUIREDレスポンスから加盟店のリクエスト情報を削除しました。
2022.09.21 2022.12.05 Feature Update a payment authorization 1. redirectTypeを「APP_DEEPLINK」から「APP_DEEP_LINK」に変更しました。
2022.10.20 2022.10.27 Feature Create a payment authorization 新しいエラーコードUSER_DAILY_LIMIT_FOR_MERCHANT_EXCEEDEDを追加しました。
2022.11.04 2022.12.05 Feature Update a payment authorization 1. acceptedAtを200 OKレスポンスに追加
2022.12.17 2023.01.31 Feature Create a payment authorization Create a payment authorizationとGet payment detailsエンドポイントについてacceptedAtの説明を更新
2023.01.25 Released Documentation Fix Create a topup QR Code リクエストパラメータminimumTopUpAmountの説明を更新
2023.02.13 Released Documentation Fix Create a payment authorization
トランザクションイベント > AUTHORIZED | Create a payment authorization
expiresAt の説明を更新しました。
2023.03.10 TBD Documentation Fix Update status code description ORDER_NOT_REVERSIBLE ステータスコードの説明を更新
2023.03.24 Released Documentation Fix 認証オブジェクトに必要なパラメータ Request URIの説明を修正しました。
2023.03.30 Released Documentation Fix 突合ファイル連携仕様 通知時間の説明を修正しました。
2023.04.13 Released Documentation Fix 突合ファイル transactionStatus: "FAILED"の場合、エラー原因によっては、突合ファイルに出力されない場合があることを追加しました。
2023.04.26 2023.06.12 Feature Create a payment authorization, Update a payment authorization, Get payment details レスポンスに paymentMethods を追加しました。
2023.06.16 Released Documentation Fix Refund a payment Refund a paymentの説明を変更しました。
2023.07.04 Released Documentation Fix Create a payment authorization, Get payment details, Capture a payment authorization, Create topup QR code, Get topup details metadataの説明を変更しました。
2023.07.31 Released Feature Update a payment authorization, エラー処理 1. ReAuthorizeについて、サポートしている支払い方法についての説明を削除しました。
2. 新しいエラーコードPAY_METHOD_INVALIDATEDを追加しました。
2023.08.01 Released Documentation Fix Create a payment authorization, Get payment details acceptedAtの説明を変更しました。
2023.09.01 2023.09.12 Feature Create a payment authorization, Get user wallet balance, Check user wallet balance onetimeUseCashbackパラメータを追加しました。
2023.09.08 2023.10.05 Feature Get payment methods Get Payment Methods APIのレスポンスに新しいフィールドmembershipを追加しました。
2023.11.06 2023.12.04 Feature Create a payment authorization, Capture a payment authorization, Update a payment authorization, Get payment details paymentMethods.typePOINTを追加しました。
2023.10.24 2023.11.13 Feature Capture a payment authorization レスポンスに paymentMethods を追加しました。
2023.11.15 2023.12.04 Feature Recon file MethodOfPayment に POINT 支払いタイプを追加し、新しい列 paymentDetails を追加しました。
2023.12.19 TBD Feature Get Refund details リクエストのクエリパラメータ paymentId を追加し、説明を更新しました。
2024.01.18 TBD Feature Get PayPaySTEP rate 新たなエンドポイントを追加しました。
2024.03.12 Released Documentation Fix Create a payment authorization, Get payment details, Capture a payment authorization, Create topup QR code, Get topup details metadataは廃止であることを追加しました。
2024.04.19 TBD Feature Create a payment authorization paymentMethodId is no longer required for PAY_LATER_CC.
2024.04.19 TBD Feature Create a payment authorization paymentMethodTypeに"PAY_LATER_CC"を指定した場合は、paymentMethodIdを設定する必要はありません。