Meta Payの決済を処理する際には、Meta Pay APIでWebhooksを呼び出すことにより、認証や返金などの決済取引アクティビティをMetaに通知する必要があります。決済取引アクティビティは、顧客のFacebookアカウントの[注文と支払い]ページに表示されます。
MetaのAPIの使い方について詳しくは、Graph APIの概要をご覧ください。また、下記で説明されているAPIは、標準のGraph APIホストURL (https://graph.facebook.com
)を基準にしていることに注意してください。その他の全般情報については、Meta Pay統合の概要をご覧ください。
一般的なオンボーディングステップの一部として、Meta for Developersポータルで新しいアプリを作成します。アプリを作成すると、アプリのアプリIDとapp secretを取得できます。
Meta Pay APIの呼び出しごとに、アプリIDとapp secretから派生したアプリアクセストークンが必要になります。アプリアクセストークンは、access_token
クエリパラメーターではなくAuthorization
ヘッダーを使って送信します。Meta Pay APIは、ユーザートークンが使われている呼び出しは却下します。
例えば、次のコードを使います。
Authorization: OAuth <APP_ACCESS_TOKEN>
Meta Pay APIに対するすべてのHTTPリクエストには、FBPAY_SIGNATURE
リクエストヘッダーが含まれていなければなりません。このヘッダーの値は、ES256アルゴリズムを使ったJSON Web Signature (JWS)オブジェクトで、コンパクトシリアル化され、(https://tools.ietf.org/html/rfc7515#appendix-Fに従って)デタッチされたペイロードです。このペイロード値がHTTP POST
リクエスト本文です。JWS署名キーは、x5cヘッダーで識別されなければなりません。これは、パートナーの信頼されたルートにつながる証明書を含んでいなければなりません。パートナーのルート証明書は、オンボーディングプロセスの一環でMetaに共有されています(Meta Pay API署名証明書と呼ばれます)。
curl -i -X POST \ -H "Content-Type: application/json" \ -H "FBPAY_SIGNATURE: eyJhbGciOiJFUzI1NiIsIng1YyI6WyJNSUlCaERDQ0FTcWdBd0lCQWdJQkFUQUtCZ2dxaGtqT1BRUURBakFoTVI4d0hRWURWUVFEREJad1lYSjBibVZ5SUhOcFoyNWhkSFZ5WlNCalpYSjBNQjRYRFRJd01EY3hNekl5TWpVek1Gb1hEVEkwTURNeE1USXlNalV6TUZvd0lURWZNQjBHQTFVRUF3d1djR0Z5ZEc1bGNpQnphV2R1WVhSMWNtVWdZMlZ5ZERCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBQkFuRngwR1NKMklPZGZpcFdiMGMwZytBVThlbDh6QnRVS0kxdWRzT2kzN2thd1JRSFkzV29YaWRvRThIOHM1cVIySmo2ZkFKWVhOTURXY0NiditWMEJ1alV6QlJNQjBHQTFVZERnUVdCQlR4NlBGRkhjd2FUZnY5cVdzZUJcL1NjMWFPbVZ6QWZCZ05WSFNNRUdEQVdnQlR4NlBGRkhjd2FUZnY5cVdzZUJcL1NjMWFPbVZ6QVBCZ05WSFJNQkFmOEVCVEFEQVFIXC9NQW9HQ0NxR1NNNDlCQU1DQTBnQU1FVUNJUUNBRE9zZ0pZanRXVm9xNUZOSjc3U2JDeWtON1ZldUlKR2pXb3NBVUFNd1ZRSWdUTlVcL2ttc1wvN0cxVUx5Z01DRWVXemNiYTNrMVo4NEE4RmNlMXQzYUNGbGc9Il19..ZnT7ZR3EqsPYMQt3WdgUZYScBiyK9RI77zMaUKr-tkFRBHgBJQVTOORwM2fFh0QQCTLwOp1TiAzt_q9ofvw6JQ" "https://graph.facebook.com/1001200005002/notify_authorizations" \ -d '{"notification":{"partner_merchant_id":"123e4567-e89b-12d3-a456-426614174000","container_id":"cGF5bWVudF9jb250YWluZAXI6MTIzNDU2NzhfX01FUkNIQU5UX1RFU1RfRTJFX19QU1BfVEVTVF8x","event_time":1582230020020,"type":"notify_authorizations"},"resource":{"partner_auth_id":"1234567890","auth_amount":{"currency":"USD","value":29508},"status":"SUCCEEDED","created_time":1582230019010,"metadata":[]},"idempotence_token":"ddbdf2cf-d339-4b0b-a27e-4731d8d37c9d"}'
次のデータをエンコードする事前リクエスト。
{ "notification": { "partner_merchant_id": "123e4567-e89b-12d3-a456-426614174000", "container_id": "cGF5bWVudF9jb250YWluZAXI6MTIzNDU2NzhfX01FUkNIQU5UX1RFU1RfRTJFX19QU1BfVEVTVF8x", "event_time": 1582230020020, "type": "notify_authorizations" }, "resource": { "partner_auth_id": "1234567890", "auth_amount": { "currency": "USD", "value": 29508 }, "status": "SUCCEEDED", "created_time": 1582230019010, "metadata": [] }, "idempotence_token": "ddbdf2cf-d339-4b0b-a27e-4731d8d37c9d" }
事前リクエストの署名の例を次に示します。分かりやすくするために、Base64とJSONはデコードしてあります。
base64url( json({ "x5c": [ "MIIBhDCCASqgAwIBAgIBATAKBggqhkjOPQQDAjAhMR8wHQYDVQQDDBZwYXJ0bmVyIHNpZ25hdHVyZSBjZXJ0MB4XDTIwMDcxMzIyMjUzMFoXDTI0MDMxMTIyMjUzMFowITEfMB0GA1UEAwwWcGFydG5lciBzaWduYXR1cmUgY2VydDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABAnFx0GSJ2IOdfipWb0c0g+AU8el8zBtUKI1udsOi37kawRQHY3WoXidoE8H8s5qR2Jj6fAJYXNMDWcCbv+V0BujUzBRMB0GA1UdDgQWBBTx6PFFHcwaTfv9qWseB/Sc1aOmVzAfBgNVHSMEGDAWgBTx6PFFHcwaTfv9qWseB/Sc1aOmVzAPBgNVHRMBAf8EBTADAQH/MAoGCCqGSM49BAMCA0gAMEUCIQCADOsgJYjtWVoq5FNJ77SbCykN7VeuIJGjWosAUAMwVQIgTNU/kms/7G1ULygMCEeWzcba3k1Z84A8Fce1t3aCFlg=" ], "alg": "ES256" }) ) + // Protected Header "." + "" + // Payload is detached "." + "ZnT7ZR3EqsPYMQt3WdgUZYScBiyK9RI77zMaUKr-tkFRBHgBJQVTOORwM2fFh0QQCTLwOp1TiAzt_q9ofvw6JQ" // Signature
idempotence_token
フィールドを使用して、ネットワーク障害やタイムアウト後にリクエストが再試行されたときに、リクエストが重複実行されないようにします。べき等トークンは、クライアントが生成する一意の値で、その生成方法はクライアントで決定します。たとえば、V4 UUIDを使用してべき等トークンを生成できます。
リクエストが正常に完了したとき、つまりAPI呼び出しが有効な結果を返したとき、応答データをべき等トークンを使用して保存します。成功したリクエストが以前のべき等トークンを使用して再試行されたとき、以前に保存された応答がどのコードも再実行されることなく返されます。
リクエストがエラーになった場合、保存される結果はありません。そのリクエストは同じべき等トークンを使用して再試行しできます。
同じべき等トークンを使用して2つのリクエストを同時に行った場合、1つのリクエストだけが応答データを返します。
べき等トークンは一時的なもので、エラーの際にAPI呼び出しを再試行するためだけに使用します。何回かリクエストを再試行した場合、直前の呼び出しとは異なる応答を受け取る場合があります。
リクエストパラメーターは無視されます。リクエストのコンテンツを何か変更した場合は、そのリクエスト用に新しいべき等トークンを作成してください。
決済を処理したら、Meta Pay Webhooksを使うことによって、決済取引アクティビティをMetaに通知します。Webhooksを呼び出すと、決済取引アクティビティが顧客のFacebookアカウントのFacebook Payアクティビティページに可能な限り速やかに表示されます。
失敗したお知らせは、バッチ照合の間にMetaにキャプチャされ、顧客のFacebookアカウントに後から表示されます。
バッチ照合をサポートするため、その日にMetaに送ったお知らせを含むファイルを毎日アップロードします。成功したお知らせと失敗したお知らせの両方を含めます。Meta APIへのファイルのアップロードに関する詳細については、ファイルをFacebookにアップロードするをご覧ください。
Meta Pay APIは標準的なグラフAPIエラー処理を使用します。
サポートしている販売者のデータを初期化または更新するには、販売者Graph API /metapay_partner/merchant
に対してPOST
リクエストを発行し、販売者パラメーターを指定します。
https://graph.facebook.com/metapay_partner/merchant
パラメーター | 型 | 説明 | 必須 |
---|---|---|---|
| 文字列 | 販売者のアカウントと決済パートナーの組み合わせの一意の識別情報。 | はい |
| 文字列 | Meta Payインターフェースで顧客に表示される販売者ウェブサイトのURI。このURIの先頭は | はい |
| 文字列 | Meta Payインターフェースで顧客に表示される販売者の名前。 | はい |
| int64 | [廃止] 販売者カテゴリコード。Metaではこのカテゴライズされた決済アクティビティを使っており、決済がFacebookの利用規約に確実に合致するようにしています。 注:
| いいえ* |
| 配列< int64> | 販売者カテゴリコードのリスト。Metaは、これらのカテゴライズされた決済アクティビティを使用して、決済がFacebookの利用規約に確実に合致するようにしています。 注:
| いいえ* |
| 文字列 | 販売者が決済パートナーに対して有効であるか無効であるか。PENDING、ENABLED、DISABLEDのいずれかです。PENDINGはDISABLEDと同じ影響を及ぼしますが、無効な状態が一時的であることを示しています。 | はい |
| URI | Meta Payインターフェースで顧客に表示される販売者アイコンのURI。アイコンのファイルフォーマットは次のいずれかになります: png、jpeg。 | いいえ |
| 文字列 | 領収書または取引の概要をリクエストするための、顧客のメールアドレス。 | いいえ |
| 文字列 | 決済取引のサポートをリクエストするための、顧客の電話番号。使用する電話番号のフォーマットは、16315551000、+1 631 555 1001、+1 (631) 555-1004、1-631-555-1005のいずれかです。 | いいえ |
| 配列< 文字列> | 販売者の有効なセキュリティオリジンURIの全リスト。これを使って、期待されるウェブセキュリティオリジンから確実に決済が開始されるようにします。 | いいえ |
| 文字列 | 販売者のMetaピクセルの固有ID。これは、広告マネージャのMetaチェックアウトに固有の機能をサポートするために使われます | いいえ |
販売者APIにPOST
リクエストを行った後の200 OK
応答は、POST
が正常に処理されたことを示しています。応答本文は、販売者のステータスが、ENABLED
とDISABLED
のどちらであるかを示します。空でないステータス修飾子は、追加情報を提供します。
成功した場合の一般的な応答は次のようになります。
{
"status":"ENABLED",
"status_modifiers":[]
}
一時的なスクリーニングを実施している状態の販売者の応答は次のようになります。
{
"status":"DISABLED",
"status_modifiers":["PENDING_SCREENING"]
}
設定される可能性があるステータス修飾子は次のようになります。
ステータス修飾子 | 説明 |
---|---|
| 販売者は、コンプライアンススクリーニングの結果を待っているため、Meta Payの使用を一時的にブロックされています。スクリーニングは通常であれば24時間で終わります。販売者APIをクエリして、ステータスを確認します。 |
|
|
| 販売者の1つ以上のプロパティが健全性フラグをトリガーしています。販売者は無効になっています。 |
| 販売者はMeta Payの使用を永続的にブロックされています。 |
登録販売者のリストを取得するには、販売者Graph API /metapay_partner/merchants
に対してGET
リクエストを発行します。
https://graph.facebook.com/metapay_partner/merchants
URLのパラメーターとして、以下のリクエストの任意パラメーターがサポートされています。
パラメーター | 型 | 説明 | 必須 |
---|---|---|---|
| 文字列 | フィルター条件として適用されるパートナー販売者IDのコンマ区切りリスト | いいえ |
GET
Merchants APIからの結果は、ページ分割されます。一般的な応答形式については、リンクされているページをご覧ください。data
配列で返される各要素の形式は、販売者リクエストパラメーターの形式です。例:
curl -H "Authorization: OAuth $OAUTH" -X GET "https://graph.facebook.com/metapay_partner/merchants?partner_merchant_id=MERCHANT_TEST_1" { "data": [ { "partner_merchant_id": "MERCHANT_TEST_1", "merchant_status": "DISABLED", "display_name": "Test merchant 1", "business_uri": "https://facebook.com/", "icon_uri": "https://facebook.com/favicon.ico", "mcc_list": [7311], "support_email": "example@facebook.com", "support_phone": "+11234567890", "valid_origins": [ "https://facebook.com/" ], "legal_structure": "COMPANY_TYPE_NOT_SPECIFIED", "status_modifiers":["BLOCKED"], "effective_merchant_status":"DISABLED" } ], "paging": { "cursors": { "before": "aaa...", "after": "bbb..." }, "next": "https://graph.facebook.com/metapay_partner/merchants?limit=25&after=..." } }
認証、キャプチャ、申し立て、決済、返金が生じた際には、必ずMetaのWebhooksを呼び出してMetaに決済取引アクティビティを知らせなければなりません。
200 OK
応答は、Webhookが正常に処理されたことを示します。成功した場合、応答の本文でcontainer_id
が返されます。
{
"id":"cGF5bWVudF9jb250YWluZAXI6N2I3ODA1ZATYtZAmRiNS00Yzc4LWFjYjAtZATg3ZAjJhMzg2YTc5XzM2ODkyNjAzMTc4MDEzNzYZD"
}
Webhook呼び出しが失敗した場合は、少なくとも72時間にわたって、間隔を徐々に空けながら呼び出しを3回以上再試行します。その後も呼び出しが失敗する場合、通知はバッチ照合で後でキャプチャされます。
Meta API Webhooksでモデル化されているリソースのエンティティ関連図を次に示します。黒い点が付いたプロパティは必須属性です。
Webhookを呼び出すたびに、続くセクションで説明されているとおり、通知パラメーターをリクエスト本文に含め、通知タイプの詳細をリソースフィールドに含めます。通知の一般的な構造は次のとおりです。
{ idempotence_token: '<your token>', notification: { ... }, resource: { ... } }
プロパティ | 型 | 説明 | 必須 |
---|---|---|---|
| 文字列 | 販売者のアカウントの一意の識別情報。使用できる文字は、[a-zA-Z0-9_-]です。 | はい |
| 文字列 | 通知のタイプ。有効な値は | はい |
| int64 | UNIXタイムスタンプ(ミリ秒単位)。 | はい |
| 文字列 | コンテナ構造の一意の識別情報。 | はい |
/<CONTAINER_ID>/notify_authorizations
に対してPOST
リクエストを発行し、決済取引の認証アクティビティをMetaに通知します。
https://graph.facebook.com/<CONTAINER_ID>/notify_authorizations
プロパティ | 型 | 説明 | 必須 |
---|---|---|---|
| 文字列 | 認証または課金の一意の識別情報。使用できる文字は、[a-zA-Z0-9_-]です。 | はい |
| 合計額通知オブジェクト | 認証された合計額。現在サポートされている | はい |
| 文字列 | 認証のステータス。 | はい |
| int64 | ミリ秒単位のUNIXタイムスタンプで、認証が試行された日時を示します。 | はい |
| 文字列 | 決済取引の説明。 | いいえ |
| 文字列 | 顧客(クレジットカード明細など)に表示される決済取引の説明。 | いいえ |
| エラー通知オブジェクト。 | エラーが発生した場合の、そのエラーの詳細。 | いいえ |
| Object {String : String} | 認証に関する追加情報を提供するキー/値のペアの配列。 | いいえ |
/<CONTAINER_ID>/notify_captures
に対してPOST
リクエストを発行し、決済取引のキャプチャアクティビティをMetaに通知します。
https://graph.facebook.com/<CONTAINER_ID>/notify_captures
プロパティ | 型 | 説明 | 必須 |
---|---|---|---|
| 文字列 | キャプチャの一意の識別情報。使用できる文字は、[a-zA-Z0-9_-]です。 | はい |
| 文字列 | このキャプチャに対応する認証または課金に対して以前に作成していた識別情報。 | いいえ |
| 合計額通知オブジェクト | キャプチャされた合計額。現在サポートされている | はい |
| 文字列 | キャプチャのステータス。 | はい |
| int64 | ミリ秒単位のUNIXタイムスタンプで、キャプチャが試行された日時を示します。 | はい |
| 文字列 | キャプチャを説明する、販売者からのノート。 | いいえ |
| エラー通知オブジェクト。 | エラーが発生した場合の、そのエラーの詳細。 | いいえ |
/<CONTAINER_ID>/notify_disputes
に対してPOST
リクエストを発行し、決済取引の申し立てアクティビティをMetaに通知します。
https://graph.facebook.com/<CONTAINER_ID>/notify_disputes
プロパティ | 型 | 説明 | 必須 |
---|---|---|---|
| 文字列 | 申し立ての一意の識別情報。使用できる文字は、[a-zA-Z0-9_-]です。 | はい |
| int64 | ミリ秒単位のUNIXタイムスタンプで、申し立てが作成された日時を示します。 | はい |
| 合計額通知オブジェクト | 申し立てられた合計額。現在サポートされている | はい |
| 文字列 | 申し立ての理由。 | はい |
| 文字列 | 申し立てのステータス。 | はい |
| 文字列 | この申し立てに対応する決済に対して以前に作成していた識別情報。 | いいえ |
| 配列< 文字列> | 申し立てに対応するキャプチャの識別情報。このプロパティは任意です。 | いいえ |
| 文字列 | 申し立ての説明。 | いいえ |
| オブジェクト {文字列 : 文字列} | 申し立てに関する追加情報を提供するキー/値のペアの配列です。 | いいえ |
/<CONTAINER_ID>/notify_payments
に対してPOST
リクエストを発行し、金銭の移動操作が伴わない決済アクティビティについてMetaに通知します。例えば、リスクチェックが不合格となった場合、ユーザーの支払いを処理しないことにするかもしれません。
https://graph.facebook.com/<CONTAINER_ID>/notify_payments
プロパティ | 型 | 説明 | 必須 |
---|---|---|---|
| 文字列 | 決済の一意の識別情報。使用できる文字は、[a-zA-Z0-9_-]です。 | はい |
| 文字列 | 決済のステータス。 | はい |
| int64 | ミリ秒単位のUNIXタイムスタンプで、決済が試行された日時を示します。 | はい |
| オブジェクト {文字列 : 文字列} | 決済に関する追加情報を提供するキー/値のペアの配列です。 | いいえ |
/<CONTAINER_ID>/notify_refunds
に対してPOST
リクエストを発行し、決済取引の返金アクティビティをMetaに通知します。
https://graph.facebook.com/<CONTAINER_ID>/notify_refunds
プロパティ | 型 | 説明 | 必須 |
---|---|---|---|
| 文字列 | 返金の一意の識別情報。使用できる文字は、[a-zA-Z0-9_-]です。 | はい |
| int64 | ミリ秒単位のUNIXタイムスタンプで、返金が作成された日時を示します。 | はい |
| 合計額通知オブジェクト | 返金された合計額。現在サポートされている | はい |
| 文字列 | 返金のステータス。 | はい |
| 文字列 | この返金に対応するキャプチャに対して以前に作成していた識別情報。 | いいえ |
| 文字列 | 返金の説明。 | いいえ |
| 文字列 | 顧客(クレジットカード明細など)に表示される返金の説明。 | いいえ |
| エラー通知オブジェクト。 | エラーが発生した場合の、そのエラーの詳細。 | いいえ |
| オブジェクト {文字列 : 文字列} | 返金に関する追加情報を提供するキー/値のペアの配列。 | いいえ |
合計額オブジェクトを使用して、認証、キャプチャ、申し立て、返金の通知に関する特定の通貨における金額を表します。
プロパティ | 型 | 説明 |
---|---|---|
| 文字列 | 金額の通貨のISO 4217規格の3文字の通貨コード。通貨コードの一覧については、ISO 4217をご覧ください。現在サポートされている |
| 整数 |
|
認証、キャプチャ、決済、返金の処理時にエラーが発生した場合、resource
にerror
オブジェクトを含めてエラーに関する情報を提供します。
プロパティ | 型 | 説明 |
---|---|---|
| 文字列 | Meta固有のエラーコード。有効な値は通知タイプによって異なり、前出のセクションで説明されています。 |
| 文字列 | エラーに関する独自のコード。 |
| 文字列 | エラーに関する独自の説明。 |