ネイティブペイメント (1.1)

はじめに

PayPay オープン決済API(OPA)は、PayPayの決済パートナーが、エンドユーザーに対して快適な決済体験を提供できるよう、 様々なシナリオでの決済関連の操作が設計されています。

PayPay OPAクライアントとして登録されている場合、決済パートナーは下記の機能が使用可能になります。

  • PayPayユーザーのウォレットから直接支払い金額を引き落とし、決済を回収する
  • スムーズな決済を行うために事前認可を使用して、決済フローを取得する
  • 決済を回収するためのPayPayキャッシャーページとWebアプリケーションの統合
  • PayPay OPAが提供する豊富なAPIを使用して、精算のエクスペリエンスの構築

本書では、PayPay決済パートナー向けに設計したAPIに焦点を当てます。

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には"direct_debit"を指定して下さい。Get user wallet balanceを使用する場合のみ、"direct_debit,get_balance"を指定して下さい。

OPA API Authorization

OPA API認証に関わることは全て API認証のページ にあります。

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

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

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

?assumeMerchant={MerchantId}

HTTPヘッダにセットする:

X-ASSUME-MERCHANT: {MerchantId}

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

エラー処理

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

レスポンスコード一覧

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

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

Create a payment

Status Code Description
400 SUSPECTED_DUPLICATE_PAYMENT 短期間に同様のトランザクションが存在します。
400 UNACCEPTABLE_OP リクエストされた操作は現状では処理できません。例: 不審なユーザー
400 LIMIT_EXCEEDED 支払い上限額を超えています。
400 USER_DEFINED_DAILY_LIMIT_EXCEEDED ユーザ設定の支払い上限額(24時間)を超えています。
400 USER_DEFINED_MONTHLY_LIMIT_EXCEEDED ユーザ設定の支払い上限額(30日)を超えています。
400 NO_SUFFICIENT_FUND ユーザーの残高が不足しているため決済ができません。
400 CANCELED_USER 対象のユーザーが存在しません。
400 USER_DAILY_LIMIT_FOR_MERCHANT_EXCEEDED 支払い金額が加盟店制限を超過しています。
401 USER_STATE_IS_NOT_ACTIVE ユーザーのステータスが非アクティブなので、 リクエストを受け入れることができません。
404 RESOURCE_NOT_FOUND オーダーが見つかりません。
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を変更してリトライしてください。

Get payment details

Status Code Description
404 RESOURCE_NOT_FOUND オーダーが見つかりません。

Cancel a payment

Status Code Description
400 ORDER_NOT_REVERSIBLE 以下の場合にこのコードを返します。
対象オーダーのステータスがREFUNDED, CANCELED の場合または決済翌日00:15を過ぎた場合。

Refund a payment

Status Code Description
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 そのqrCodeIdに対するトップアップは完了しています。
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 不正アクセスです。

Get payment methods

Status Code Description
400 NO_VALID_PAYMENT_METHOD User does not have any payment methods.

タイムアウト

推奨タイムアウト値は各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、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"

決済

決済・取消に関して

Create a payment

ユーザーが利用可能な支払い方法(PayPay残高、PayPay(クレジット)、クレジットカード)を指定して決済リクエストを作成し、送金を開始します。

Timeout: 30s

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)

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

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 (ProductType)
Enum: "VIRTUAL_BONUS_INVESTMENT" "PAY_LATER_REPAYMENT" "REAL_INVESTMENT" "POINT"

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,
  • "storeId": "string",
  • "terminalId": "string",
  • "orderReceiptNumber": "string",
  • "orderDescription": "string",
  • "orderItems": [
    ],
  • "metadata": { },
  • "paymentMethodType": "string",
  • "paymentMethodId": "string",
  • "productType": "VIRTUAL_BONUS_INVESTMENT",
  • "onetimeUseCashback": "ENABLED"
}

Response samples

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

Get payment details

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

Timeout: 15s

path Parameters
merchantPaymentId
required
string (MerchantPaymentIdSimple) <= 64 characters

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

Responses

Response samples

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

Cancel a payment

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

このAPIを呼び出すことで、最終的に支払い金額がユーザーのアカウントに戻ることを保証します。 注意: このAPIは asynchronous API なので、キャンセル処理にはラグが発生することがあります。


Note: キャンセルは決済が発生した翌日の00:14:59 AMまで使用することができます。
翌日の00:15 AM以降の払い戻しはRefund a payment(返金)を使用してください。

Timeout: 15s

path Parameters
merchantPaymentId
required
string (MerchantPaymentIdSimple) <= 64 characters

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

Responses

Response samples

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

Refund a payment

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

Timeout: 30s

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 <= 255 characters

オプション

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" "POINT"

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

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

Timeout: 15s

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

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

amount
required
integer <= 255 characters
currency
required
string
Value: "JPY"
productType
string (ProductType)
Enum: "VIRTUAL_BONUS_INVESTMENT" "PAY_LATER_REPAYMENT" "REAL_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": {
    }
}

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": {
    },
  • "data": { }
}

ユーザー

ユーザー管理に関して

Unlink user

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

Timeout: 15s

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

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

Responses

Response samples

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

Get user authorization status

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

Timeout: 15s

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アプリからの通知を許可している場合、以下の内容の通知がユーザーへ配信されます。

Push通知

イベント カテゴリ メッセージ(例)
Create a payment:API(成功) Push通知 決済が完了しました。
金額:100円
決済番号:xxxxxxxxxxxxxxxxxxxx
店舗名:テスト加盟店
Refund a payment:API Push通知 決済番号: xxxxxxxxxxxxxxxxxxxx
100円の返金が完了しました。
Create a payment:API(失敗) Push通知 決済が失敗しました。
金額:1000円
決済番号:xxxxxxxxxxxxxxxxxxxx
店舗名:テスト加盟店
Create a payment:API(残高不足) アプリ内通知 決済が失敗しました。
金額:1000円
決済番号:xxxxxxxxxxxxxxxxxxxx
店舗名:テスト加盟店

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

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

実施処理 実施前 実施後
Create a payment:API - COMPLETED
Create a payment:API - FAILED
Refund a payment:API COMPLETED REFUNDED
Cancel a payment:API COMPLETED FAILED

Webhookの設定

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

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

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

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

カスタマーイベント

ユーザー状態の変化に関連するイベントです。 authroization の部分は文字通りです。

項目 必ず含まれているか 説明
notification_type string yes 通知の種別。取りうる値は次の通り: customer.authroization.succeeded, customer.authroization.failed, customer.authroization.revoked, customer.authroization.extended, customer.authroization.canceled
notification_id string yes 通知ID
createdAt number yes 通知が作成された時刻。エポックタイムスタンプ(秒単位)
referenceId string no 加盟店システムでユーザーを識別するためのID
nonce string customer.authroization.succeeded, customer.authroization.failed種別では必須 レスポンスを検証するために必要なクライアント側のリクエスト内の同一のnonce
scopes string customer.authroization.succeeded, customer.authroization.extended種別では必須 ユーザー認可のスコープ
userAuthorizationId string customer.authroization.succeeded, customer.authroization.revoked, customer.authroization.canceled, customer.authroization.extended種別では必須 APIの呼び出しの際に使用するPayPayユーザー参照ID。最大長64文字
profileIdentifier string customer.authroization.succeeded種別では必須 マスクされた電話番号またはメール(例:*******5678abc*******@example.com
expiry number customer.authroization.extended, customer.authroization.succeeded種別では必須 userAuthorizationIdの有効期限。エポックタイムスタンプ(秒単位)
result string customer.authroization.failed種別では必須 実行結果。取りうる値は次の通り: declined, bad_request, kyc_not_completed, kyc_data_mismatch
reason string customer.authroization.failed種別では必須 実行結果に対する原因

通知の種別ごとの例は以下の通りです。

customer.authroization.succeeded

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

{
  "notification_type": "customer.authroization.succeeded",
  "notification_id": "evt_aXnbdeFt2Ke",
  "createdAt": "1349654313",
  "referenceId": "yyyy",
  "nonce": "12345",
  "scopes": "direct_debit",
  "userAuthorizationId": "xxxxx",
  "profileIdentifier": "*******5678",
  "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": "direct_debit",
    "userAuthorizationId": "xxxxx",
    "expiry": 1234567  // 秒単位の認証ID有効期限エポックタイムスタンプ
}

customer.authroization.canceled

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

サンプル・イベント:

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

突合ファイル

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

突合ファイル連携仕様

Category Description Note
ファイル連携方法 Webhook
ファイル名 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

ファイルレイアウト

Key Value from Note
決済番号 order_id PayPayで採番された決済番号
加盟店ID merchant_id PayPayで採番された加盟店ID
屋号 brandName PayPayで管理しているブランド名
店舗ID storeId リクエスト時にセットされたstoreId
店舗名 storeName PayPayで管理している店舗名
端末番号/PosID terminalId リクエスト時にセットされたterminalId
取引ステータス "取引完了", "取引失敗", "返金完了", "返金失敗" PayPayで管理している取引データのステータス
取引ステータス: "取引失敗" の場合、エラー原因によっては、突合ファイルに出力されない場合があります。
突合ファイルに取引データが出力されない例は以下となります。
・ユーザーの利用限度額超過による取引失敗
・1回の決済上限額超過による取引失敗
取引日時 acceptedAt
取引金額 amount 取消の場合はマイナス記号あり
レシート番号 orderReceiptNumber レシート番号
支払い方法 "PayPay残高", "クレジットカード", "あと払い", "PayPayポイント" カンマ区切りの支払い方法。
マーチャント決済ID merchantPaymentId 加盟店で採番された決済番号
支払い詳細 [{"paymentMethod":"PayPayポイント", "amount":5}, {"paymentMethod":"PayPay残高", "amount":5}] 支払い方法ごとの支払い金額です。

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.09.07 2022.12.07 Feature Create a payment リクエストパラメータ "paymentMethodType" の説明を更新
2022.10.19 2022.10.27 Feature Create a payment 新しいエラーコードUSER_DAILY_LIMIT_FOR_MERCHANT_EXCEEDEDを追加しました。
2022.12.17 2023.01.31 Feature Create a Payment Create a PaymentとGet payment detailsエンドポイントについてacceptedAtの説明を更新
2023.01.25 Released Documentation Fix Create a topup QR Code リクエストパラメータminimumTopUpAmountの説明を更新
2023.03.10 TBD Documentation Fix Update status code description ORDER_NOT_REVERSIBLE ステータスコードの説明を更新
2023.03.30 Released Documentation Fix 突合ファイル連携仕様 通知時間の説明を修正しました。
2023.04.05 2023.04.17 Deprecation Consult Expected Cashback Info Consult Expected Cashback Info V1 APIを削除しました。
2023.04.13 Released Documentation Fix 突合ファイル 取引ステータス:"取引失敗"の場合、エラー原因によっては、突合ファイルに出力されない場合があることを追加しました。
2023.04.26 2023.06.12 Feature Create a payment, Get payment details レスポンスに paymentMethods を追加しました。
2023.04.28 2023.05.25 Feature アカウントリンクQRコードの作成 referenceIdを任意に変更しました。
2023.06.16 Released Documentation Fix Refund a payment Refund a paymentの説明を変更しました。
2023.06.26 2023.08.01 Feature Get payment methods レスポンス項目issuerNameについてPayPayあと払いからPayPay(クレジット)に変更しました。
2023.07.04 Released Documentation Fix Create a payment, Get payment details, Create topup QR code, Get topup details metadataの説明を変更しました。
2023.08.01 Released Documentation Fix Create a payment, Get payment details acceptedAtの説明を変更しました。
2023.09.01 2023.09.12 Feature Create a payment, 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, Get payment details paymentMethods.typePOINTを追加しました。
2023.11.15 2023.12.04 Feature Recon file MethodOfPayment に支払いタイプ「POINT」を追加し、新しい列「paymentDetails」を追加しました。
2023.11.28 TBD Documentation Fix Update status code description ORDER_NOT_REVERSIBLE の説明を追記しました。
2023.12.19 TBD Feature Get Refund details リクエストのクエリパラメータ paymentId を追加し、説明を更新しました。
2024.01.18 TBD Feature Get PayPaySTEP rate 新たなエンドポイントを追加しました。
2024.03.12 Released Documentation Fix Get payment details metadataは廃止であることを追加しました。
2024.04.08 TBD Feature Get payment methods PaymentMethodIdはもはや暗号化されていません。
2024.04.19 TBD Feature Create a payment paymentMethodTypeに"PAY_LATER_CC"を指定した場合は、paymentMethodIdを設定する必要はありません。