ดูวิธีที่ผู้ขายผสานรวมแอปการชำระเงินและวิธีที่ธุรกรรมการชำระเงินทำงานร่วมกับ Payment Request API
Web Payments API เป็นฟีเจอร์การชำระเงินเฉพาะที่ติดตั้งมาในเบราว์เซอร์เป็นครั้งแรก เมื่อใช้การชำระเงินผ่านเว็บ การผสานรวมผู้ขายกับแอปการชำระเงินจะง่ายขึ้น ขณะที่ประสบการณ์ของลูกค้าจะมีประสิทธิภาพและปลอดภัยยิ่งขึ้น
ดูข้อมูลเพิ่มเติมเกี่ยวกับประโยชน์ของการใช้การชำระเงินผ่านเว็บได้ที่การเพิ่มศักยภาพให้กับแอปการชำระเงินด้วยการชำระเงินผ่านเว็บ
บทความนี้จะอธิบายธุรกรรมการชำระเงินในเว็บไซต์ของผู้ขายและช่วยให้คุณเข้าใจวิธีการทำงานของการผสานรวมแอปการชำระเงิน
กระบวนการนี้ประกอบด้วย 6 ขั้นตอนดังนี้
- ผู้ขายเริ่มธุรกรรมการชำระเงิน
- ผู้ขายแสดงปุ่มการชำระเงิน
ลูกค้ากดปุ่มชำระเงิน
เบราว์เซอร์จะเปิดแอปการชำระเงิน
หากลูกค้าเปลี่ยนแปลงรายละเอียด (เช่น ตัวเลือกการจัดส่งหรือที่อยู่) ผู้ขายจะอัปเดตรายละเอียดธุรกรรมให้สอดคล้องกับการเปลี่ยนแปลง
หลังจากลูกค้ายืนยันการซื้อแล้ว ผู้ขายจะตรวจสอบการชำระเงินและทำธุรกรรมให้เสร็จสมบูรณ์
ขั้นตอนที่ 1: ผู้ขายเริ่มธุรกรรมการชำระเงิน
เมื่อลูกค้าตัดสินใจซื้อ ผู้ขายจะเริ่มธุรกรรมการชำระเงินโดยสร้างออบเจ็กต์ PaymentRequest
ออบเจ็กต์นี้มีข้อมูลสำคัญเกี่ยวกับธุรกรรม ดังนี้
- วิธีการชำระเงินที่ยอมรับและข้อมูลของวิธีการชำระเงินดังกล่าวเพื่อประมวลผลธุรกรรม
- รายละเอียด เช่น ราคารวม (ต้องระบุ) และข้อมูลเกี่ยวกับสินค้า
- ตัวเลือกที่ผู้ขายขอข้อมูลการจัดส่งได้ เช่น ที่อยู่สำหรับจัดส่งและตัวเลือกการจัดส่ง
- ผู้ขายยังขอที่อยู่สำหรับการเรียกเก็บเงิน ชื่อผู้ชำระเงิน อีเมล และหมายเลขโทรศัพท์ได้ด้วย
- ผู้ขายยังระบุประเภทการจัดส่ง (
shipping
,delivery
หรือpickup
) ที่ไม่บังคับในPaymentRequest
ได้ด้วย แอปการชำระเงินจะใช้ข้อมูลดังกล่าวเป็นคำแนะนำในการแสดงป้ายกำกับที่ถูกต้องใน UI ได้
const request = new PaymentRequest([{
supportedMethods: 'https://bobpay.xyz/pay',
data: {
transactionId: '****'
}
}], {
displayItems: [{
label: 'Anvil L/S Crew Neck - Grey M x1',
amount: { currency: 'USD', value: '22.15' }
}],
total: {
label: 'Total due',
amount: { currency: 'USD', value : '22.15' }
}
}, {
requestShipping: true,
requestBillingAddress: true,
requestPayerEmail: true,
requestPayerPhone: true,
requestPayerName: true,
shippingType: 'delivery'
});
ผู้จัดการการชำระเงินบางรายอาจกำหนดให้ผู้ขายระบุรหัสธุรกรรมที่ออกไว้ล่วงหน้าซึ่งเป็นส่วนหนึ่งของข้อมูลธุรกรรม การผสานรวมทั่วไปรวมถึงการสื่อสารระหว่างเซิร์ฟเวอร์ของผู้ขายและเซิร์ฟเวอร์ของตัวแฮนเดิลการชำระเงินเพื่อจองราคาทั้งหมด ซึ่งจะช่วยป้องกันไม่ให้ลูกค้าที่เป็นอันตรายเปลี่ยนแปลงราคาและโกงผู้ขายด้วยการตรวจสอบเมื่อสิ้นสุดธุรกรรม
ผู้ขายสามารถส่งรหัสธุรกรรมเป็นส่วนหนึ่งของพร็อพเพอร์ตี้ data
ของออบเจ็กต์ PaymentMethodData
เมื่อระบุข้อมูลธุรกรรมแล้ว เบราว์เซอร์จะเข้าสู่กระบวนการค้นหาแอปการชำระเงินที่ระบุไว้ใน PaymentRequest
โดยอิงตามตัวระบุวิธีการชำระเงิน วิธีนี้จะช่วยให้เบราว์เซอร์ระบุแอปการชำระเงินที่จะเปิดได้ทันทีที่ผู้ขายพร้อมดำเนินการธุรกรรม
ดูรายละเอียดเกี่ยวกับวิธีการทำงานของกระบวนการค้นพบได้ที่การตั้งค่าวิธีการชําระเงิน
ขั้นตอนที่ 2: ผู้ขายแสดงปุ่มการชำระเงิน
ผู้ขายรองรับวิธีการชำระเงินได้หลายวิธี แต่ควรแสดงปุ่มการชำระเงินสำหรับวิธีการชำระเงินที่ลูกค้าใช้ได้จริงเท่านั้น การแสดงปุ่มการชำระเงินที่ใช้งานไม่ได้ทำให้ผู้ใช้ได้รับประสบการณ์การใช้งานที่ไม่ดี หากผู้ขายคาดการณ์ได้ว่าวิธีการชำระเงินที่ระบุไว้ในออบเจ็กต์ PaymentRequest
จะใช้ไม่ได้กับลูกค้า ผู้ขายสามารถระบุวิธีแก้ปัญหาสำรองหรือไม่แสดงปุ่มนั้นเลยก็ได้
เมื่อใช้อินสแตนซ์ PaymentRequest
ผู้ขายจะสอบถามได้ว่าลูกค้ามีแอปการชำระเงินหรือไม่
ลูกค้ามีแอปการชำระเงินไหม
canMakePayment()
ของ PaymentRequest
จะแสดงผล true
หากมีแอปเป๋าตังในอุปกรณ์ของลูกค้า "พร้อมใช้งาน" หมายความว่าระบบพบแอปการชำระเงินที่รองรับวิธีการชำระเงินนั้น และติดตั้งแอปการชำระเงินสำหรับแพลตฟอร์มนั้นแล้ว หรือแอปการชำระเงินบนเว็บพร้อมที่จะลงทะเบียน
const canMakePayment = await request.canMakePayment();
if (!canMakePayment) {
// Fallback to other means of payment or hide the button.
}
ขั้นตอนที่ 3: ลูกค้ากดปุ่มชำระเงิน
เมื่อลูกค้ากดปุ่มชำระเงิน ผู้ขายจะเรียกใช้show()
วิธีของอินสแตนซ์ PaymentRequest
ซึ่งจะทริกเกอร์การเปิด UI การชำระเงินทันที
ในกรณีที่มีการตั้งค่าราคารวมสุดท้ายแบบไดนามิก (เช่น ดึงข้อมูลจากเซิร์ฟเวอร์) ผู้ขายสามารถเลื่อนการเปิดตัว UI การชําระเงินจนกว่าจะทราบราคารวม
การเลื่อนการเปิดตัว UI การชำระเงิน
ดูการสาธิตUI การเลื่อนการชำระเงินจนกว่าจะกำหนดราคารวมสุดท้าย
หากต้องการเลื่อน UI การชําระเงิน ผู้ขายจะส่ง Promise ไปยังเมธอด show()
เบราว์เซอร์จะแสดงสัญญาณบอกสถานะการโหลดจนกว่า Promise จะแก้ไขและธุรกรรมจะพร้อมเริ่ม
const getTotalAmount = async () => {
// Fetch the total amount from the server, etc.
};
try {
const result = await request.show(getTotalAmount());
// Process the result…
} catch(e) {
handleError(e);
}
หากไม่ได้ระบุ Promise เป็นอาร์กิวเมนต์สำหรับ show()
เบราว์เซอร์จะเปิด UI การชำระเงินทันที
ขั้นตอนที่ 4: เบราว์เซอร์เปิดแอปการชำระเงิน
เบราว์เซอร์สามารถเปิดแอปการชำระเงินสำหรับแพลตฟอร์มหรือแอปการชำระเงินบนเว็บโดยเฉพาะ (ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีที่ Chrome กำหนดแอปการชำระเงินที่จะเปิด)
วิธีการสร้างแอปการชำระเงินส่วนใหญ่ขึ้นอยู่กับนักพัฒนาแอป แต่เหตุการณ์ที่ส่งจากและไปยังผู้ขาย รวมถึงโครงสร้างของข้อมูลที่ส่งไปพร้อมกับเหตุการณ์เหล่านั้นจะได้รับมาตรฐาน
เมื่อเปิดแอปการชำระเงิน แอปจะได้รับข้อมูลธุรกรรมที่ส่งไปยังออบเจ็กต์ PaymentRequest
ในขั้นตอนที่ 1 ซึ่งประกอบด้วยข้อมูลต่อไปนี้
- ข้อมูลวิธีการชำระเงิน
- ราคารวม
- ตัวเลือกการชำระเงิน
แอปการชำระเงินใช้ข้อมูลธุรกรรมเพื่อติดป้ายกำกับ UI
ขั้นตอนที่ 5: วิธีที่ผู้ขายอัปเดตรายละเอียดธุรกรรมโดยขึ้นอยู่กับการกระทำของลูกค้า
ลูกค้ามีตัวเลือกในการเปลี่ยนรายละเอียดธุรกรรม เช่น วิธีการชำระเงินและตัวเลือกการจัดส่งในแอปการชำระเงิน ขณะที่ลูกค้าทำการเปลี่ยนแปลง ผู้ขายจะได้รับเหตุการณ์การเปลี่ยนแปลงและอัปเดตรายละเอียดธุรกรรม
เหตุการณ์ที่ผู้ขายได้รับมี 4 ประเภทดังนี้
- เหตุการณ์การเปลี่ยนแปลงวิธีการชำระเงิน
- เหตุการณ์การเปลี่ยนแปลงที่อยู่สำหรับจัดส่ง
- เหตุการณ์การเปลี่ยนแปลงตัวเลือกการจัดส่ง
- เหตุการณ์การตรวจสอบผู้ขาย
เหตุการณ์การเปลี่ยนแปลงวิธีการชำระเงิน
แอปการชำระเงินรองรับวิธีการชำระเงินได้หลายวิธี และผู้ขายอาจเสนอส่วนลดพิเศษโดยขึ้นอยู่กับวิธีที่ลูกค้าเลือก เหตุการณ์การเปลี่ยนแปลงวิธีการชำระเงินสามารถแจ้งผู้ขายเกี่ยวกับวิธีการชำระเงินใหม่เพื่อให้อัปเดตราคารวมพร้อมส่วนลดและส่งกลับไปยังแอปการชำระเงินได้ เพื่อครอบคลุมกรณีการใช้งานนี้
request.addEventListener('paymentmethodchange', e => {
e.updateWith({
// Add discount etc.
});
});
เหตุการณ์การเปลี่ยนแปลงที่อยู่สำหรับจัดส่ง
แอปการชำระเงินสามารถระบุที่อยู่สำหรับจัดส่งของลูกค้าได้ (ไม่บังคับ) ซึ่งจะสะดวกสำหรับลูกค้าเนื่องจากลูกค้าไม่ต้องกรอกรายละเอียดในแบบฟอร์มด้วยตนเองและสามารถจัดเก็บที่อยู่สำหรับจัดส่งในแอปการชำระเงินที่ต้องการแทนที่จะจัดเก็บในเว็บไซต์ของผู้ขายหลายแห่ง
หากลูกค้าอัปเดตที่อยู่สำหรับจัดส่งในแอปการชำระเงินหลังจากเริ่มธุรกรรม ระบบจะส่งเหตุการณ์ 'shippingaddresschange'
ไปยังผู้ขาย เหตุการณ์นี้ช่วยให้ผู้ขายระบุค่าจัดส่งตามที่อยู่ใหม่ อัปเดตราคารวม และส่งกลับไปยังแอปการชำระเงินได้
request.addEventListener('shippingaddresschange', e => {
e.updateWith({
// Update the details
});
});
หากผู้ขายจัดส่งไปยังที่อยู่ที่มีการอัปเดตไม่ได้ ผู้ขายสามารถส่งข้อความแสดงข้อผิดพลาดได้โดยเพิ่มพารามิเตอร์ข้อผิดพลาดลงในรายละเอียดธุรกรรมที่ส่งกลับไปยังแอปการชำระเงิน
เหตุการณ์การเปลี่ยนแปลงตัวเลือกการจัดส่ง
ผู้ขายเสนอตัวเลือกการจัดส่งหลายรายการให้แก่ลูกค้าได้ และสามารถมอบสิทธิ์ตัวเลือกดังกล่าวแก่แอปการชำระเงินได้ ตัวเลือกการจัดส่งจะแสดงเป็นรายการราคาและชื่อบริการที่ลูกค้าเลือกได้ เช่น
- การจัดส่งแบบมาตรฐาน - ฟรี
- การจัดส่งด่วน - 5 USD
เมื่อลูกค้าอัปเดตตัวเลือกการจัดส่งในแอปการชำระเงิน ระบบจะส่งเหตุการณ์ 'shippingoptionchange'
ไปยังผู้ขาย จากนั้นผู้ขายจะกำหนดค่าจัดส่ง อัปเดตราคารวม และส่งกลับไปยังแอปการชำระเงินได้
request.addEventListener('shippingoptionchange', e => {
e.updateWith({
// Update the details
});
});
ผู้ขายยังแก้ไขตัวเลือกการจัดส่งแบบไดนามิกตามที่อยู่สำหรับจัดส่งของลูกค้าได้ด้วย ซึ่งจะเป็นประโยชน์เมื่อผู้ขายต้องการเสนอตัวเลือกการจัดส่งชุดต่างๆ สำหรับลูกค้าในประเทศและต่างประเทศ
เหตุการณ์การตรวจสอบผู้ขาย
แอปการชำระเงินสามารถดำเนินการตรวจสอบผู้ขายก่อนที่จะดำเนินการตามขั้นตอนการชำระเงินเพื่อเพิ่มความปลอดภัย การออกแบบกลไกการตรวจสอบขึ้นอยู่กับแอปการชำระเงิน แต่เหตุการณ์การตรวจสอบผู้ขายจะแจ้งให้ผู้ขายทราบถึง URL ที่ใช้ตรวจสอบตนเองได้
request.addEventListener('merchantvalidation', e => {
e.updateWith({
// Use `e.validateURL` to validate
});
});
ขั้นตอนที่ 6: ผู้ขายตรวจสอบการชำระเงินและทำธุรกรรมให้เสร็จสมบูรณ์
เมื่อลูกค้าให้สิทธิ์การชำระเงินเรียบร้อยแล้ว เมธอด show()
จะแสดงผลลัพธ์เป็น PaymentResponse
ออบเจ็กต์ PaymentResponse
มีข้อมูลต่อไปนี้
- รายละเอียดผลการชำระเงิน
- ที่อยู่สำหรับจัดส่ง
- ตัวเลือกการจัดส่ง
- ข้อมูลติดต่อ
เมื่อถึงจุดนี้ UI ของเบราว์เซอร์อาจยังแสดงตัวบ่งชี้การโหลดอยู่ ซึ่งหมายความว่าธุรกรรมยังไม่เสร็จสมบูรณ์
หากแอปการชำระเงินสิ้นสุดลงเนื่องจากการชำระเงินไม่สำเร็จหรือมีข้อผิดพลาด Promise ที่แสดงผลจาก show()
จะปฏิเสธ และเบราว์เซอร์จะสิ้นสุดธุรกรรมการชำระเงิน
การประมวลผลและตรวจสอบการชำระเงิน
details
ใน PaymentResponse
คือออบเจ็กต์ข้อมูลเข้าสู่ระบบการชำระเงินที่แสดงผลจากแอปการชำระเงิน ผู้ขายสามารถใช้ข้อมูลเข้าสู่ระบบดังกล่าวเพื่อประมวลผลหรือตรวจสอบการชำระเงิน วิธีการทํางานของกระบวนการสําคัญนี้ขึ้นอยู่กับตัวแฮนเดิลการชําระเงิน
การทำธุรกรรมให้เสร็จสมบูรณ์หรือลองอีกครั้ง
หลังจากพิจารณาว่าธุรกรรมสำเร็จหรือไม่ ผู้ขายจะทำอย่างใดอย่างหนึ่งต่อไปนี้ได้
- เรียกใช้เมธอด
.complete()
เพื่อทำธุรกรรมให้เสร็จสมบูรณ์และปิดตัวบ่งชี้การโหลด - ให้ลูกค้าลองอีกครั้งโดยเรียกใช้เมธอด
retry()
async function doPaymentRequest() {
try {
const request = new PaymentRequest(methodData, details, options);
const response = await request.show();
await validateResponse(response);
} catch (err) {
// AbortError, SecurityError
console.error(err);
}
}
async function validateResponse(response) {
try {
const errors = await checkAllValuesAreGood(response);
if (errors.length) {
await response.retry(errors);
return validateResponse(response);
}
await response.complete("success");
} catch (err) {
// Something went wrong…
await response.complete("fail");
}
}
// Must be called as a result of a click
// or some explicit user action.
doPaymentRequest();
ขั้นตอนถัดไป
- ดูวิธีประกาศตัวระบุวิธีการชำระเงินโดยละเอียดในการตั้งค่าวิธีการชำระเงิน
- ดูวิธีสร้างแอปการชำระเงินสำหรับแพลตฟอร์มที่เฉพาะเจาะจงในคู่มือนักพัฒนาแอปการชำระเงิน Android
- ดูวิธีสร้างแอปการชำระเงินบนเว็บในคำแนะนำสำหรับนักพัฒนาแอปการชำระเงินบนเว็บ