1. บทนำ
โค้ดแล็บนี้ต่อยอดมาจาก Google Pay API สําหรับเว็บ 101: พื้นฐาน และใช้โค้ดที่เขียนในโค้ดแล็บนั้น โปรดทำตามขั้นตอนใน Codelab นั้นให้เสร็จสมบูรณ์ก่อนเพื่อที่จะทำ Codelab นี้ให้เสร็จ
สิ่งที่คุณจะได้เรียนรู้
- วิธีปรับแต่งปุ่ม Google Pay
- วิธีเริ่มกระบวนการชําระเงิน
- วิธีรับทราบสถานะการกันวงเงินบัตรเครดิต/บัตรเดบิต
- วิธีจัดการกับการเปลี่ยนแปลงที่อยู่สำหรับจัดส่ง
- วิธีจัดการรหัสแลกสิทธิ์
สิ่งที่คุณต้องมี
- ตัวแก้ไขข้อความที่คุณเลือกเพื่อแก้ไขไฟล์ HTML และ JavaScript
- เว็บเบราว์เซอร์ Google Chrome หรือวิธีอื่นในการทดสอบเว็บไซต์ในเครื่อง
- สำหรับเวอร์ชันที่ใช้งานจริง คุณจะต้องมี
merchantId
ของ Google Pay การลงทะเบียนที่ Google Pay และ Wallet Console ใช้เวลาเพียงไม่กี่นาที คุณจึงควรดำเนินการเลย
ติดตามโดยใช้ Project IDX
2. การปรับแต่งปุ่ม
ต่อไปนี้เป็นภาพรวมคร่าวๆ ของ ButtonOptions
ดูคำอธิบายโดยละเอียดได้ในเอกสารประกอบ
ตัวเลือก | ความจำเป็น | ค่า |
onClick | ต้องระบุ | ชื่อตัวแฮนเดิลเหตุการณ์ JavaScript |
allowedPaymentMethods | ไม่บังคับ | |
buttonColor | ไม่บังคับ | เริ่มต้น สีดํา สีขาว |
buttonLocale | ไม่บังคับ | รหัส ISO 639-1 แบบ 2 อักขระ |
buttonRadius | ไม่บังคับ | 0 ถึง 100 |
buttonRootNode | ไม่บังคับ | HTMLDocument หรือ ShadowRoot |
buttonSizeMode | ไม่บังคับ | คงที่, เติม |
buttonType | ไม่บังคับ | book, buy, checkout, donate, order, pay, plain, subscribe |
มองหาเมธอด renderGooglePayButton()
ในไฟล์ main.js
แล้วแทนที่ด้วยโค้ดที่แสดงที่นี่
function renderGooglePayButton() {
const button = getGooglePaymentsClient().createButton({
buttonColor: 'default',
buttonType: 'buy',
buttonRadius: 4,
buttonLocale: 'en',
onClick: onGooglePaymentButtonClicked,
allowedPaymentMethods: baseGooglePayRequest.allowedPaymentMethods,
});
document.getElementById(GPAY_BUTTON_CONTAINER_ID).appendChild(button);
}
คำอธิบายโค้ด
- เมธอดไลบรารี
createButton()
จะรับอาร์กิวเมนต์การกําหนดค่าButtonOptions
ซึ่งช่วยให้คุณกําหนดลักษณะและลักษณะการทํางานของปุ่มได้
3. การเรียกกลับข้อมูลการชำระเงิน
ไคลเอ็นต์การชำระเงินมีกลไกให้คุณลงทะเบียนฟังก์ชันเพื่อจัดการเมื่อเกิดเหตุการณ์บางอย่าง รายการแรกคือการกันวงเงินบัตรเครดิต/บัตรเดบิตสำหรับการชําระเงิน และรายการที่ 2 คือการเปลี่ยนแปลงข้อมูลการชําระเงิน
- ค้นหาความคิดเห็น
// todo: paymentDataCallbacks
ในmain.js
แล้วแทนที่ด้วยโค้ดนี้paymentDataCallbacks: { onPaymentAuthorized: onPaymentAuthorized, onPaymentDataChanged: onPaymentDataChanged },
- จากนั้นค้นหาส่วน
Event Handlers
ของmain.js
และเพิ่มโค้ดต่อไปนี้ต่อท้ายส่วนfunction onPaymentAuthorized(paymentData) { // We'll fill this in later } function onPaymentDataChanged(intermediatePaymentData) { // We'll fill this in later }
- สุดท้าย ให้ค้นหาความคิดเห็น
// todo: callbackIntents
ภายในmain.js
แล้วแทนที่ความคิดเห็นด้วยโค้ดนี้ ในโค้ดแล็บนี้ เราจะติดตั้งใช้งาน Intent ทั้ง 4 รายการcallbackIntents: [ 'PAYMENT_AUTHORIZATION', 'SHIPPING_ADDRESS', 'SHIPPING_OPTION', 'OFFER', ], shippingAddressRequired: true, shippingOptionRequired: true, shippingOptionParameters: { defaultSelectedOptionId: 'shipping-001', shippingOptions: [ { id: 'shipping-001', label: '$0.00: Free shipping', description: 'Free Shipping delivered in 5 business days.' }, { id: 'shipping-002', label: '$1.99: Standard shipping', description: 'Standard shipping delivered in 3 business days.' }, { id: 'shipping-003', label: '$1000: Express shipping', description: 'Express shipping delivered in 1 business day.' }, ], },
คำอธิบายโค้ด
- พร็อพเพอร์ตี้
PaymentDataCallbacks
มีพร็อพเพอร์ตี้ย่อย 2 รายการ รายการแรกสำหรับแบ็กคอลการกันวงเงินบัตรเครดิต/บัตรเดบิต และรายการที่ 2 สำหรับแบ็กคอลการเปลี่ยนแปลงข้อมูลการชำระเงิน - หากใช้การเรียกกลับ
onPaymentAuthorized
ต้องระบุ ระบบจะเรียกใช้ Callback นี้เมื่อรายการcallbackIntents
มีPAYMENT_AUTHORIZATION
ในPaymentDataRequest
onPaymentDataChanged
เป็นตัวเลือกที่ไม่บังคับ การเรียกกลับนี้จะเรียกใช้เมื่อรายการcallbackIntents
มีOFFER
,SHIPPING_ADDRESS
หรือSHIPPING_OPTION
ในPaymentDataRequest
- ตั้งค่า
callbackIntents
ในPaymentDataRequest
เพื่อเรียกใช้การเรียกกลับทั้ง 2 รายการสําหรับ Codelab นี้
4. การอนุมัติการชำระเงิน
Authorize Payments ใช้เพื่อเริ่มกระบวนการชําระเงินและรับทราบสถานะการกันวงเงินบัตรเครดิต/บัตรเดบิต
ค้นหาฟังก์ชัน onPaymentAuthorized()
ใน main.js
ที่คุณเพิ่มไว้ในขั้นตอนสุดท้าย แล้วแทนที่ด้วยโค้ดต่อไปนี้
function onPaymentAuthorized(paymentData) {
return new Promise(function(resolve, reject) {
// Write the data to console for debugging
console.log("onPaymentAuthorized", paymentData);
// Do something here to pass token to your gateway
// To simulate the payment processing, there is a 70% chance of success
const paymentAuthorizationResult = (Math.random() > 0.3)
? {transactionState: 'SUCCESS'}
: {
transactionState: 'ERROR',
error: {
intent: 'PAYMENT_AUTHORIZATION',
message: 'Insufficient funds',
reason: 'PAYMENT_DATA_INVALID'
}
};
resolve(paymentAuthorizationResult);
});
}
คำอธิบายโค้ด
- ระบบจะเรียกใช้ฟังก์ชัน Callback ของ
onPaymentAuthorized()
ด้วยอาร์กิวเมนต์PaymentData
และต้องแสดงผลพรอมต์ ในตัวอย่างนี้ ฟังก์ชันจะสุ่มเลือกว่าจะแสดงผลสำเร็จหรือข้อผิดพลาด ในโปรเจ็กต์ คุณจะใช้โอกาสนี้เพื่อประมวลผลธุรกรรมกับเกตเวย์โดยใช้โทเค็นที่พบในpaymentData
ที่paymentData.paymentMethodData.tokenizationData.token
5. การเปลี่ยนแปลงข้อมูลการชำระเงิน
การอัปเดตราคาแบบไดนามิกช่วยให้ผู้ขายอัปเดตตัวเลือกการจัดส่งและข้อมูลธุรกรรมแบบไดนามิกตามที่อยู่สำหรับจัดส่งที่เลือก นอกจากนี้ คุณยังอัปเดตข้อมูลธุรกรรมแบบไดนามิกตามตัวเลือกการจัดส่งที่เลือกได้
ค้นหาฟังก์ชัน onPaymentDataChanged()
ใน main.js
ที่คุณเพิ่มไว้ในขั้นตอนสุดท้าย แล้วแทนที่ด้วยโค้ดต่อไปนี้
function onPaymentDataChanged(intermediatePaymentData) {
return new Promise(function(resolve, reject) {
let paymentDataRequestUpdate = {};
// Write the data to console for debugging
console.log("onPaymentDataChanged", intermediatePaymentData);
switch(intermediatePaymentData.callbackTrigger)
{
case "INITIALIZE":
// Handle initialize
break;
case "SHIPPING_ADDRESS":
// Read intermediatePaymentData.transactionInfo
// Read intermediatePaymentData.shippingAddress
// Update paymentDataRequestUpdate.newTransactionInfo
break;
case "SHIPPING_OPTION":
// Read intermediatePaymentData.transactionInfo
// Read intermediatePaymentData.shippingOptionData
// Update paymentDataRequestUpdate.newTransactionInfo
// Update paymentDataRequestUpdate.newShippingOptionParameters
break;
case "OFFER":
// Read intermediatePaymentData.offerData
// Read intermediatePaymentData.transactionInfo
// Update paymentDataRequestUpdate.newTransactionInfo
// Update paymentDataRequestUpdate.newOfferInfo
break;
default:
// Update paymentDataRequestUpdate.error
}
resolve(paymentDataRequestUpdate);
});
}
คำอธิบายโค้ด
- ฟังก์ชัน
onPaymentDataChanged()
ใช้IntermediatePaymentData
เป็นอาร์กิวเมนต์ ระบบจะเรียกใช้ฟังก์ชันนี้เมื่อมีการเปลี่ยนแปลงที่อยู่สำหรับจัดส่งหรือตัวเลือกการจัดส่งในชีตการชำระเงิน - ฟังก์ชัน
onPaymentDataChanged()
ต้องแสดงผลพรอมต์ที่แก้ไขออบเจ็กต์PaymentDataRequestUpdate
ซึ่งระบุข้อมูลธุรกรรมใหม่ ตัวเลือกการจัดส่ง และข้อผิดพลาดเพื่ออัปเดตชีตการชำระเงิน redemptionCodes
คือชุดรหัสโปรโมชันที่ป้อนลงในชีตการชำระเงิน รวมถึงรหัสที่ได้รับอนุมัติแล้ว
6. บทสรุป
ยินดีด้วยที่ผ่าน Codelab นี้ คุณได้เรียนรู้วิธี ...
เรียกใช้โปรเจ็กต์
ทดสอบด้วย Google Chrome
ใช้เว็บเบราว์เซอร์ Google Chrome เพื่อเปิด index.html
โดยใช้ไฟล์ > เปิดไฟล์... จากเมนูหลักของ Chrome Chrome จะเรียกใช้ main.js
เมื่อเปิดโปรเจ็กต์ด้วยวิธีนี้ เว็บเบราว์เซอร์อื่นๆ อาจไม่อนุญาตให้เรียกใช้ JavaScript
– หรือ –
ทดสอบด้วยเว็บเซิร์ฟเวอร์ในเครื่อง
หากติดตั้ง Python แล้ว ให้เรียกใช้ python3 -m http.server
จากพรอมต์เทอร์มินัลในโฟลเดอร์รูท pay-web-101
$ cd /your/path/to/pay-web-101
$ python3 -m http.server
Serving HTTP on :: port 8000 (http://[::]:8000/) ...
จากนั้นไปที่เว็บไซต์ของคุณที่ http://localhost:8000
ขั้นตอนถัดไป
แหล่งข้อมูลเพิ่มเติม
- เข้าร่วมการสนทนาในแชแนล#payments บน Discord
- ติดตาม @GooglePayDevs บน X
- ดูวิดีโอเกี่ยวกับ Google Pay บน YouTube