Google Pay
Google Pay(TM)を有効にすると、お客様はGoogleアカウントに紐づけられたクレジットカードまたはデビットカードで決済できるようになります。このガイドでは、決済フローとサービスの実装手順について説明します。
対応地域
| 地域 | 通貨 | 返金可否 | 最小APIバージョン |
|---|---|---|---|
| タイ | THB | 可 | 2017-11-02 |
| 日本 | JPY | 可 | 2017-11-02 |
| シンガポール | SGD | 可 | 2017-11-02 |
| マレーシア | MYR | 可 | 2017-11-02 |
有効化の方法
Google Payを有効にするには、support@omise.coまでこの機能のリクエストをメールでお送りください。
決済フロー
Google PayはWebサイトおよびAndroidデバイスでの決済に対応しています。Google Payで決済することを選択したお客様は、プラットフォームに組み込まれたGoogle Payボタンをタップまたはクリックして取引を開始します。すでにGoogleアカウントにカードを紐づけているお客様は、すぐに希望のカードを選択できます。まだカードを紐づけていないお客様は、新しいカードを紐づけるオプションが表示されます。
お客様が希望のカードを選択して決済を確認すると、通常のクレジットカード決済フローと同様にカードに課金されます。つまり、アカウントの現在のカード処理設定(例:3-Dセキュアが有効かどうか)もGoogle Pay取引に適用されます。
デスクトップブラウザでの利用
Google Pay決済を開始するには、お客様がWebサイトでのチェックアウト時にGoogle Payを希望の支払い方法として選択します❶。次に、お客様は希望のクレジットカードまたはデビットカードを選択します❷。確認後、Omiseは課金が完了したことを示すWebhookイベントを送信します(有効な場合)❸。

モバイルアプリケーションでの利用
Google Pay決済を開始するには、お客様がモバイルアプリケーションでGoogle Payを希望の支払い方法として選択します❶。次に、お客様は希望のクレジットカードまたはデビットカードを選択します❷。お客様は決済を確認します❸。Omiseは課金が完了したことを示すWebhookイベントを送信します(有効な場合)❹。

実装
Google Payブランドガイドライン(Web、Android)に従って、WebサイトまたはAndroidアプリにGoogle Pay決済ボタンを追加してください。お客様がボタンをタップしてカードを選択すると、カード情報を含むGoogle PayトークンがGoogleから返されます。このトークンをクライアントサイドライブラリ(Omise.jsまたはAndroid SDK)に送信して、Charge APIで使用可能なカードトークンを取得します。
OmiseはGoogle Payトークンを機密性の高いカードデータと同様に扱います。そのため、PCI-DSSライセンスをお持ちでない場合は、サーバーで使用する前にこれらのトークンをカードトークンに変換する必要があります。詳細はカード情報の収集をご覧ください。
要約すると、Google Payで課金を作成するには以下のAPIリクエストを行います:
- お客様がGoogle Payボタンで決済を開始したときに、GoogleからGoogle Payトークンを取得します。
- Omise.jsまたはAndroid SDKを使用して、Google Payトークンからカードトークンを作成します。
- ステップ2で取得したカードトークンを使用して新しい課金を作成します。
- 課金完了のWebhookイベントを受信後、課金を取得してステータスを確認します(任意ですが推奨)。
以下のシーケンス図は、カードトークンを取得する方法を示しています:
Omiseの組み込み決済フォームを使用する場合、Google Payボタンが提供され、使用可能なカードトークンが自動的に返されます。シークレットキーを使用してサーバーで課金を作成してください。
Google Payトークンの取得
Google Payボタンをレンダリングし、Google Payトークンを受け取るには、Google PayのWebまたはAndroid開発者ドキュメントに従ってください。APIリクエストでは、以下のフィールドがガイドラインに従っていることを確認してください:
allowedAuthMethodsフィールドにはPAN_ONLYのみを含める必要があります。allowedCardNetworksフィールドはCapability APIでサポートされているカードブランドを反映する必要があります。gatewayフィールドはomiseに設定します。gatewayMerchantIdフィールドはOmiseのパブリックキーです。
リクエストが送信されると、レスポンスのtokenという名前で新しいGoogle Payトークンが返されます。
実装がGoogle PayのWebまたはAndroidブランドガイドラインにも準拠していることを確認してください。
カードトークンの作成
Google Payトークンを受け取ったら、以下のトークン化パラメータを使用して新しいカードトークンを作成します。
| 名前 | 型 | 説明 |
|---|---|---|
method | string | (必須)googlepay文字列を設定します。 |
data | string | (必須)Google Payトークン。PaymentMethodTokenizationDataオブジェクトのtokenフィールドを参照してください。 |
billing_name | string | (任意、推奨)カード所有者名。Addressオブジェクトのnameフィールドを参照してください。 |
billing_city | string | (任意、推奨)請求先住所の市区町村。Addressオブジェクトのlocalityフィールドを参照してください。 |
billing_country | string | (任意、推奨)請求先住所の国(2文字のISO 3166コード)。AddressオブジェクトのcountryCodeフィールドを参照してください。 |
billing_postal_code | string | (任意、推奨)請求先住所の郵便番号。AddressオブジェクトのpostalCodeフィールドを参照してください。 |
billing_state | string | (任意、推奨)請求先住所の都道府県。AddressオブジェクトのadministrativeAreaフィールドを参照してください。 |
billing_street1 | string | (任意、推奨)請求先住所の番地1。Addressオブジェクトのaddress1フィールドを参照してください。 |
billing_street2 | string | (任意)請求先住所の番地2。Addressオブジェクトのaddress2フィールドを参照してください。 |
billing_phone_number | string | (任意)請求先住所の電話番号。AddressオブジェクトのphoneNumberフィールドを参照してください。 |
デフォルトでは、カード所有者名と請求先住所はカードトークンに付加されず、その場合は名前が「Google Pay」として表示されます。この動作を変更するには、Googleへの決済リクエスト時に請求先住所パラメータを指定してください。レスポンスの請求先情報はAddressオブジェクトで確認できます。
Omise.jsの場合、createToken関数の第1引数にトークン入力タイプをtokenizationに設定し、第2引数にトークン化パラメータを指定します。
- JavaScript
- Kotlin (Android)
- cURL
Omise.setPublicKey("your_omise_public_key");
tokenParameters = {
method: 'googlepay',
data: '{"signature":"MEQCIA+wGZttxT13yz599zQjYugoz5kClNSmVa39vKv6ZOenAiARRtHQ0aYSrfd3oWhB\/ZtEeJs3ilT\/J0pYz1EWnzU2fw\\u003d\\u003d","intermediateSigningKey":{"signedKey":"{\"keyValue\":\"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEev+pVoUgtoS+y8Ecz3c72OFBD3d74XJOcnRxVmCV+2TJTW1g4d0UhDkhHeURhHQNvJPyBFHfYIUUj\/EYhYAzgQ\\\\u003d\\\\u003d\",\"keyExpiration\":\"1647856171825\"}","signatures":["MEYCIQClXfVcil7qaG2btVbyzf6x1\/MqCTbbJM\/tGN4iME4M9wIhANL53daWJHdDPpKxR3M\/Jis4WPVb093PW7fChj\/gCQUS"]},"protocolVersion":"ECv2","signedMessage":"{\"encryptedMessage\":\"4JighTc0b1HhRQu+NgQN1XQWWOeB4YyR5cMFi8Vu3FeWHAjPtGs3LjrdpWhJhWekURzD6BZCbg1xakYvAMsahoTyUzDLtNpKmlglFpVjBSSYkPKFT6xovTKsWS7xC\/x9AvJsATtotwN8TTiP3+1dXtLLFClnCTkg9vEvChvXq0FwnrUOBtMiWukBY84R2rpzqNuZoh6gdvWHgPP6RczhtERg+kqKdd4\/UnKE8ElzOWYDmZoJvFhxU\/O97vHW1ohOe8ut94bxiPH6DB82Ec87Mu\/oArsGMpsnFVsWzIcLX+q+KayGRbKxPQzV726fO7GipG94KiF7YfCk1r+D+jkFR7x0ev6l+XRoTz+PKIlhrcn3DEYJudJAP\/Xh2kj\/csnLn4XdKV0aZ5Ua3IauA4fQl80pAo9foujiRGwagHHOfnp6iMjA\/CdG9SNQS3eUdsxtlJKPoK4rtv7cwISNQvoCWMv748YvV3f+LEOWf8couRgrxPCPbk1vO8TfNOgSAjULzRs+C1xy6\/j5aZU46PpomEClDWrujMAcDVqCnExTx2QE9IAb4n02V6UxWv8Dgqv5TsRKjPe7WSCO0+jRWAvs6wBBUbFPHvEe4do+rQ\\\\u003d\\\\u003d\",\"ephemeralPublicKey\":\"BGJhfH3jWMmZtIALmYr7fWxYSNSCFoAT9MCOcbCZdO3LmP6njpGk9LISmr+H1Wk9XUZuMvNQmMHE+yFzW\/sA5lg\\\\u003d\",\"tag\":\"d9a6aVaoIEQm+bTjd5M2HL7+OeIup0Jb6rM1CN7v3NQ\\\\u003d\"}"}',
// 請求先情報をここに追加します(任意)
billing_name: 'John Doe',
billing_street1: '1600 Amphitheatre Parkway',
};
Omise.createToken('tokenization', tokenParameters, function(statusCode, response) {
console.log(response)
});
private val client = Client("your_omise_public_key")
val tokenizationParam = TokenizationParam(
method = "googlepay",
data = "{\"signature\":\"MEQCIA+wGZttxT13yz599zQjYugoz5kClNSmVa39vKv6ZOenAiARRtHQ0aYSrfd3oWhB\/ZtEeJs3ilT\/J0pYz1EWnzU2fw\\u003d\\u003d\",\"intermediateSigningKey\":{\"signedKey\":\"{\\\"keyValue\\\":\\\"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEev+pVoUgtoS+y8Ecz3c72OFBD3d74XJOcnRxVmCV+2TJTW1g4d0UhDkhHeURhHQNvJPyBFHfYIUUj\/EYhYAzgQ\\\\u003d\\\\u003d\\\",\\\"keyExpiration\\\":\\\"1647856171825\\\"}\",\"signatures\":[\"MEYCIQClXfVcil7qaG2btVbyzf6x1\/MqCTbbJM\/tGN4iME4M9wIhANL53daWJHdDPpKxR3M\/Jis4WPVb093PW7fChj\/gCQUS\"]},\"protocolVersion\":\"ECv2\",\"signedMessage\":\"{\\\"encryptedMessage\\\":\\\"4JighTc0b1HhRQu+NgQN1XQWWOeB4YyR5cMFi8Vu3FeWHAjPtGs3LjrdpWhJhWekURzD6BZCbg1xakYvAMsahoTyUzDLtNpKmlglFpVjBSSYkPKFT6xovTKsWS7xC\/x9AvJsATtotwN8TTiP3+1dXtLLFClnCTkg9vEvChvXq0FwnrUOBtMiWukBY84R2rpzqNuZoh6gdvWHgPP6RczhtERg+kqKdd4\/UnKE8ElzOWYDmZoJvFhxU\/O97vHW1ohOe8ut94bxiPH6DB82Ec87Mu\/oArsGMpsnFVsWzIcLX+q+KayGRbKxPQzV726fO7GipG94KiF7YfCk1r+D+jkFR7x0ev6l+XRoTz+PKIlhrcn3DEYJudJAP\/Xh2kj\/csnLn4XdKV0aZ5Ua3IauA4fQl80pAo9foujiRGwagHHOfnp6iMjA\/CdG9SNQS3eUdsxtlJKPoK4rtv7cwISNQvoCWMv748YvV3f+LEOWf8couRgrxPCPbk1vO8TfNOgSAjULzRs+C1xy6\/j5aZU46PpomEClDWrujMAcDVqCnExTx2QE9IAb4n02V6UxWv8Dgqv5TsRKjPe7WSCO0+jRWAvs6wBBUbFPHvEe4do+rQ\\\\u003d\\\\u003d\\\",\\\"ephemeralPublicKey\\\":\\\"BGJhfH3jWMmZtIALmYr7fWxYSNSCFoAT9MCOcbCZdO3LmP6njpGk9LISmr+H1Wk9XUZuMvNQmMHE+yFzW\/sA5lg\\\\u003d\\\",\\\"tag\\\":\\\"d9a6aVaoIEQm+bTjd5M2HL7+OeIup0Jb6rM1CN7v3NQ\\\\u003d\\\"}\"}",
// 請求先情報をここに追加します(任意)
billing_name = "John Doe",
billing_street1 = "1600 Amphitheatre Parkway"
)
val request = Token.CreateTokenRequestBuilder(tokenization = tokenizationParam).build()
client.send(request, object: RequestListener<Token>{
override fun onRequestSucceed(model: Token) {
// トークンが作成されました
}
override fun onRequestFailed(throwable: Throwable) {
// エラーが発生しました
}
})
curl https://vault.omise.co/tokens \
-u $OMISE_PUBLIC_KEY: \
-d 'tokenization[method]=googlepay' \
--data-urlencode 'tokenization[data]={"signature":"MEUCIQDY1e/dzFAZUkRXXjXBKFN1AeKDdtnspf3yHUaxNF0iLAIgbmAccscWk9KxyiJO/uSjdjBd3rUnDU4ow5hlhDgW0wM\u003d","intermediateSigningKey":{"signedKey":"{\"keyValue\":\"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEa6knFzfre2if/qjHGrPXRJI4R0fa5gDiw53ZLQIF319MCV1ht0lyMl1jc8+MtPfoTENSicQap6Cs8Fl+83apfg\\u003d\\u003d\",\"keyExpiration\":\"1656417412574\"}","signatures":["MEUCIEWY90SXfDoRMVPs8YZy7u0t1B/UZ0WNP6Ibq/OyrbkzAiEAmvxPrtmkE6mEOGzkv39Cpn6OiwqMVwMv01adhafXJto\u003d"]},"protocolVersion":"ECv2","signedMessage":"{\"encryptedMessage\":\"VI+tGn08DwzYavfneViUCQ0hp59zS9lHmBEDhQEANhPOnka2PAvzyeNNLwmkLHF4fglKtQD70WJBfTbLG5PuFttnPXZN56pU/pnv8MgHdkdkzgeoT3fDWL8G00nQ8dM2lCRjS8lSgKrs0tdd5a0VbuH/OZ8TRaQ8LuaWtmXuwtVXTi7clCe3G977FPJmm1upq50wxS/q1W0Yr296J6pNfA4tQ3v5fWnJBwaypsn7fjqM5p4DK5X9Q2tmHQjSjL6VR8o/ojL9RxMZCrAl6X/ZodipD/0uQmtz7Q/T8VBdgZVa6pptGmmxdbLRa0EPXEJpiQpqlleibIzleQakpNcdLaauMCjlXhTobdCqCkvZ6oTlTmRQ3pddowUKeOMaqT5rGAOL9Z6XAbcw2/WCEC6DXPAPR9ba8C+W5iBjA6FcbRf2P0WvHM/2uPe7Dz+rj9tGaGt+E97eCXXiZ+PV9CELghpfZmqrkc58llBThDDLwN/2vBW1UYIWJQCyPSJttzdM3Cyc5CGBNXcQ+O9z7GUZXhLoyu4T7s+8hxlKYLJ++WhmWAJ1ybYywkBmcbdKmhYkoJ/D85qe4UqvpmA3Hhz6w9gNDQteRY/kQEd/ZQ\\u003d\\u003d\",\"ephemeralPublicKey\":\"BOxUCtd20nc4LxB2hUlFAGxo6rx9R2bP+5FRPuOhLLVhvAy5QyoSyku9JDXwsRh07u/EDQN8Hf7e/mtBrg7vaAs\\u003d\",\"tag\":\"5gC0Mw+mNmDInoIK+K1AIN+siXyyJp6afQjhUMK+5Io\\u003d\"}"}'
レスポンス:
{
"object": "token",
"id": "tokn_test_5s7p3w9z0xhnily5g3j",
"livemode": false,
"location": "https://vault.omise.co/tokens/tokn_test_5s7p3w9z0xhnily5g3j",
"used": false,
"charge_status": "unknown",
"card": {
"object": "card",
"id": "card_test_5s7p3w9ygewzs8yfliv",
"livemode": false,
"location": null,
"deleted": false,
"street1": null,
"street2": null,
"city": null,
"state": null,
"phone_number": null,
"postal_code": null,
"country": "us",
"financing": "credit",
"bank": "JPMORGAN CHASE BANK N.A.",
"brand": "Visa",
"fingerprint": "uHGUFYpH0GCcilfcEdJWQe/+j/FLNfXsZKeW5Xrydc4=",
"first_digits": null,
"last_digits": "1111",
"name": "Google Pay",
"expiration_month": 12,
"expiration_year": 2027,
"security_code_check": true,
"tokenization_method": "googlepay",
"created_at": "2022-06-21T02:32:10Z"
},
"created_at": "2022-06-21T02:32:10Z"
}
id属性がトークン識別子です(toknで始まります)。
課金の作成
受け取ったカードトークンでカードに課金するには、クレジットカード決済を参照してください。特定のトークン化方式(googlepay)から生成されたカードトークンと通常のカードトークンには、いくつかの違いがあります:
- これらのカードトークンには、どのトークン化方式が適用されたかを示す
tokenization_methodフィールドがあります。 - これらのカードトークンはCustomers APIでは使用できません。
追加オプション
組み込み決済フォームを使用する場合、Google Pay APIをより詳細に制御するための追加設定が可能です。関連するパラメータを以下に説明します。
| データ属性 | パラメータ | 説明 |
|---|---|---|
data-googlepay-merchant-id | googlepayMerchantId | Google PayのマーチャントID(本番トラフィックを受け付ける場合は必須)。 |
data-googlepay-request-billing-address | googlepayRequestBillingAddress | trueに設定すると、カード所有者名と請求先住所がカードトークンに付加されます。これを指定すると、米国、英国、カナダのカード所有者の承認率が向上します。 |
data-googlepay-request-phone-number | googlepayRequestPhoneNumber | カード所有者の請求先住所がリクエストされている場合、trueに設定するとカード所有者の電話番号もカードトークンに付加されます。 |
サポートされているパラメータの完全なリストはこちらで確認できます。
テストと本番稼働
完全なユーザージャーニーを完了するには、Googleアカウントを持ち、課金可能なカードを紐づけているか、Googleが提供するテストカードのいずれかを使用する必要があります。Google Pay環境がテストモードの場合、Google Payトークンのカード番号は常に4111 1111 1111 1111になります。Omiseのテストキーでこのカードに課金して、課金成功をシミュレートできます。
本番稼働するには、Google Pay APIのmerchantIdフィールドにマーチャントIDが必要です。これはGoogle Pay Business Consoleに登録することで取得できます。本番稼働の準備中は、Google PayのWebまた はAndroid統合チェックリストにも準拠していることを確認してください。