Google Pay を直接 API を通じて利用
このガイドでは、DEUNAのAPIとのGoogle Payの直接統合方法について説明します。直接統合により、支払いプロセス全体を完全に制御できるため、カスタム実装が必要な場合や既存の決済システムを使用している場合に最適です。この統合は、単一の支払いのみをサポートします。
DEUNA を通じた Google Pay#
DEUNA での Google Pay 決済の標準的なプロセスは以下のとおりです。
- 支払い方法を取得
- Google Pay Web SDK の初期化
- Google Pay を使用した購入
1. 支払い方法の取得#
Google Pay のクレデンシャル ID と SDK 設定パラメータを取得
応答
{
"data": [
{
"allow_installments_plan": true,
"credentials": {
"external_merchant_id": "DEUNA_GOOGLE_MERCHANT_ID"
},
"enabled": true,
"extra_params": {
"allowed_auth_methods": [
"PAN_ONLY",
"CRYPTOGRAM_3DS"
],
"allowed_card_networks": [
"VISA",
"MASTERCARD",
"AMEX"
],
"merchant_name": "Test DEUNA"
},
"id": "ef2319fe-f88d-4d8d-b4d1-e4fa08f18651",
"method_type": "wallet",
"payment_provider": "google_pay",
"processor_name": "google_pay"
}
]
}2. Google Pay Web SDKの初期化#
詳細については、以下の Google Pay のドキュメントを参照してください:
Google Pay JS SDK のインポート
以下のスクリプトをページに追加します:
<script src="https://pay.google.com/gp/p/js/pay.js"></script>完全な統合例
// 1. Check availability
const paymentsClient = new google.payments.api.PaymentsClient({
environment: 'PRODUCTION' // or 'TEST' for sandbox
});
const isReadyToPayRequest = {
apiVersion: 2,
apiVersionMinor: 0,
allowedPaymentMethods: [
{
type: 'CARD',
parameters: {
allowedAuthMethods: ['PAN_ONLY', 'CRYPTOGRAM_3DS'], // from extra_params.allowed_auth_methods
allowedCardNetworks: ['VISA', 'MASTERCARD', 'AMEX'] // from extra_params.allowed_card_networks
}
}
]
};
paymentsClient.isReadyToPay(isReadyToPayRequest).then((response) => {
if (!response.result) {
// Google Pay not available — hide the button or show a fallback
}
});
// 2. Build the payment data request (use values from Get Payment Methods endpoint)
const paymentDataRequest = {
apiVersion: 2,
apiVersionMinor: 0,
allowedPaymentMethods: [
{
type: 'CARD',
parameters: {
allowedAuthMethods: ['PAN_ONLY', 'CRYPTOGRAM_3DS'],
allowedCardNetworks: ['VISA', 'MASTERCARD', 'AMEX']
},
tokenizationSpecification: {
type: 'PAYMENT_GATEWAY',
parameters: {
gateway: 'deuna',
gatewayMerchantId: '{external_merchant_id}' // from credentials.external_merchant_id
}
}
}
],
merchantInfo: {
merchantId: '{google-merchant-id}',
merchantName: 'Test DEUNA' // from extra_params.merchant_name
},
transactionInfo: {
countryCode: 'MX',
currencyCode: 'MXN',
totalPrice: '1.00',
totalPriceStatus: 'FINAL'
}
};
// 3. Load payment data on button click (must be inside a user gesture)
// The credential-id comes from the `id` field in the Get Payment Methods response
paymentsClient.loadPaymentData(paymentDataRequest).then((paymentData) => {
// 4. Handle payment authorization
// Extract the raw token string — send it as-is to DEUNA, without parsing or re-serializing
const googlePayToken = paymentData.paymentMethodData.tokenizationData.token;
// Use googlePayToken in step 3 — Create Card or Purchase V2
}).catch((err) => {
console.error('Google Pay error:', err);
});3. Google Payでの購入#
顧客が支払いを承認した後、 loadPaymentData() は、暗号化されたECv2トークンを paymentData.paymentMethodData.tokenizationData.tokenを通じて送信します。このトークンは、変更なしで DEUNA に送信する必要があります。
お客様の利用状況に応じて、以下のいずれかのオプションをご選択ください。
3.1 カードの作成
このオプションを使用すると、カード情報を将来の購入に利用できます。トークンは… tokenizationData.token は、Create Cardエンドポイントに送信され、 card_id 後で使用できる。
→ 参照:Create Card API のドキュメント
{
"google_pay": {
"paymentData": {
"token": {
"protocolVersion": "ECv2",
"signature": "MEQCIH6Q4OwQ0jAceFEkGF0JID6sJNXxOEi4r+mA7biHQS9nwiiNwOrr24RyPeHA0Q==",...
"intermediateSigningKey": {
"signedKey": "{\"keyExpiration\":\"1542323393147\",\"keyValue\":\"MFJeFRxyCw==\"}",...
"signatures": [
"MEYCIQCO2EIi48s8VTH+ilMEpoXLFfkxAwHjfPSCVED/QDSHmQWpeNmIP+z+tCQHQxP0v"...
]
},
"signedMessage": "{\"tag\":\"jpGz1F1BVrKbRU9K8+7cZs=\",\"en:\"mKOoXwi8OavZ...\"}"...
}
}
},
"credential_source": "google_pay"
}3.2 Purchase with Card ID
このオプションは、Create Card を使用してカードがすでに保存されている場合に利用します。これは、標準的な Purchase V2 リクエストであり、 card_id 「Create Card」エンドポイントから返されるデータ – Google Pay トークンは不要。
→ Purchase V2 API参照
{
"order_token": "{order-token}",
"order_type": "DEUNA_CHECKOUT",
"payer_info": {
"email": "customer@example.com",
"card_holder_dni": "12345678"
},
"payment_source": {
"method_type": "credit_card",
"card_info": {
"card_id": "{deuna-card-id}"
}
}
}3.3 ダイレクト購入
このオプションは、カード情報を保存する必要がない、単発の支払いの場合に使用します。トークンは… tokenizationData.token 情報は購入リクエストに直接送信されます。
→ Purchase V2 API参照
{
"order_token": "{{order-token}}",
"order_type": "DEUNA_CHECKOUT",
"payer_info": {
"email": "{{random_user}}@testuser.com",
"card_holder_dni": "12345678"
},
"payment_source": {
"method_type": "credit_card",
"card_info": {
"credential_source": "google_pay",
"credential_source_config": {
"type": "google_pay",
"values": {
"system": "DIRECT",
"encrypted_data": "{\"signature\":\"MEUCI...Qb27X0\\u003d\",\"intermediateSigningKey\":{\"signedKey\":\"{\\\"keyValue\\\":\\\"MFkwEw...dwluLc74w\\\\u003d\\\\u003d\\\",\\\"keyExpiration\\\":\\\"1732...316\\\"}\",\"signatures\":[\"MEU...z+94I\\u003d\"]},\"protocolVersion\":\"ECv2\",\"signedMessage\":\"{\\\"encryptedMessage\\\":\\\"06PdX...wYvlX4\\\\u003d\\\",\\\"ephemeralPublicKey\\\":\\\"BNPW...4O2S6j0\\\\u003d\\\",\\\"tag\\\":\\\"m3Iv...KY8g\\\\u003d\\\"}\"}"
}
}
}
},
"anti_fraud_info": {
"device": {
"id": "eyJPUEVOUEFZIjoiIiwiTUVSQ0FET1BBzAzLTk2NjRkYzE3MWQzYiJ9..."
}
}
}レスポンス:
{
"order_type": "DEUNA_CHECKOUT",
"order_token": "4598f493-de86-4fe0-b9fd-c4c6c9847e39",
"order": {
"order_id": "DEUNA_CHECKOUT_b6a5c0b6-3df9-4b3b-b778-7086c190062b",
"currency": "MXN",
"total_amount": 10000,
"display_total_amount": "MXN 100,00",
"status": "succedeed",
"payment": {
"data": {
"status": "processed"
}
}
}
}