Google Pay
เปิดใช้งาน Google Pay™ เพื่อให้ลูกค้าสามารถชำระเงินด้วยบัตรเครดิตหรือบัตรเดบิตที่เชื่อมต่อกับบัญชี Google ของพวกเขา คู่มือนี้จะอธิบายขั้นตอนการชำระเงินและวิธีการติดตั้งใช้งาน
การใช้งาน Google Pay หมายความว่าคุณยอมรับนโยบายการใช้งานที่ยอมรับได้และข้อกำหนดการใช้บริการของ 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 รองรับการชำระเงินบนเว็บไซต์และอุปกรณ์ Android ลูกค้าที่เลือกชำระเงินผ่าน Google Pay จะเริ่มทำรายการโดยการแตะหรือคลิกปุ่ม Google Pay ที่ฝังอยู่ในแพลตฟอร์มของคุณ ลูกค้าที่เชื่อมต่อบัตรกับบัญชี Google ไว้แล้วจะสามารถเลือกบัตรที่ต้องการใช้ได้ทันที ส่วนผู้ที่ยังไม่ได้เชื่อมต่อจะมีตัวเลือกให้เพิ่มบัตรใหม่
เมื่อลูกค้าเลือกบัตรที่ต้องการและยืนยันการชำระเงินแล้ว บัตรจะถูกเรียกเก็บเงินในลักษณะเดียวกับขั้นตอนการชำระเงินด้วยบัตรเครดิตปกติ ซึ่งหมายความว่าการตั้งค่าการประมวลผลบัตรปัจจุบันของบัญชีคุณ (เช่น การเปิดใช้งาน 3-D Secure) จะมีผลกับธุรกรรม Google Pay ด้วยเช่นกัน
การใช้งานบนเบราว์เซอร์เดสก์ท็อป
ในการเริ่มต้นชำระเงินด้วย Google Pay ลูกค้าเลือก Google Pay เป็นวิธีการชำระเงินที่ต้องการระหว่างการชำระเงินบนเว็บไซต์ของคุณ ❶ จากนั้นลูกค้าเลือกบัตรเครดิตหรือบัตรเดบิตที่ต้องการ ❷ เมื่อยืนยันแล้ว Omise จะส่ง webhook event (หากเปิดใช้งาน) เพื่อแจ้งว่าการเรียกเก็บเงินเสร็จสมบูรณ์ ❸

การใช้งานบนแอปพลิเคชันมือถือ
ในการเริ่มต ้นชำระเงินด้วย Google Pay ลูกค้าเลือก Google Pay เป็นวิธีการชำระเงินที่ต้องการบนแอปพลิเคชันมือถือของคุณ ❶ จากนั้นลูกค้าเลือกบัตรเครดิตหรือบัตรเดบิตที่ต้องการ ❷ ลูกค้าตรวจสอบและยืนยันการชำระเงิน ❸ Omise จะส่ง webhook event (หากเปิดใช้งาน) เพื่อแจ้งว่าการเรียกเก็บเงินเสร็จสมบูรณ์ ❹

การติดตั้งใช้งาน
ปฏิบัติตามแนวทางแบรนด์ Google Pay (Web, Android) เพื่อเพิ่มปุ่มชำระเงิน Google Pay ลงบนเว็บไซต์หรือแอป Android ของคุณ หลังจากลูกค้าแตะปุ่มและเลือกบัตรแล้ว คุณจะได้รับ Google Pay token จาก Google ซึ่งประกอบด้วยข้อมูลบัตร จากนั้นคุณส่ง token นี้ไปยังไลบรารีฝั่งไคลเอนต์ของเรา (Omise.js หรือ Android SDK) เพื่อรับ card token ที่สามารถใช้งานกับ Charge API ของเราได้
Omise ถือว่า Google Pay token เป็นข้อมูลบัตรที่ละเอียดอ่อนเช่นเดียวกัน ดังนั้น หากคุณไม่มีใบอนุญาต PCI-DSS token เหล่านี้จะต้องถูกแปลงเป็น card token ก่อนที่จะนำไปใช้บนเซิร์ฟเวอร์ของคุณ อ่านเพิ่มเติมได้ที่ การเก็บข้อมูลบัตร
โดยสรุป ให้ทำการเรียก API ดังต่อไปนี้เพื่อสร้าง charge ด้วย Google Pay:
- รับ Google Pay token จาก Google เมื่อผู้ใช้เริ่มต้นการชำระเงินผ่านปุ่ม Google Pay
- สร้าง card token จาก Google Pay token โดยใช้ Omise.js หรือ Android SDK
- สร้าง charge ใหม่โดยใช้ card token ที่ได้รับจาก ขั้นตอนที่ 2
- หลังจากได้รับ webhook event ที่แจ้งว่า charge เสร็จสมบูรณ์ ให้ดึงข้อมูล charge เพื่อตรวจสอบสถานะ (ไม่บังคับ แต่แนะนำ)
แผนภาพลำดับต่อไปนี้แสดงวิธีการรับ card token:
หากคุณใช้ ฟอร์มชำระเงินสำเร็จรูป ของ Omise ปุ่ม Google Pay จะถูกจัดเตรียมไว้ให้ และ card token ที่ใช้งานได้จะถูกส่งกลับมาโดยอัตโนมัติ ใช้ secret key ของคุณเพื่อสร้าง charge บนเซิร์ฟเวอร์
การรับ Google Pay Token
ในการแสดงปุ่ม Google Pay และรับ Google Pay token ให้ทำตามเอกสารสำหรับนักพัฒนา Google Pay Web หรือ Android ในคำขอ API ตรวจสอบให้แน่ใจว่าฟิลด์ต่อไปนี้เป็นไปตามแนวทางด้านล่าง:
- ฟิลด์
allowedAuthMethodsต้องมีเฉพาะPAN_ONLYเท่านั้น - ฟิลด์
allowedCardNetworksควรสะท้อนถึงแบรนด์บัตรที่รองรับจาก Capability API - ฟิลด์
gatewayตั้งค่าเป็นomise - ฟิลด์
gatewayMerchantIdคือ public key ของ Omise ของคุณ
หลังจากส่งคำขอ Google Pay token ใหม่จะถูกส่งกลับมาภายใต้ชื่อ token ในการตอบกลับ
โปรดตรวจสอบให้แน่ใจว่าการติดตั้งใช้งานของคุณเป็นไปตามแนวทางแบรนด์ Google Pay Web หรือ Android ด้วย
การสร้าง Card Token
เมื่อคุณได้รับ Google Pay token แล้ว ให้สร้าง card token ใหม่โดยใช้พารามิเตอร์ tokenization ดังต่อไปนี้
| ชื่อ | ประเภท | คำอธิบาย |
|---|---|---|
method | string | (จำเป็น) ตั้งค่าเป็น string googlepay |
data | string | (จำเป็น) Google Pay token อ้างอิงจากฟิลด์ token ใน PaymentMethodTokenizationData object |
billing_name | string | (ไม่บังคับ แต่แนะนำ) ชื่อเจ้าของบัตร อ้างอิงจากฟิลด์ name ใน Address object |
billing_city | string | (ไม่บังคับ แต่แนะนำ) เมืองในที่อยู่สำหรับเรียกเก็บเงิน อ้างอิงจากฟิลด์ locality ใน Address object |
billing_country | string | (ไม่บังคับ แต่แนะนำ) ประเทศในที่อยู่สำหรับเรียกเก็บเงินเป็นรหัส ISO 3166 สองตัวอักษร อ้างอิงจากฟิลด์ countryCode ใน Address object |
billing_postal_code | string | (ไม่บังคับ แต่แนะนำ) รหัสไปรษณีย์ในที่อยู่สำหรับเรียกเก็บเงิน อ้างอิงจากฟิลด์ postalCode ใน Address object |
billing_state | string | (ไม่บังคับ แต่แนะนำ) รัฐ/จังหวัดในที่อยู่สำหรับเรียกเก็บเงิน อ้างอิงจากฟิลด์ administrativeArea ใน Address object |
billing_street1 | string | (ไม่บังคับ แต่แนะนำ) ที่อยู่บรรทัดที่ 1 อ้างอิงจากฟิลด์ address1 ใน Address object |
billing_street2 | string | (ไม่บังคับ) ที่อยู่บรรทัดที่ 2 อ้างอิงจากฟิลด์ address2 ใน Address object |
billing_phone_number | string | (ไม่บังคับ) หมายเลขโทรศัพท์ในที่อยู่สำหรับเรียกเก็บเงิน อ้างอิงจากฟิลด์ phoneNumber ใน Address object |
โดยค่าเริ่มต้น ชื่อผู้ถือบัตรและที่อยู่สำหรับเรียกเก็บเงินจะไม่ถูกแนบไปกับ card token และชื่อจะแสดงเป็น "Google Pay" ในกรณีดังกล่าว หากต้องการเปลี่ยนพฤติกรรมนี้ ให้ระบุ billing address parameters เมื่อส่งคำขอชำระเงินไปยัง Google ข้อมูลการเรียกเก็บเงินจากการตอบกลับสามารถดูได้ใน Address object
สำหรับ Omise.js ให้ตั้งค่าประเภท input ของ token เป็น tokenization ที่อาร์กิวเมนต์แรกของฟังก์ชัน createToken และส่งพารามิเตอร์ tokenization ที่อาร์กิวเมนต์ที่สอง
- 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) {
// คุณสร้าง 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 คือตัวระบุ token (ขึ้นต้นด้วย tokn)
การสร้าง Charge
อ้างอิง การชำระเงินด้วยบัตรเครดิต เพื่อเรียกเก็บเงินจากบัตรด้วย card token ที่ได้รับ มีความแตกต่างบางประการระหว่าง card token ที่สร้างจากวิธี tokenization เฉพาะ (googlepay) เมื่อเทียบกับ token ปกติ:
- card token เหล่านี้มีฟิลด์
tokenization_methodเพื่อบอกว่าใช้วิธี tokenization แบบใดกับบัตร - card token เหล่านี้ไม่สามารถใช้ใน Customers API ได้
ตัวเลือกเพิ่มเติม
เมื่อใช้ ฟอร์มชำระเงินสำเร็จรูป คุณสามารถตั้งค่าการกำหนดค่าเพิ่มเติมเพื่อควบคุม Google Pay API ได้มากขึ้น พารามิเตอร์ที่เกี่ยวข้องอธิบายไว้ด้านล่าง
| Data Attribute | Parameter | คำอธิบาย |
|---|---|---|
data-googlepay-merchant-id | googlepayMerchantId | Merchant ID สำหรับ Google Pay (จำเป็นเมื่อรับ traffic จริง) |
data-googlepay-request-billing-address | googlepayRequestBillingAddress | ตั้งค่าเป็น true เพื่อแนบชื่อผู้ถือบัตรและที่อยู่สำหรับเรียกเก็บเงินไปกับ card token การระบุข้อมูลนี้ช่วยปรับปรุงอัตราการอนุมัติสำหรับผู้ถือบัตรในสหรัฐอเมริกา สหราชอาณาจักร และแคนาดา |
data-googlepay-request-phone-number | googlepayRequestPhoneNumber | เมื่อมีการขอที่อยู่สำหรับเรียกเก็บเงินของผู้ถือบัตร ตั้งค่าเป็น true เพื่อแนบหมายเลขโทรศัพท์ของผู้ถือบัตรไปกับ card token ด้วย |
รายการพารามิเตอร์ที่รองรับทั้งหมดสามารถดูได้ ที่นี่
การทดสอบและการเปิดใช้งานจริง
เพื่อทดสอบกระบวนการทั้งหมด คุณต้องมีบัญชี Google และเชื่อมต่อบัตรที่สามารถเรียกเก็บเงินได้กับบัญชี หรือใช้ บัตรทดสอบที่มีให้ จาก Google หาก environment ของ Google Pay อยู่ในโหมดทดสอบ หมายเลขบัตรใน Google Pay token จะเป็น 4111 1111 1111 1111 เสมอ คุณสามารถเรียกเก็บเงินจากบัตรนี้ด้วย test key ของ Omise เพื่อจำลองการเรียกเก็บเงินที่สำเร็จ
ในการเปิดใช้งานจริง คุณต้องมี merchant ID ในฟิลด์ merchantId ใน Google Pay API คุณสามารถขอรับได้โดยการลงทะเบียนกับ Google Pay Business Console ในระหว่างการเตรียมพร้อมเปิดตัว ตรวจสอบให้แน่ใจว่าคุณปฏิบัติตาม checklist การรวมระบบ Google Pay Web หรือ Android ด้วย