本書では、主にオンデマンドサービスやeコマースWebサイト向けの事前にユーザーのウォレットから決済金額をブロックする機能について説明します。 加盟店が注文を作成する際に、ユーザーのウォレットから必要な金額をブロックし、注文が確定した際にユーザーから決済金額を回収することができます。
PayPay Open Payment APIでは、セキュリティ対策としてTLS 1.2以上の使用が必須となっております。TLS1.0およびTLS1.1では接続できませんのでご注意ください。
PayPay OPAの利用を開始するには、事前に定義されたプロセスに従って、PayPay加盟店として登録をしなければなりません。 このプロセスは 情報収集、手動検証、契約確認、およびクレデンシャル情報の発行から構成されます。 このプロセスが完了すると、加盟店はPayPayプラットフォームに登録され、 QRコードスキャンとPOS統合によってPayPayユーザーからオフラインでの決済を回収する準備が整います。 オンライン決済統合の場合、加盟店用にOPAクライアントが作成され、以下の項目が設定されます。
これらの設定はすべて、登録プロセス中に作成された加盟店ログインアカウントで管理されます。
ユーザーからのPayPayアプリ、PayPayWeb画面への日本国外からのアクセスは制限されています。詳細については個別にご相談ください。
PayPayユーザーのウォレットから決済を回収できるようにするには、ユーザーの認可を明示的に取得する必要があります。
ユーザー認可を取得する方法については、 こちら をご参照ください。
また、SCOPEには"preauth_capture_native,get_balance"を指定してください。 Get user wallet balanceを使用する場合のみ、"preauth_capture_native, get_balance"を指定してください。
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==
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レスポンスステータスコードを返します。
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 | メンテナンス中です。 |
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 を変更してリトライしてください。 |
Status | Code | Description |
---|---|---|
400 | ORDER_NOT_REVERSIBLE | このコードは、以下のいずれかの場合に返されます。 1) 対象注文のステータスが REFUNDED ,EXPIRED , COMPLETED , または CANCELED のいずれかである場合。出荷売上以外の場合は注文のステータスが COMPLETED であってもこのエラーコードは返されません。2) キャンセルウィンドウが過ぎた場合です。 |
以下のエラーは使用した支払い方法がCREDIT_CARDまたはPAY_LATER_CCの場合に発生します。
Status | Code | Description |
---|---|---|
429 | INTERNAL_SERVICE_RATE_LIMIT | リクエスト制限超過。 |
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 | オーダーが存在しない。 |
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 | 外部サービスへのアクセス中にタイムアウトが発生しました。 |
Status | Code | Description |
---|---|---|
400 | INVALID_PARAMS | 受信したパラメータが無効です。 |
400 | ORDER_NOT_CANCELABLE | Revertできない支払いです。 |
404 | RESOURCE_NOT_FOUND | オーダーが見つかりません。 |
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 | オーダーが見つかりません。 |
Status | Code | Description |
---|---|---|
404 | NO_SUCH_REFUND_ORDER | 対象の返金が存在しません。 |
Status | Code | Description |
---|---|---|
400 | DUPLICATE_TOPUP_QR_REQUEST | 同一のmerchantTopUpIdを持つトップアップQRが存在します。 |
Status | Code | Description |
---|---|---|
404 | TOPUP_DETAILS_NOT_FOUND | merchantTopUpIdが無効です。 |
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)が無効です。 |
Status | Code | Description |
---|---|---|
400 | CANCELED_USER | 対象のユーザーが存在しません。 |
401 | INVALID_USER_AUTHORIZATION_ID | 指定したuserAuthorizationId(PayPayのユーザー認可ID)が無効です。 |
Status | Code | Description |
---|---|---|
401 | INVALID_USER_AUTHORIZATION_ID | 指定したuserAuthorizationId(PayPayのユーザー認可ID)が無効です。 |
Status | Code | Description |
---|---|---|
400 | CANCELED_USER | 対象のユーザーが存在しません。 |
Status | Code | Description |
---|---|---|
400 | VALIDATION_FAILED_EXCEPTION | 誤った入力データです。 |
500 | UNAUTHORIZED_ACCESS | 不正アクセスです。 |
この状況に対処する方法は2つあります。
OPAに関するその他のFAQについては こちら をご覧ください。
ユーザー認可のステータス変更に伴い、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" |
Refund a payment
ユーザーの状態 | ||
ユーザー退会 | ユーザー認可の有効期限切れ | アプリ操作での認可解除 |
---|---|---|
http status:400 Code="CANCELED_USER" |
http status:200 Code="SUCCESS" |
http status:200 Code="SUCCESS" |
ユーザーが利用可能な支払い方法(PayPay残高、PayPay(クレジット)、クレジットカード)を指定して決済リクエストを作成し、 決済金額をブロックするための支払いAuthorization(オーソリ、信用照会)を作成します。
タイムアウト: 30秒
agreeSimilarTransaction | string (オプション)パラメータが「true」に設定されている場合、決済重複チェックはバイパスされます。 |
Payment
merchantPaymentId required | string (MerchantPaymentId) <= 64 characters 加盟店発番のトランザクション毎に一意に特定できるトランザクションID |
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 (StoreId) <= 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) <= 64 characters 以下の値を設定可能です:
加盟店はこのフィールドを使用して決済トランザクションで使用する支払い方法を指定します。
指定しなかった場合、決済処理の手順はPayPay側で以下のように決定されます。
|
paymentMethodId | string (PaymentMethodId) <= 64 characters paymentMethodTypeで指示した支払いを指定するために、paymentMethodIdはpaymentMethodTypeと共に使用します。
(特に、同一のpaymentMethodTypeで複数の支払い方法をユーザーが持つ可能性がある paymentMethodTypeに
paymentMethodIdは、最大約20桁の数値を表す文字列として考えることができます。 |
productType | string (PreauthProductType) Enum: "DONATION" "POINT" "TICKET" PayPayシステムのプロダクトタイプ。通常、このパラメータはオプションです。 一部の加盟店は、特定のプロダクトタイプのみの使用に制限されているため、プロダクトタイプを適切に設定する必要があります。 |
onetimeUseCashback | string (OnetimeUseCashbackForCreatePayment) Enum: "ENABLED" "DISABLED" NOTE: このパラメータを利用するためには この決済トランザクションに限りユーザーのPayPayポイントを利用するかどうかを指定します。
例えば このパラメータが指定されていない場合はユーザーのPayPayポイント利用設定に従って決済を試みます。 |
{- "merchantPaymentId": "string",
- "userAuthorizationId": "string",
- "amount": {
- "amount": 0,
- "currency": "JPY"
}, - "requestedAt": 1704112496,
- "expiresAt": 0,
- "storeId": "string",
- "terminalId": "string",
- "orderReceiptNumber": "string",
- "orderDescription": "string",
- "orderItems": [
- {
- "name": "string",
- "category": "string",
- "quantity": 1,
- "productId": "string",
- "unitPrice": {
- "amount": 0,
- "currency": "JPY"
}
}
], - "metadata": { },
- "paymentMethodType": "string",
- "paymentMethodId": "string",
- "productType": "DONATION",
- "onetimeUseCashback": "ENABLED"
}
{- "resultInfo": {
- "code": "string",
- "message": "string",
- "codeId": "string"
}, - "data": {
- "paymentId": "string",
- "status": "CREATED",
- "acceptedAt": 0,
- "refunds": {
- "data": [
- {
- "status": "CREATED",
- "acceptedAt": 0,
- "merchantRefundId": "string",
- "paymentId": "string",
- "amount": {
- "amount": 0,
- "currency": "JPY"
}, - "requestedAt": 1704112496,
- "reason": "string"
}
]
}, - "captures": {
- "data": [
- {
- "acceptedAt": 0,
- "merchantCaptureId": "string",
- "amount": {
- "amount": 0,
- "currency": "JPY"
}, - "orderDescription": "string",
- "requestedAt": 1704112496,
- "expiresAt": 0,
- "status": "string"
}
]
}, - "revert": {
- "acceptedAt": 0,
- "merchantRevertId": "string",
- "requestedAt": 1704112496,
- "reason": "string"
}, - "merchantPaymentId": "string",
- "userAuthorizationId": "string",
- "amount": {
- "amount": 0,
- "currency": "JPY"
}, - "requestedAt": 1704112496,
- "expiresAt": 0,
- "storeId": "string",
- "terminalId": "string",
- "orderReceiptNumber": "string",
- "orderDescription": "string",
- "orderItems": [
- {
- "name": "string",
- "category": "string",
- "quantity": 1,
- "productId": "string",
- "unitPrice": {
- "amount": 0,
- "currency": "JPY"
}
}
], - "metadata": { },
- "paymentMethods": [
- {
- "amount": {
- "amount": 0,
- "currency": "JPY"
}, - "type": "WALLET",
- "breakdown": {
- "points": [
- {
- "amount": 0,
- "type": "REGULAR"
}
]
}
}
]
}
}
決済の詳細を取得します。
Timeout: 15s
merchantPaymentId required | string (MerchantPaymentIdSimple) <= 64 characters 加盟店発番のトランザクション毎に一意に特定できるトランザクションID |
{- "resultInfo": {
- "code": "string",
- "message": "string",
- "codeId": "string"
}, - "data": {
- "paymentId": "string",
- "status": "CREATED",
- "acceptedAt": 0,
- "refunds": {
- "data": [
- {
- "status": "CREATED",
- "acceptedAt": 0,
- "merchantRefundId": "string",
- "paymentId": "string",
- "amount": {
- "amount": 0,
- "currency": "JPY"
}, - "requestedAt": 1704112496,
- "reason": "string"
}
]
}, - "captures": {
- "data": [
- {
- "acceptedAt": 0,
- "merchantCaptureId": "string",
- "amount": {
- "amount": 0,
- "currency": "JPY"
}, - "orderDescription": "string",
- "requestedAt": 1704112496,
- "expiresAt": 0,
- "status": "USER_REQUESTED"
}
]
}, - "revert": {
- "acceptedAt": 0,
- "merchantRevertId": "string",
- "requestedAt": 1704112496,
- "reason": "string"
}, - "merchantPaymentId": "string",
- "amount": {
- "amount": 0,
- "currency": "JPY"
}, - "requestedAt": 1704112496,
- "expiresAt": 0,
- "canceledAt": 0,
- "storeId": "string",
- "terminalId": "string",
- "orderReceiptNumber": "string",
- "orderDescription": "string",
- "orderItems": [
- {
- "name": "string",
- "category": "string",
- "quantity": 1,
- "productId": "string",
- "unitPrice": {
- "amount": 0,
- "currency": "JPY"
}
}
], - "metadata": { },
- "userAuthorizationId": "string",
- "paymentMethods": [
- {
- "amount": {
- "amount": 0,
- "currency": "JPY"
}, - "type": "WALLET",
- "breakdown": {
- "points": [
- {
- "amount": 0,
- "type": "REGULAR"
}
]
}
}
]
}
}
このAPIは、支払いのリクエスト中にクライアントが支払いのステータスを判断できない場合に使用します。 例えば、タイムアウトの状態になった場合や、レスポンスに支払いステータスが含まれていない場合などです。
このAPIを呼び出すことで、支払金額がユーザーのアカウントに戻ることを保証します。
Note: キャンセルはデフォルトで決済が発生した翌日の00:14:59 AMまで使用することができます。 翌日の00:15 AM以降の払い戻しはRefund a payment(返金)を使用してください。
orderTypeがREMITTANCEの場合はPayPayがリクエストを受け付けてから25分以内にキャンセルを行うことができます。
またorderTypeがREMITTANCEの場合はRefund a payment(返金)はご利用いただけません。
出荷売上の場合は、ステータスがAUTHORIZED
の場合に使用可能です。
支払いが完了してステータスがCOMPLETED
になるか、期限を過ぎてEXPIRED
になると、使用できません。
Timeout: 15s
merchantPaymentId required | string (MerchantPaymentIdSimple) <= 64 characters 加盟店発番のトランザクション毎に一意に特定できるトランザクションID |
{- "resultInfo": {
- "code": "string",
- "message": "string",
- "codeId": "string"
}, - "data": { }
}
事前にユーザーの残高からブロックしていた決済金額をキャプチャ(決済)します。 増額キャプチャの場合、ユーザーに承諾を求める通知を送信します。
Timeout: 30s
merchantPaymentId required | string (MerchantPaymentIdSimple) <= 64 characters 加盟店発番のトランザクション毎に一意に特定できるトランザクションID |
required | object (MoneyAmount) |
merchantCaptureId required | string (MerchantCaptureId-2) <= 64 characters 加盟店発番のトランザクション毎にCaptureを一意に特定できるトランザクションID |
requestedAt required | integer (EpochTime) エポックタイムスタンプ(秒単位) |
orderDescription required | string <= 255 characters キャプチャの説明 |
{- "merchantPaymentId": "string",
- "amount": {
- "amount": 0,
- "currency": "JPY"
}, - "merchantCaptureId": "string",
- "requestedAt": 1704112496,
- "orderDescription": "string"
}
{- "resultInfo": {
- "code": "string",
- "message": "string",
- "codeId": "string"
}, - "data": {
- "paymentId": "string",
- "status": "COMPLETED",
- "acceptedAt": 1704112496,
- "refunds": {
- "data": [
- {
- "status": "CREATED",
- "acceptedAt": 0,
- "merchantRefundId": "string",
- "paymentId": "string",
- "amount": {
- "amount": 0,
- "currency": "JPY"
}, - "requestedAt": 1704112496,
- "reason": "string"
}
]
}, - "captures": {
- "data": [
- {
- "acceptedAt": 0,
- "merchantCaptureId": "string",
- "amount": {
- "amount": 0,
- "currency": "JPY"
}, - "orderDescription": "string",
- "requestedAt": 1704112496,
- "status": "COMPLETED"
}
]
}, - "merchantPaymentId": "string",
- "userAuthorizationId": "string",
- "amount": {
- "amount": 0,
- "currency": "JPY"
}, - "requestedAt": 1704112496,
- "expiresAt": 0,
- "storeId": "string",
- "terminalId": "string",
- "orderReceiptNumber": "string",
- "orderDescription": "string",
- "orderItems": [
- {
- "name": "string",
- "category": "string",
- "quantity": 1,
- "productId": "string",
- "unitPrice": {
- "amount": 0,
- "currency": "JPY"
}
}
], - "metadata": { },
- "assumeMerchant": "string",
- "paymentMethods": [
- {
- "amount": {
- "amount": 0,
- "currency": "JPY"
}, - "type": "WALLET",
- "breakdown": {
- "points": [
- {
- "amount": 0,
- "type": "REGULAR"
}
]
}
}
]
}
}
このAPIは、ユーザーの残高から決済金額をブロックしている状態をキャンセルする場合に使用します。 例えば、注文のキャンセルが発生した場合等。
Timeout: 30s
Revert Authorized Order Request
merchantRevertId required | string (MerchantRevertId) <= 64 characters 加盟店発番のトランザクション毎にRevertを一意に特定できるトランザクションID |
paymentId required | string (PaymentId-2) <= 64 characters PayPay発番の決済取引ID |
requestedAt required | integer (EpochTime) エポックタイムスタンプ(秒単位) |
reason | string (Reason-2) <= 255 characters オプション |
{- "merchantRevertId": "string",
- "paymentId": "string",
- "requestedAt": 1704112496,
- "reason": "string"
}
{- "resultInfo": {
- "code": "string",
- "message": "string",
- "codeId": "string"
}, - "data": {
- "status": "CANCELED",
- "acceptedAt": 1704112496,
- "paymentId": "string",
- "requestedAt": 1704112496,
- "reason": "string"
}
}
ユーザーへ返金します。
返金の受付のみを行い、PayPay側の非同期処理にて返金を実施しています。
返金の結果については、Get refund detailsにてご確認下さい。
タイムアウト: 30秒
返金
merchantRefundId required | string (MerchantRefundId) <= 64 characters 加盟店発番のトランザクション毎に返金を一意に特定できるトランザクションID |
paymentId required | string (PaymentId-2) <= 64 characters PayPay発番の決済取引ID |
required | object (MoneyAmount) |
requestedAt required | integer (EpochTime) エポックタイムスタンプ(秒単位) |
reason | string (Reason-2) <= 255 characters オプション |
{- "merchantRefundId": "string",
- "paymentId": "string",
- "amount": {
- "amount": 0,
- "currency": "JPY"
}, - "requestedAt": 1704112496,
- "reason": "string"
}
{- "resultInfo": {
- "code": "string",
- "message": "string",
- "codeId": "string"
}, - "data": {
- "status": "CREATED",
- "acceptedAt": 0,
- "merchantRefundId": "string",
- "paymentId": "string",
- "amount": {
- "amount": 0,
- "currency": "JPY"
}, - "requestedAt": 1704112496,
- "reason": "string"
}
}
GET Refund Details APIの任意のリクエストクエリパラメータ paymentId
: POST Refund APIにおいて、同じ merchantRefundId
を複数の異なる paymentId
に使う場合のみに渡す必要があります。
複数の異なる paymentId
(異なる決済トランザクションのID)に同じ merchantRefundId
を使う場合、PayPayでは1つの merchantRefundId
に対して複数の返金データが紐付けられます。
PayPayは merchantId
と merchantRefundId
と paymentId
を返金トランザクションの詳細を特定するための固有なキー(idempotency-key)であるものとしています。
1つの merchantRefundId
に複数の paymentId
が紐付けられる場合、merchantRefundId
に加えて paymentId
をリクエストパラメータに追加することにより固有の返金トランザクションが返されます。本ケースで paymentId
を追加しない場合、最新の返金トランザクションが返されます。
Timeout: 15s
merchantRefundId required | string (MerchantRefundIdSimple) <= 64 characters 加盟店発番のトランザクション毎に返金を一意に特定できるトランザクションID |
paymentId | string (PaymentId-2) <= 64 characters PayPay発番の決済取引ID |
{- "resultInfo": {
- "code": "string",
- "message": "string",
- "codeId": "string"
}, - "data": {
- "status": "CREATED",
- "acceptedAt": 0,
- "merchantRefundId": "string",
- "paymentId": "string",
- "amount": {
- "amount": 0,
- "currency": "JPY"
}, - "requestedAt": 1704112496,
- "reason": "string"
}
}
タイムアウト: 15秒
リクエスト・パラメータ
requestId required | string <= 64 characters 加盟店による予定のキャッシュバックリクエストを識別するための一意のID |
merchantPaymentId | string <= 64 characters 加盟店発番のユニークな決済取引ID。
Create Payment API と同じ |
userAuthorizationId required | string (UserAuthorizationId-2) <= 64 characters ユーザー認可フローによって返却されたPayPayユーザー認可ID |
merchantId | string PayPayで採番された加盟店識別子 |
storeId | string (StoreId) <= 255 characters 加盟店に紐付く店舗ID |
requestedAt | integer <int64> UNIXタイムスタンプ |
Array of objects (MerchantOrderItem-2) この項目か | |
object (MoneyAmount) | |
productType | string (ProductTypeWithPoint) Enum: "VIRTUAL_BONUS_INVESTMENT" "PAY_LATER_REPAYMENT" "REAL_INVESTMENT" "POINT" PayPayシステムのプロダクトタイプ。通常、このパラメータはオプションです。 一部の加盟店は、特定のプロダクトタイプのみの使用に制限されているため、プロダクトタイプを適切に設定する必要があります。 |
{- "requestId": "string",
- "merchantPaymentId": "string",
- "userAuthorizationId": "string",
- "merchantId": "string",
- "storeId": "string",
- "requestedAt": 1234567890,
- "orderItems": [
- {
- "name": "string",
- "category": "string",
- "quantity": 1,
- "productId": "string",
- "unitPrice": {
- "amount": 0,
- "currency": "JPY"
}
}
], - "amount": {
- "amount": 0,
- "currency": "JPY"
}, - "productType": "VIRTUAL_BONUS_INVESTMENT"
}
{- "resultInfo": {
- "code": "string",
- "message": "string",
- "codeId": "string"
}, - "data": [
- {
- "paymentMethodType": "WALLET",
- "campaignMessage": "100円相当戻ってくる!",
- "normalCashbackAmount": 100,
- "normalCashbackPercentage": "15",
- "lotteryCashbackPercentage": "5.5"
}, - {
- "paymentMethodType": "PAY_LATER_CC",
- "campaignMessage": "100円相当戻ってくる!",
- "normalCashbackAmount": 100,
- "normalCashbackPercentage": "15",
- "lotteryCashbackPercentage": "5.5"
}
]
}
決済トランザクションの中で、支払いの前にユーザーが利用可能な支払い方法を取得できます。
このAPIはユーザーが利用可能なPaymentMethodTypeとPaymentMethodIdを返します。支払い方法にはPayPay(クレジット)(PayPay(クレジット)についてはこちら)、またはクレジットカードが含まれます。ウォレットは決済APIでPaymentMethodIdを指定する必要がないため、このAPIでは返しません。
このAPIは、アカウントリンク時にget_balance
スコープによって残高情報を見る権限がユーザーに付与されているときに限って、walletInfo
を返します。
ユーザーが複数のPayPayカードをPayPayアプリに登録している場合(paymentMethodType
がPAY_LATER_CC
のもの)、このAPIは登録されたPayPayカードをそのグレードの高い順・登録日の早い順に全て返却します。
タイムアウト: 30秒
userAuthorizationId required | string (UserAuthorizationId-2) <= 64 characters ユーザー認可フローによって返却されたPayPayユーザー認可ID |
productType | string (ProductTypeForPaymentMethodsMixin) Enum: "VIRTUAL_BONUS_INVESTMENT" "PAY_LATER_REPAYMENT" "REAL_INVESTMENT" PayPayシステムのプロダクトタイプ。 特定のマーチャント以外はこのパラメータはオプションです。 特定のプロダクトタイプのみを使用するよう制限されている一部のマーチャントの場合、プロダクトタイプを適切に設定する必要があります。 |
{- "resultInfo": {
- "code": "string",
- "message": "string",
- "codeId": "string"
}, - "data": {
- "walletInfo": {
- "userAuthorizationId": "string",
- "totalBalance": {
- "amount": 0,
- "currency": "JPY"
}
}, - "paymentMethods": [
- {
- "paymentMethodType": "CREDIT_CARD",
- "id": "string",
- "issuerName": "string",
- "accountNo": "string",
- "logoUrl": "string",
- "disabled": true,
- "underMaintenance": true,
- "authenticated": true,
- "limited": true,
- "paymentMethodStatus": "string",
- "membership": "PRIMARY",
- "creditCardRank": "GOLD",
- "brand": "V",
- "cardIconUrl": "string",
- "cardBrandUrl": "string",
- "cardName": "string"
}
]
}
}
ユーザーが支払いをするための十分な残高があるかを確認します。
タイムアウト: 15秒
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" Example: onetimeUseCashback=ENABLED NOTE: このパラメータを利用するためには 照会する残高にユーザーのPayPayポイントを含めるか否かを指定します。
例えば このパラメータが指定されていない場合はユーザーのPayPayポイント利用設定に従って計算します。 |
{- "resultInfo": {
- "code": "string",
- "message": "string",
- "codeId": "string"
}, - "data": {
- "hasEnoughBalance": true
}
}
ユーザーの残高を参照します。残高参照については、別途PayPay側に申請が必要となります。
Timeout: 15s
userAuthorizationId required | string (UserAuthorizationId-2) <= 64 characters ユーザー認可フローによって返却されたPayPayユーザー認可ID |
currency required | string Value: "JPY" |
productType | string Enum: "VIRTUAL_BONUS_INVESTMENT" "PAY_LATER_REPAYMENT" "REAL_INVESTMENT" "POINT" PayPayシステムのプロダクトタイプ。
特定の加盟店以外はこのパラメータはオプションです。
特定のプロダクトタイプのみを使用するよう制限されている一部の加盟店の場合、プロダクトタイプを適切に設定する必要があります。
|
onetimeUseCashback | string Enum: "ENABLED" "DISABLED" Example: onetimeUseCashback=ENABLED NOTE: このパラメータを利用するためには 照会する残高にユーザーのPayPayポイントを含めるか否かを指定します。
例えば このパラメータが指定されていない場合はユーザーのPayPayポイント利用設定に従って計算します。 |
{- "resultInfo": {
- "code": "string",
- "message": "string",
- "codeId": "string"
}, - "data": {
- "userAuthorizationId": "string",
- "totalBalance": {
- "amount": 0,
- "currency": "JPY"
}, - "balanceDetails": [
- {
- "account": "CASHBACK",
- "balance": {
- "amount": 0,
- "currency": "JPY"
}, - "usable": true
}
], - "preference": {
- "useCashback": false,
- "cashbackAutoInvestment": false
}
}
}
このAPIは、トップアップ用のQRコードを作成します。 ユーザーはこのQRコードをスキャンし、PayPay残高にトップアップすることができます。
Timeout: 30s
QRCode
merchantTopUpId required | string (MerchantTopUpId) <= 64 characters 加盟店発番の一意のトップアップ取引ID |
userAuthorizationId required | string (UserAuthorizationId-2) <= 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 (RedirectTypeTopUp) Enum: "WEB_LINK" "APP_DEEP_LINK" トップアップ後のリダイレクト種別 |
redirectUrl | string トップアップ後に遷移するページ・AppのURL |
userAgent | string (UserAgentQrCode) このパラメータを利用する際は、redirectTypeを WEBブラウザのUser agentを設定してください。このパラメーターを設定すると、PayPayアプリが起動し決済完了した後に起動するWEBブラウザを指定することが可能です。 この値は、javascriptのfunction navigator.userAgentを活用することで取得することができます。 このパラメータは、以下のWEBブラウザーをサポートします。(以下のWEBブラウザ以外が設定されると、ユーザのデフォルトブラウザがトランザクション後に起動されます。) ただし、シークレットモードやプライベートブラウズの場合、正しくリダイレクトできません。
また、このパラメータを指定しない場合にもユーザのデフォルトブラウザがトランザクション後に起動されます。 |
{- "merchantTopUpId": "string",
- "userAuthorizationId": "string",
- "minimumTopUpAmount": {
- "amount": 100,
- "currency": "JPY"
}, - "metadata": { },
- "codeType": "TOPUP_QR",
- "requestedAt": 1704112496,
- "redirectType": "WEB_LINK",
- "redirectUrl": "string",
- "userAgent": "string"
}
{- "resultInfo": {
- "code": "string",
- "message": "string",
- "codeId": "string"
}, - "data": {
- "codeId": "string",
- "url": "string",
- "status": "string",
- "merchantTopUpId": "string",
- "userAuthorizationId": "string",
- "minimumTopUpAmount": {
- "amount": 100,
- "currency": "JPY"
}, - "metadata": { },
- "expiryDate": 0,
- "codeType": "TOPUP_QR",
- "requestedAt": 1704112496,
- "redirectType": "WEB_LINK",
- "redirectUrl": "string",
- "userAgent": "string"
}
}
QRコードで実施したトップアップの詳細を取得します。
Timeout: 30s
merchantTopUpId | string (MerchantTopUpId) <= 64 characters 加盟店発番の一意のトップアップ取引ID |
{- "resultInfo": {
- "code": "string",
- "message": "string",
- "codeId": "string"
}, - "data": {
- "topUpId": "string",
- "merchantTopUpId": "string",
- "userAuthorizationId": "string",
- "requestedAt": 1704112496,
- "acceptedAt": 1704112496,
- "expiryDate": 0,
- "status": "CREATED",
- "metadata": { }
}
}
クライアントからユーザーのリンクを解除します。
タイムアウト: 15秒
userAuthorizationId required | string (UserAuthorizationId-2) <= 64 characters ユーザー認可フローによって返却されたPayPayユーザー認可ID |
{- "resultInfo": {
- "code": "string",
- "message": "string",
- "codeId": "string"
}, - "data": { }
}
ユーザー認可状態を取得します。
タイムアウト: 15秒
userAuthorizationId required | string (UserAuthorizationId) <= 64 characters ユーザー認可フローによって返却されたPayPayユーザー認可ID |
{- "resultInfo": {
- "code": "string",
- "message": "string",
- "codeId": "string"
}, - "data": {
- "userAuthorizationId": "string",
- "referenceIds": [
- "string"
], - "status": "ACTIVE",
- "scopes": [
- "preauth_capture_native"
], - "expireAt": 0,
- "issuedAt": 0
}
}
マスクされたユーザーの電話番号を取得します。
userAuthorizationId required | string (UserAuthorizationId-2) <= 64 characters ユーザー認可フローによって返却されたPayPayユーザー認可ID |
{- "resultInfo": {
- "code": "string",
- "message": "string",
- "codeId": "string"
}, - "data": {
- "phoneNumber": "*******1234"
}
}
当月または次月に関する、PayPaySTEPを考慮した決済時PayPayポイント付与率に関する情報を取得します。
このAPIを利用するためにはcashback
スコープが必要かつユーザーの同意も必要です。
Timeout: 10s
userAuthorizationId required | string (UserAuthorizationId-2) <= 64 characters ユーザー認可フローによって返却されたPayPayユーザー認可ID |
period required | string Enum: "current_month" "next_month" "current_month,next_month" レスポンスに含めたい期間(複数の場合カンマ区切り) |
{- "resultInfo": {
- "code": "string",
- "message": "string",
- "codeId": "string"
}, - "data": {
- "currentMonth": {
- "period": "2021-03",
- "campaigns": [
- {
- "name": "pay_with_paypay",
- "eligibleRate": 0.1,
- "eligibleGoldRate": 0.1,
- "maxRate": 0,
- "suggestionType": "apply_pay_later",
- "condition": {
- "campaignBase": {
- "rate": 0.1,
- "fulfilled": true
}, - "goldCard": {
- "rate": 0.1,
- "fulfilled": true
}, - "eligibleTransaction": {
- "rate": 0.1,
- "fulfilled": true,
- "singleTransactionAmountThreshold": 0,
- "eligibleTransactionCount": 0,
- "eligibleTransactionAmount": 0,
- "transactionCountThreshold": 0,
- "transactionAmountThreshold": 0
}
}
}
]
}
}
}
ユーザーが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 | 無し |
PayPayは、アカウントでイベントが発生したときにアプリケーションに通知するWebhookを送信します。
通知を受信するためには、POSTメソッドを使用してクライアントにデータを送信するWebhook URLを設定する必要があります。
すべての通知データには、どのイベントが発生したかを判断するためにクライアントサービスで使用できるnotification_type
フィールドがあります。
Webhook処理が正常に終了した場合、200 OK
のHTTPステータスコードを返してください。
レスポンスボディは必須ではないですが、"OK"など、簡単な文字列を返していただくことを推奨します。
セキュリティ上の問題から、通知受信において、クライアントによるPayPay IPアドレスのホワイトリスト登録を強く推奨します。
現在Webhookに送信されている通知について、以下もご一読ください。
この通知は、クライアントがユーザーの認可を正常に取得した場合に送信されます
{
"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
}
この通知は、クライアントがユーザーの認可の取得に失敗した場合に送信されます。
{
"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
(不正な要求)のいずれかになります。
この通知は、ユーザーがPayPayアプリから、認可を取り消した場合に送信されます。
{
"notification_type": "customer.authroization.revoked",
"notification_id": "evt_aXnbdeFt2Ke",
"createdAt": "1349654313",
"userAuthorizationId": "xxxxx",
"referenceId": "yyyy"
}
この通知は、ユーザー認可の期限がPayPayによって延長された場合に送信されます。
支払いの実施/認可の取得をした場合にユーザー認可の期限を延長します。 これにより、ユーザー操作による認可の取得を減らすことができるため、ユーザーへの負担を減らすことができます。
{
"notification_type": "customer.authroization.extended",
"notification_id": "evt_aXnbdeFt2Ke",
"createdAt": "1349654313",
"scopes": "preauth_capture_native",
"userAuthorizationId": "xxxxx",
"expiry": 1234567 // 秒単位の認証ID有効期限エポックタイムスタンプ
}
この通知は、ユーザーが退会した時に送信されます。
サンプル・イベント:
{
"notification_type": "customer.authroization.canceled",
"notification_id": "evt_aXnbdeFt2Ke",
"createdAt": "1349654313",
"userAuthorizationId": "xxxxx"
}
この通知は、オーダーステータスが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に変わった際に送信されます。
{
"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に変わった際に送信されます。
{
"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"
}
この通知は、ユーザーへの増額の承認要求が期限切れとなった際に送信されます。 増額の承認要求は、リクエストから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"
}
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で管理している取引データのステータス |
acceptedAt | 下の別表に記載 | |
amount | amount | 絶対値表記のみ |
orderReceiptNumber | "orderReceiptNumber" | リクエスト時にセットされたorderReceiptNumber |
methodOfPayment | "wallet", "pay_later_cc", "point" | カンマ区切りの支払い方法。 |
merchantPaymentId | 下の別表に記載 | 加盟店で採番された決済番号 |
paymentDetails | [{"paymentMethod":"POINT", "amount":80}, {"paymentMethod":"WALLET", "amount":400}] | 支払い方法ごとの支払い金額です。 transactionStatusがCOMPLETEDとREFUNDEDの場合のみ提供されます。 |
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 |
Webhookで通知されたpath
からファイルを取得してください。
{
"notification_type":"file.created",
"notification_id": "<UUID>",
"fileType":"transaction_recon",
"path":"https://<server_path>/<filename>?parameters",
"requestedAt":"<epoch time>"
}
最新の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.type にPOINT を追加しました。 |
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を設定する必要はありません。 |
2024.05.13 | 2024.08.05 | Feature | Create a payment | 複数支払い方法指定のスキーマを追加しました。 |
2024.05.27 | Released | Documentation Fix | Create a Code | userAgentの説明を変更しました。 |
2024.06.14 | TBD | Feature | Get payment details | data.paymentMethods.typeにHIVEXを返却し得る値として追加しました。 |
2024.08.19 | 2024.08.19 | Feature | Cancel a payment. Error Handling | OrderTypeがREMITTANCEの場合のCancel a paymentの受付時間について説明を追加しました。 |
2024.09.05 | 2024.09.05 | Feature | Recon file | 取引明細ファイル(突合ファイル)に paymentDetails が記載される条件を追加しました。 |
2024.09.05 | TBD | Feature | Create a payment authorization, Get payment details, Capture a payment authorization | レスポンスの paymentMethods 以下にフィールド breakdown を追加しました。 |
2024.09.05 | TBD | Feature | Recon file | breakdown を paymentDetails に追加しました。 |