แพลตฟอร์ม WhatsApp Business
แพลตฟอร์ม WhatsApp Business
Business Messaging
WhatsApp Business Platform
แหล่งข้อมูล
The content on this page has been translated from English into another language using AI. The AI translated content may contain errors, omissions, or unintended meanings. Since AI translated language may be inaccurate or unclear, you may refer to the original source content in English for this page to review the intended guidance.

รับชำระเงินผ่านเกตเวย์การชำระเงินบน WhatsApp

Updated: 21 พ.ค. 2026
ธุรกิจของคุณสามารถเปิดให้ลูกค้าชำระเงินสำหรับคำสั่งซื้อผ่านเกตเวย์การชำระเงินของพาร์ทเนอร์ของเราได้โดยไม่ต้องออกจาก WhatsApp ธุรกิจสามารถส่งข้อความ order_details ไปยังลูกค้า จากนั้นรับการแจ้งเตือนเกี่ยวกับอัพเดตสถานะการชำระเงินผ่านการแจ้งเตือน Webhook ได้

ภาพรวม

ปัจจุบัน ลูกค้าเลือกดูแค็ตตาล็อกของธุรกิจ หยิบสินค้าใส่รถเข็น และส่งคำสั่งซื้อโดยใช้ชุดโซลูชั่นการส่งข้อความเชิงพาณิชย์ของเรา ซึ่งประกอบด้วยข้อความที่มีสินค้ารายการเดียว ข้อความที่มีสินค้าหลายรายการ และหน้ารายละเอียดสินค้า แต่ในปัจจุบัน ธุรกิจต่างๆ สามารถใช้ API การชำระเงินเพื่อส่งใบเรียกเก็บเงินให้ลูกค้าได้ ซึ่งลูกค้าก็จะสามารถดำเนินการสั่งซื้อให้เสร็จสมบูรณ์ได้ด้วยการชำระเงินแก่ธุรกิจโดยไม่ต้องออกจาก WhatsApp
ขณะนี้โซลูชั่นการชำระเงินของเราได้รับการสนับสนุนโดย BillDesk, Razorpay, PayU และ Zaakpay ซึ่งเป็นผู้ให้บริการด้านการชำระเงินภายนอก คุณต้องมีบัญชี BillDesk, Razorpay, PayU หรือ Zaakpay เพื่อรับการชำระเงินบน WhatsApp
เราคาดว่าจะมีผู้ให้บริการด้านการชำระเงินเพิ่มขึ้นในอนาคต

วิธีการทำงาน

ขั้นแรก ธุรกิจจะเขียนและส่งข้อความ order_details ข้อความ order_details คือข้อความ interactive ประเภทใหม่ ซึ่งมีองค์ประกอบหลัก 4 อย่างที่เหมือนกัน ได้แก่ ส่วนหัว, เนื้อความ, ส่วนท้าย และการดำเนินการ ภายในองค์ประกอบ action ธุรกิจจะต้องระบุข้อมูลทั้งหมดที่ลูกค้าจำเป็นต้องใช้ในการดำเนินการชำระเงินให้เสร็จสมบูรณ์
โดยข้อความ order_details แต่ละรายการจะมี ID reference_id ที่ไม่ซ้ำกันซึ่งธุรกิจเป็นผู้จัดเตรียมให้ และหมายเลขนั้นจะใช้ตลอดทั้งขั้นตอนในการติดตามคำสั่งซื้อ
เมื่อส่งข้อความแล้ว ธุรกิจจะรอการอัพเดตสถานะการชำระเงินผ่าน Webhooks ธุรกิจจะได้รับการแจ้งเตือนเมื่อสถานะการชำระเงินเปลี่ยนแปลงไป แต่ธุรกิจไม่ควรพึ่งพาการแจ้งเตือน Webhooks เพียงอย่างเดียวเนื่องด้วยเหตุผลด้านความปลอดภัย นอกจากนี้ WhatsApp ยังมี API การค้นหาการชำระเงินซึ่งสามารถใช้เพื่อเรียกดูสถานะการชำระเงินได้โดยตรงตลอดเวลา

ขั้นตอนการซื้อในแอพ

ในแอพ WhatsApp Messenger ของลูกค้า ขั้นตอนการซื้อจะมีลักษณะดังนี้
  1. ลูกค้าส่งคำสั่งซื้อพร้อมรายการสินค้าที่เลือกให้กับธุรกิจผ่านทางข้อความ SMS ทั่วไปหรือใช้ข้อความแบบอินเทอร์แอคทีฟอื่นๆ เช่น ข้อความที่มีสินค้ารายการเดียว, ข้อความที่มีสินค้าหลายรายการ และรายละเอียดสินค้า
  2. เมื่อธุรกิจได้รับคำสั่งซื้อแล้ว ธุรกิจจะส่งข้อความ order_details ไปยังผู้ใช้ เมื่อผู้ใช้แตะ "ตรวจสอบและชำระเงิน" ผู้ใช้จะเห็นรายละเอียดเกี่ยวกับคำสั่งซื้อและยอดรวมที่ต้องชำระ
  3. เมื่อผู้ใช้แตะปุ่ม "ดำเนินการต่อ" ผู้ใช้จะเลือกชำระเงินบน WhatsApp เลยหรือในแอพ UPI อื่นๆ ก็ได้

    ชำระเงินด้วย WhatsApp Pay:


    ชำระเงินในแอพ UPI อื่นๆ:
  4. เมื่อการชำระเงินได้รับการยืนยันจากเกตเวย์การชำระเงิน (PG) หรือผู้ให้บริการด้านการชำระเงินแล้ว ธุรกิจจะสามารถเริ่มดำเนินการตามคำสั่งซื้อได้
  5. จากนั้น ธุรกิจจะสามารถส่งข้อความ order_status ไปยังผู้บริโภคเพื่อแจ้งให้ทราบเกี่ยวกับสถานะคำสั่งซื้อได้ โดยแต่ละข้อความจะแสดงเป็นบับเบิลข้อความ (ดังที่แสดงด้านล่าง) ซึ่งหมายถึงข้อความรายละเอียดคำสั่งซื้อเดิม และยังเป็นการอัพเดตสถานะที่แสดงในหน้ารายละเอียดคำสั่งซื้ออีกด้วย
หากต้องการรับการชำระเงินบน WhatsApp คุณต้องเพิ่มการกำหนดค่าการชำระเงินไปยังบัญชี WhatsApp Business ที่เกี่ยวข้อง การกำหนดค่าการชำระเงินช่วยให้คุณสามารถลิงก์บัญชีเกตเวย์การชำระเงินกับ WhatsApp ได้ การกำหนดค่าการชำระเงินแต่ละรายการจะเชื่อมโยงกับชื่อที่ไม่ซ้ำกัน คุณสามารถระบุการกำหนดค่าการชำระเงินเพื่อใช้สำหรับการชำระเงินแบบเฉพาะเจาะจงได้ โดยเป็นส่วนหนึ่งของข้อความ order_details จากนั้น WhatsApp จะสร้างขั้นตอนการชำระเงินโดยใช้บัญชีเกตเวย์การชำระเงินที่เชื่อมโยงไว้
หลังจากที่ลิงก์บัญชีพาร์ทเนอร์การชำระเงินแล้ว คุณต้องผสานการทำงานกับ API การชำระเงินตามด้านล่าง ซึ่งจะช่วยให้คุณสามารถส่งข้อความ order_details ไปยังลูกค้าพร้อมการกำหนดค่าการชำระเงินเพื่อรับการชำระเงินได้
หมายเหตุ: ตรวจสอบให้แน่ใจว่าไม่มีการส่งข้อความคำสั่งซื้อใหม่ที่ขอให้ผู้บริโภคชำระเงินโดยใช้การกำหนดค่าการชำระเงินที่คุณพยายามจะลบก่อนที่จะดำเนินการยกเลิกการเชื่อมโยง

ขั้นตอนการผสานการทำงาน

ขั้นตอนที่แสดงอยู่ด้านล่างนี้เขียนขึ้นโดยถือว่าธุรกิจรู้แล้วว่าผู้ใช้สนใจอะไรผ่านเธรดแชทก่อนหน้านี้ API การชำระเงินเป็น API แบบสแตนด์อโลน และสามารถทำงานร่วมกับข้อความต่างๆ เช่น ข้อความแบบรายการ ปุ่มตอบกลับ ข้อความที่มีสินค้ารายการเดียวหรือหลายรายการ

แผนภาพลำดับ

แผนภาพลำดับขั้นตอนต่อไปนี้แสดงกระบวนการผสานการทำงานโดยทั่วไปสำหรับ API การชำระเงิน ขั้นตอนที่ไฮไลท์เป็นสีเขียวคือขั้นตอนการผสานการทำงานหลัก

ขั้นตอนที่ 1: ส่งข้อความแบบอินเทอร์แอคทีฟที่มีรายละเอียดคำสั่งซื้อ

หากต้องการส่งข้อความ order_details ธุรกิจต้องรวบรวมอ็อบเจ็กต์แบบอินเทอร์แอคทีฟที่มีประเภทเป็น order_details พร้อมองค์ประกอบต่อไปนี้
อ็อบเจ็กต์ คำอธิบาย
type
อ็อบเจ็กต์
จำเป็นต้องระบุ
ต้องเป็น "order_details"
header
อ็อบเจ็กต์
ระบุหรือไม่ก็ได้
เนื้อหาส่วนหัวที่แสดงอยู่ด้านบนข้อความ หากไม่ได้ระบุส่วนหัวไว้ API จะใช้รูปภาพของสินค้ารายการแรกที่มีอยู่เป็นส่วนหัว
body
อ็อบเจ็กต์
จำเป็นต้องระบุ
อ็อบเจ็กต์ที่มีเนื้อหาของข้อความ อ็อบเจ็กต์นี้ประกอบด้วยช่องต่อไปนี้
สตริง text
  • จำเป็นต้องระบุ หากมี body เนื้อหาของข้อความ ระบบรองรับอีโมจิและมาร์กดาวน์ มีความยาวได้สูงสุด 1,024 ตัวอักษร
footer
อ็อบเจ็กต์
ระบุหรือไม่ก็ได้
อ็อบเจ็กต์ที่มีส่วนท้ายของข้อความ อ็อบเจ็กต์นี้ประกอบด้วยช่องต่อไปนี้
สตริง text
  • จำเป็นต้องระบุ หากมี footer เนื้อหาส่วนท้าย ระบบรองรับอีโมจิ มาร์กดาวน์ และลิงก์ มีความยาวได้สูงสุด 60 ตัวอักษร
action
อ็อบเจ็กต์
จำเป็นต้องระบุ
อ็อบเจ็กต์การดำเนินการที่คุณต้องการให้ผู้ใช้ทำหลังจากอ่านข้อความ อ็อบเจ็กต์การดำเนินการนี้ประกอบด้วยช่องต่อไปนี้
สตริง name
  • จำเป็นต้องระบุ ต้องเป็น “review_and_pay”
อ็อบเจ็กต์ parameters

อ็อบเจ็กต์พารามิเตอร์

อ็อบเจ็กต์ คำอธิบาย
reference_id
สตริง
จำเป็นต้องระบุ
ตัวระบุที่ไม่ซ้ำกันสำหรับคำสั่งซื้อหรือใบเรียกเก็บเงินที่ธุรกิจระบุ โดยจะต้องตรงตามตัวพิมพ์เล็กหรือพิมพ์ใหญ่และไม่สามารถเว้นว่างได้ และมีได้เฉพาะตัวอักษรภาษาอังกฤษ, ตัวเลข, ขีดล่าง, ขีดกลาง หรือจุดเท่านั้น และควรมีตัวอักษรไม่เกิน 35 ตัว
reference_id ต้องไม่ซ้ำกันสำหรับแต่ละข้อความ order_details ของธุรกิจนั้นๆ หากจำเป็นต้องส่งข้อความ order_details หลายรายการสำหรับคำสั่งซื้อเดียวกัน ขอแนะนำให้ใส่หมายเลขลำดับใน reference_id (ตัวอย่างเช่น "BM345A-12") เพื่อให้แน่ใจว่า reference_id นั้นไม่ซ้ำกัน
type
อ็อบเจ็กต์
จำเป็นต้องระบุ
ประเภทสินค้าที่ชำระเงินในคำสั่งซื้อนี้ ตัวเลือกที่รองรับในปัจจุบันคือ digital-goods และ physical-goods
beneficiaries
อาร์เรย์
ต้องระบุสำหรับสินค้าที่จับต้องได้ที่มีการจัดส่ง
อาร์เรย์ของผู้รับผลประโยชน์สำหรับคำสั่งซื้อนี้ ผู้รับผลประโยชน์คือผู้รับที่กำหนดไว้สำหรับการจัดส่งสินค้าที่จับต้องได้ตามคำสั่งซื้อนั้นๆ ซึ่งประกอบด้วยช่องต่อไปนี้
หมายเหตุ: ข้อมูลผู้รับผลประโยชน์จะไม่แสดงให้ผู้ใช้เห็น แต่ต้องระบุเนื่องด้วยเหตุผลทางกฎหมายและการปฏิบัติตามข้อกำหนด
สตริง name
  • จำเป็นต้องระบุ ชื่อของบุคคลหรือธุรกิจที่ได้รับสินค้าที่จับต้องได้ ต้องมีความยาวไม่เกิน 200 ตัวอักษร
สตริง address_line1
  • จำเป็นต้องระบุ ที่อยู่ในการจัดส่ง (เลขที่/เลขที่อาคาร ชื่อถนน ฯลฯ) ต้องมีความยาวไม่เกิน 100 ตัวอักษร
สตริง address_line2
  • ระบุหรือไม่ก็ได้ ที่อยู่ในการจัดส่ง (จุดสังเกต พื้นที่ ฯลฯ) ต้องมีความยาวไม่เกิน 100 ตัวอักษร
สตริง city
  • จำเป็นต้องระบุ ชื่อเมือง
สตริง state
  • จำเป็นต้องระบุ ชื่อรัฐ
สตริง country
  • จำเป็นต้องระบุ ต้องเป็น “India”
สตริง postal_code
  • จำเป็นต้องระบุ รหัสไปรษณีย์ 6 หลักของที่อยู่ในการจัดส่ง
currency
จำเป็นต้องระบุ
สกุลเงินสำหรับคำสั่งซื้อนี้ ขณะนี้รองรับเฉพาะค่า INR เท่านั้น
total_amount
อ็อบเจ็กต์
จำเป็นต้องระบุ
อ็อบเจ็กต์ total_amount ประกอบด้วยช่องต่อไปนี้
จำนวนเต็ม offset
  • จำเป็นต้องระบุ ต้องเป็น 100 สำหรับ INR
จำนวนเต็ม value
  • จำเป็นต้องระบุ จำนวนเต็มบวกที่แสดงถึงค่าของจำนวนซึ่งคูณด้วยจำนวนชดเชย ตัวอย่างเช่น ₹12.34 จะมีค่าเป็น 1234
total_amount.value ต้องเท่ากับ order.subtotal.value + order.tax.value + order.shipping.value - order.discount.value
ธุรกรรม UPI มีขีดจำกัดอยู่ที่ ₹5,00,000 สำหรับจำนวนเงินที่สูงกว่านั้น ให้ตั้งค่า enabled_payment_options เป็น ["web"] โปรดดูการจำกัดตัวเลือกการชำระเงินที่มี
payment_settings
อ็อบเจ็กต์
จำเป็นต้องระบุ
order
อ็อบเจ็กต์
จำเป็นต้องระบุ
ดูข้อมูลเพิ่มเติมที่อ็อบเจ็กต์คำสั่งซื้อ

อ็อบเจ็กต์การตั้งค่าการชำระเงิน

อ็อบเจ็กต์ คำอธิบาย
type
สตริง
จำเป็นต้องระบุ
ต้องตั้งค่าเป็น "payment_gateway"
payment_gateway
อ็อบเจ็กต์
จำเป็นต้องระบุ
อ็อบเจ็กต์ที่อธิบายข้อมูลบัญชีการชำระเงิน:
สตริง type
  • จำเป็นต้องระบุ ตัวระบุที่ไม่ซ้ำกันสำหรับรายการในคำสั่งซื้อ คุณต้องตั้งค่าเป็น “billdesk” หรือ “razorpay” หรือ “payu” หรือ zaakpay หากคุณได้เชื่อมโยงเกตเวย์การชำระเงินของ BillDesk หรือ Razorpay หรือ PayU หรือ Zaakpay ไว้เพื่อรับการชำระเงิน
สตริง configuration_name
  • จำเป็นต้องระบุ ชื่อของการกำหนดค่าการชำระเงินที่กำหนดค่าไว้ล่วงหน้าเพื่อใช้สำหรับคำสั่งซื้อนี้ และต้องมีความยาวไม่เกิน 60 ตัวอักษร ค่านี้ต้องตรงกับการกำหนดค่าการชำระเงินที่ตั้งค่าไว้ในตัวจัดการ WhatsApp Business
เมื่อ configuration_name ไม่ถูกต้อง ลูกค้าจะไม่สามารถชำระเงินสำหรับคำสั่งซื้อของตนได้ เราขอแนะนำเป็นอย่างยิ่งให้ธุรกิจทำการทดสอบการตั้งค่านี้อย่างทั่วถึงในระหว่างขั้นตอนการผสานการทำงาน
อ็อบเจ็กต์ billdesk/razorpay/payu/zaakpay
  • ระบุหรือไม่ก็ได้ สำหรับผู้ค้า/พาร์ทเนอร์ที่ต้องการใช้ช่อง additional_info1/7 (สำหรับ BillDesk), ช่อง notes และ receipt (สำหรับ Razorpay) และช่อง UDF (สำหรับ PayU) และช่อง extra1/2 (สำหรับ Zaakpay) ผู้ค้า/พาร์ทเนอร์จะสามารถส่งค่าเหล่านี้ในข้อความรายละเอียดคำสั่งซื้อได้แล้ว และเราจะใช้ค่าเหล่านี้เพื่อสร้างธุรกรรม/คำสั่งซื้อที่ PG ที่เกี่ยวข้อง
โปรดดูข้อมูลเพิ่มเติมที่อ็อบเจ็กต์ UDF เฉพาะเกตเวย์การชำระเงิน

ช่อง BillDesk, RazorPay, PayU และ Zaakpay

ขณะนี้เรามีการรองรับสำหรับพาร์ทเนอร์และผู้ค้าในการส่งผ่านช่อง notes, receipt และ udf ในข้อความรายละเอียดคำสั่งซื้อ และรับข้อมูลนี้กลับไปยังสัญญาณการชำระเงินแล้ว เราจะมาดูผู้ขายที่สามารถส่งผ่านช่อง additional_info สำหรับ BillDesk, ช่อง notes และ receipt สำหรับ Razorpay, ช่อง udf สำหรับ PayU, ช่อง extra สำหรับ Zaakpay PG ได้กัน
อ็อบเจ็กต์ คำอธิบาย
notes
อ็อบเจ็กต์
ระบุหรือไม่ก็ได้
  • รองรับเฉพาะเกตเวย์การชำระเงินของ Razorpay เท่านั้น
อ็อบเจ็กต์สามารถเป็นคู่คีย์-ค่าได้ โดยมีคีย์ได้สูงสุด 15 รายการและแต่ละค่ามีตัวอักษรได้ไม่เกิน 256 ตัว
receipt
สตริง
ระบุหรือไม่ก็ได้
  • รองรับเฉพาะเกตเวย์การชำระเงินของ Razorpay เท่านั้น
หมายเลขใบเสร็จที่สอดคล้องกับคำสั่งซื้อนี้ ซึ่งตั้งไว้สำหรับการอ้างอิงภายในของคุณ รองรับความยาวไม่เกิน 40 ตัวอักษรและต้องมีตัวอักษรมากกว่า 0 ตัว
udf1-4
สตริง
ระบุหรือไม่ก็ได้
  • รองรับเฉพาะเกตเวย์การชำระเงินของ PayU เท่านั้น
ช่องที่ผู้ใช้กำหนด (udf) ใช้เพื่อจัดเก็บข้อมูลใดๆ ที่เกี่ยวข้องกับคำสั่งซื้อบางรายการ ช่อง UDF แต่ละช่องมีจำนวนตัวอักษรได้สูงสุด 255 ตัว
extra1-2
สตริง
ระบุหรือไม่ก็ได้
  • รองรับเฉพาะเกตเวย์การชำระเงินของ Zaakpay เท่านั้น
ช่องที่ผู้ใช้กำหนด (เพิ่มเติม) ใช้เพื่อจัดเก็บข้อมูลใดๆ ที่เกี่ยวข้องกับคำสั่งซื้อบางรายการ ช่องเพิ่มเติมแต่ละช่องมีจำนวนตัวอักษรได้สูงสุด 180 ตัว
additional_info1-7
สตริง
ระบุหรือไม่ก็ได้
  • รองรับเฉพาะเกตเวย์การชำระเงินของ BillDesk เท่านั้น
ช่องที่ผู้ใช้กำหนด (เพิ่มเติม) ใช้เพื่อจัดเก็บข้อมูลใดๆ ที่เกี่ยวข้องกับคำสั่งซื้อบางรายการ ช่องเพิ่มเติมแต่ละช่องมีจำนวนตัวอักษรได้สูงสุด 120 ตัว

อ็อบเจ็กต์คำสั่งซื้อ

อ็อบเจ็กต์ คำอธิบาย
status
สตริง
จำเป็นต้องระบุ
ค่าที่รองรับในข้อความ order_details คือ pending เท่านั้น
ในข้อความ order_statusstatus อาจเป็น pending, captured หรือ failed
สตริง type
ระบุหรือไม่ก็ได้
รองรับเฉพาะค่า quick_pay เท่านั้น เมื่อส่งช่องนี้ เราจะซ่อนปุ่ม "ตรวจสอบและชำระเงิน" และแสดงเฉพาะปุ่ม "ชำระเงินเลย" ในบับเบิลรายละเอียดคำสั่งซื้อเท่านั้น
items
อ็อบเจ็กต์
จำเป็นต้องระบุ
อ็อบเจ็กต์ที่มีรายการสินค้าสำหรับคำสั่งซื้อนี้ โดยมีช่องต่อไปนี้
สตริง retailer_id
  • ระบุหรือไม่ก็ได้ ID เนื้อหาของสินค้าในคำสั่งซื้อจากแค็ตตาล็อกของคุณ
สตริง name
  • จำเป็นต้องระบุ ชื่อของสินค้าที่จะแสดงให้ผู้ใช้เห็น ต้องมีความยาวไม่เกิน 60 ตัวอักษร
อ็อบเจ็กต์ image
การใช้ช่องรูปภาพนี้จะจำกัดอาร์เรย์สินค้าให้มีสินค้าได้สูงสุด 10 รายการ และไม่สามารถใช้กับ retailer_id หรือ catalog_id ได้
อ็อบเจ็กต์จำนวน amount ที่มีค่าและจำนวนชดเชย ดูช่องจำนวนทั้งหมดด้านบน
  • จำเป็นต้องระบุ ราคาสินค้าต่อชิ้น
อ็อบเจ็กต์จำนวน sale_amount
  • ระบุหรือไม่ก็ได้ ราคาส่วนลดสินค้าต่อชิ้น จำนวนนี้ควรน้อยกว่าจำนวนตั้งต้น หากระบุข้อมูลไว้ ฟิลด์นี้จะใช้คำนวณยอดรวมย่อย
จำนวนเต็ม quantity
  • จำเป็นต้องระบุ จำนวนสินค้าในคำสั่งซื้อนี้ ช่องนี้ต้องเป็นจำนวนเต็มและไม่สามารถเป็นทศนิยมได้
สตริง country_of_origin
  • ต้องระบุ หากไม่มี catalog_id ประเทศต้นทางของสินค้า
สตริง importer_name
  • ต้องระบุ หากไม่มี catalog_id ชื่อบริษัทผู้นำเข้า
สตริง importer_adress
  • ต้องระบุ หากไม่มี catalog_id ที่อยู่ของบริษัทผู้นำเข้า
subtotal
อ็อบเจ็กต์
จำเป็นต้องระบุ
ค่าต้องเท่ากับผลรวมของ order.amount.value * order.amount.quantity โปรดอ่านคำอธิบายของช่อง offset และ value ในคำอธิบายของ total_amount
ช่องต่อไปนี้เป็นส่วนหนึ่งของอ็อบเจ็กต์ subtotal
จำนวนเต็ม offset
  • จำเป็นต้องระบุ ต้องเป็น 100 สำหรับ INR
จำนวนเต็ม value
  • จำเป็นต้องระบุ จำนวนเต็มบวกที่แสดงถึงค่าของจำนวนซึ่งคูณด้วยจำนวนชดเชย ตัวอย่างเช่น ₹12.34 จะมีค่าเป็น 1234
tax
อ็อบเจ็กต์
จำเป็นต้องระบุ
ข้อมูลภาษีสำหรับคำสั่งซื้อนี้ ซึ่งประกอบด้วยช่องต่อไปนี้
จำนวนเต็ม offset
  • จำเป็นต้องระบุ ต้องเป็น 100 สำหรับ INR
จำนวนเต็ม value
  • จำเป็นต้องระบุ จำนวนเต็มบวกที่แสดงถึงค่าของจำนวนซึ่งคูณด้วยจำนวนชดเชย ตัวอย่างเช่น ₹12.34 จะมีค่าเป็น 1234
สตริง description
  • ระบุหรือไม่ก็ได้ มีความยาวได้สูงสุด 60 ตัวอักษร
shipping
อ็อบเจ็กต์
ระบุหรือไม่ก็ได้
ค่าจัดส่งของคำสั่งซื้อ อ็อบเจ็กต์นี้ประกอบด้วยช่องต่อไปนี้
จำนวนเต็ม offset
  • จำเป็นต้องระบุ ต้องเป็น 100 สำหรับ INR
จำนวนเต็ม value
  • จำเป็นต้องระบุ จำนวนเต็มบวกที่แสดงถึงค่าของจำนวนซึ่งคูณด้วยจำนวนชดเชย ตัวอย่างเช่น ₹12.34 จะมีค่าเป็น 1234
สตริง description
  • ระบุหรือไม่ก็ได้ มีความยาวได้สูงสุด 60 ตัวอักษร
discount
อ็อบเจ็กต์
ระบุหรือไม่ก็ได้
ส่วนลดสำหรับคำสั่งซื้อ อ็อบเจ็กต์นี้ประกอบด้วยช่องต่อไปนี้
จำนวนเต็ม offset
  • จำเป็นต้องระบุ ต้องเป็น 100 สำหรับ INR
จำนวนเต็ม value
  • จำเป็นต้องระบุ จำนวนเต็มบวกที่แสดงถึงค่าของจำนวนซึ่งคูณด้วยจำนวนชดเชย ตัวอย่างเช่น ₹12.34 จะมีค่าเป็น 1234
สตริง description
  • ระบุหรือไม่ก็ได้ มีความยาวได้สูงสุด 60 ตัวอักษร
สตริง discount_program_name
  • ระบุหรือไม่ก็ได้ ข้อความที่ใช้ในการกำหนดคำสั่งซื้อที่มีรางวัลจูงใจ หากคำสั่งซื้อที่มีรางวัลจูงใจ ผู้ค้าจะต้องระบุข้อมูลนี้ มีความยาวได้สูงสุด 60 ตัวอักษร
catalog_id
อ็อบเจ็กต์
ระบุหรือไม่ก็ได้
ตัวระบุที่ไม่ซ้ำกันของแค็ตตาล็อก Facebook ที่ธุรกิจใช้งานอยู่
หากคุณไม่ได้ระบุช่องนี้ คุณต้องระบุช่องต่อไปนี้ภายในอ็อบเจ็กต์สินค้า: country_of_origin, importer_name และ importer_address
expiration
อ็อบเจ็กต์
ระบุหรือไม่ก็ได้
วันหมดอายุสำหรับคำสั่งซื้อนั้น ธุรกิจต้องกำหนดช่องต่อไปนี้ภายในอ็อบเจ็กต์นี้
สตริง timestamp คือประทับเวลา UTC ในหน่วยวินาทีของเวลาที่คำสั่งซื้อควรหมดอายุ เกณฑ์ขั้นต่ำคือ 300 วินาที
สตริง description คือข้อความอธิบายการหมดอายุ มีความยาวได้สูงสุด 120 ตัวอักษร

อ็อบเจ็กต์รูปภาพสินค้า

อ็อบเจ็กต์ คำอธิบาย
สตริง link
จำเป็นต้องระบุ ลิงก์ไปยังรูปภาพที่จะแสดงให้ผู้ใช้เห็น ต้องเป็น image/jpeg หรือ image/png และ 8 บิต, RGB หรือ RGBA เป็นไปตามข้อกำหนดเดียวกันกับรูปภาพในสื่อ
ค่า parameters เป็นอ็อบเจ็กต์ JSON ที่แปลงเป็นสตริง
เมื่อเสร็จสิ้น อ็อบเจ็กต์แบบอินเทอร์แอคทีฟควรจะมีลักษณะดังนี้สำหรับการผสานการทำงานแบบอิงตามแค็ตตาล็อกของ BillDesk
{
  "interactive": {
    "type": "order_details",
    "header": {
      "type": "image",
      "image": {
        "link": "http(s)://the-url",
        "provider": {
          "name": "provider-name"
        }
      }
    },
    "body": {
      "text": "your-text-body-content"
    },
    "footer": {
      "text": "your-text-footer-content"
    },
    "action": {
      "name": "review_and_pay",
      "parameters": {
        "reference_id": "reference-id-value",
        "type": "digital-goods",
        "payment_settings": [
          {
            "type": "payment_gateway",
            "payment_gateway": {
              "type": "billdesk",
              "configuration_name": "payment-config-id",
              "billdesk": {
                "additional_info1": "additional_info1-value",
                "additional_info2": "additional_info2-value",
                "additional_info3": "additional_info3-value",
                "additional_info4": "additional_info4-value",
                "additional_info5": "additional_info5-value",
                "additional_info6": "additional_info6-value",
                "additional_info7": "additional_info7-value"
              }
            }
          }
        ],
        "currency": "INR",
        "total_amount": {
          "value": 21000,
          "offset": 100
        },
        "order": {
          "status": "pending",
          "catalog_id": "the-catalog_id",
          "expiration": {
            "timestamp": "utc_timestamp_in_seconds",
            "description": "cancellation-explanation"
          },
          "items": [
            {
              "retailer_id": "1234567",
              "name": "Product name, for example bread",
              "amount": {
                "value": 10000,
                "offset": 100
              },
              "quantity": 1,
              "sale_amount": {
                "value": 100,
                "offset": 100
              }
            }
          ],
          "subtotal": {
            "value": 20000,
            "offset": 100
          },
          "tax": {
            "value": 1000,
            "offset": 100,
            "description": "optional_text"
          },
          "shipping": {
            "value": 1000,
            "offset": 100,
            "description": "optional_text"
          },
          "discount": {
            "value": 1000,
            "offset": 100,
            "description": "optional_text",
            "discount_program_name": "optional_text"
          }
        }
      }
    }
  }
}
ค่า parameters เป็นอ็อบเจ็กต์ JSON ที่แปลงเป็นสตริง
เมื่อเสร็จสิ้น อ็อบเจ็กต์แบบอินเทอร์แอคทีฟควรจะมีลักษณะดังนี้สำหรับการผสานการทำงานแบบอิงตามแค็ตตาล็อกของ RazorPay
{
  "interactive": {
    "type": "order_details",
    "header": {
      "type": "image",
      "image": {
        "link": "http(s)://the-url",
        "provider": {
          "name": "provider-name"
        }
      }
    },
    "body": {
      "text": "your-text-body-content"
    },
    "footer": {
      "text": "your-text-footer-content"
    },
    "action": {
      "name": "review_and_pay",
      "parameters": {
        "reference_id": "reference-id-value",
        "type": "digital-goods",
        "payment_settings": [
          {
            "type": "payment_gateway",
            "payment_gateway": {
              "type": "razorpay",
              "configuration_name": "payment-config-id",
              "razorpay": {
                "receipt": "receipt-value",
                "notes": {
                  "key1": "value1"
                }
              }
            }
          }
        ],
        "currency": "INR",
        "total_amount": {
          "value": 21000,
          "offset": 100
        },
        "order": {
          "status": "pending",
          "catalog_id": "the-catalog_id",
          "expiration": {
            "timestamp": "utc_timestamp_in_seconds",
            "description": "cancellation-explanation"
          },
          "items": [
            {
              "retailer_id": "1234567",
              "name": "Product name, for example bread",
              "amount": {
                "value": 10000,
                "offset": 100
              },
              "quantity": 1,
              "sale_amount": {
                "value": 100,
                "offset": 100
              }
            }
          ],
          "subtotal": {
            "value": 20000,
            "offset": 100
          },
          "tax": {
            "value": 1000,
            "offset": 100,
            "description": "optional_text"
          },
          "shipping": {
            "value": 1000,
            "offset": 100,
            "description": "optional_text"
          },
          "discount": {
            "value": 1000,
            "offset": 100,
            "description": "optional_text",
            "discount_program_name": "optional_text"
          }
        }
      }
    }
  }
}
ค่า parameters เป็นอ็อบเจ็กต์ JSON ที่แปลงเป็นสตริง
สำหรับการผสานการทำงานที่ไม่อิงตามแค็ตตาล็อกของ PayU กล่าวคือ เมื่อไม่มี ID แค็ตตาล็อก ตัวอย่างเพย์โหลดจะมีลักษณะดังนี้
{
  "interactive": {
    "type": "order_details",
    "header": {
      "type": "image",
      "image": {
        "link": "your-media-url-link"
      }
    },
    "body": {
      "text": "your-text-body-content"
    },
    "footer": {
      "text": "your-text-footer-content"
    },
    "action": {
      "name": "review_and_pay",
      "parameters": {
        "reference_id": "reference-id-value",
        "type": "digital-goods",
        "payment_settings": [
          {
            "type": "payment_gateway",
            "payment_gateway": {
              "type": "payu",
              "configuration_name": "payment-config-id",
              "payu": {
                "udf1": "value1",
                "udf2": "value2",
                "udf3": "value3",
                "udf4": "value4"
              }
            }
          }
        ],
        "currency": "INR",
        "total_amount": {
          "value": 21000,
          "offset": 100
        },
        "order": {
          "status": "pending",
          "expiration": {
            "timestamp": "utc_timestamp_in_seconds",
            "description": "cancellation-explanation"
          },
          "items": [
            {
              "name": "Product name, for example bread",
              "amount": {
                "value": 10000,
                "offset": 100
              },
              "quantity": 1,
              "sale_amount": {
                "value": 100,
                "offset": 100
              },
              "country_of_origin": "country-of-origin",
              "importer_name": "name-of-importer-business",
              "importer_address": {
                "address_line1": "B8/733 nand nagri",
                "address_line2": "police station",
                "city": "East Delhi",
                "zone_code": "DL",
                "postal_code": "110093",
                "country_code": "IN"
              }
            },
            {
              "name": "Product name, for example bread",
              "amount": {
                "value": 10000,
                "offset": 100
              },
              "quantity": 1,
              "sale_amount": {
                "value": 100,
                "offset": 100
              },
              "country_of_origin": "country-of-origin",
              "importer_name": "name-of-importer-business",
              "importer_address": {
                "address_line1": "B8/733 nand nagri",
                "address_line2": "police station",
                "city": "East Delhi",
                "zone_code": "DL",
                "postal_code": "110093",
                "country_code": "IN"
              }
            }
          ],
          "subtotal": {
            "value": 20000,
            "offset": 100
          },
          "tax": {
            "value": 1000,
            "offset": 100,
            "description": "optional_text"
          },
          "shipping": {
            "value": 1000,
            "offset": 100,
            "description": "optional_text"
          },
          "discount": {
            "value": 1000,
            "offset": 100,
            "description": "optional_text",
            "discount_program_name": "optional_text"
          }
        }
      }
    }
  }
}
สำหรับการผสานการทำงานที่ไม่อิงตามแค็ตตาล็อกของ Zaakpay กล่าวคือ เมื่อไม่มี ID แค็ตตาล็อก ตัวอย่างเพย์โหลดจะมีลักษณะดังนี้
{
  "interactive": {
    "type": "order_details",
    "header": {
      "type": "image",
      "image": {
        "link": "your-media-url-link"
      }
    },
    "body": {
      "text": "your-text-body-content"
    },
    "footer": {
      "text": "your-text-footer-content"
    },
    "action": {
      "name": "review_and_pay",
      "parameters": {
        "reference_id": "reference-id-value",
        "type": "digital-goods",
        "payment_settings": [
          {
            "type": "payment_gateway",
            "payment_gateway": {
              "type": "zaakpay",
              "configuration_name": "payment-config-id",
              "zaakpay": {
                "extra1": "value1",
                "extra2": "value2"
              }
            }
          }
        ],
        "currency": "INR",
        "total_amount": {
          "value": 21000,
          "offset": 100
        },
        "order": {
          "status": "pending",
          "expiration": {
            "timestamp": "utc_timestamp_in_seconds",
            "description": "cancellation-explanation"
          },
          "items": [
            {
              "name": "Product name, for example bread",
              "amount": {
                "value": 10000,
                "offset": 100
              },
              "quantity": 1,
              "sale_amount": {
                "value": 100,
                "offset": 100
              },
              "country_of_origin": "country-of-origin",
              "importer_name": "name-of-importer-business",
              "importer_address": {
                "address_line1": "B8/733 nand nagri",
                "address_line2": "police station",
                "city": "East Delhi",
                "zone_code": "DL",
                "postal_code": "110093",
                "country_code": "IN"
              }
            },
            {
              "name": "Product name, for example bread",
              "amount": {
                "value": 10000,
                "offset": 100
              },
              "quantity": 1,
              "sale_amount": {
                "value": 100,
                "offset": 100
              },
              "country_of_origin": "country-of-origin",
              "importer_name": "name-of-importer-business",
              "importer_address": {
                "address_line1": "B8/733 nand nagri",
                "address_line2": "police station",
                "city": "East Delhi",
                "zone_code": "DL",
                "postal_code": "110093",
                "country_code": "IN"
              }
            }
          ],
          "subtotal": {
            "value": 20000,
            "offset": 100
          },
          "tax": {
            "value": 1000,
            "offset": 100,
            "description": "optional_text"
          },
          "shipping": {
            "value": 1000,
            "offset": 100,
            "description": "optional_text"
          },
          "discount": {
            "value": 1000,
            "offset": 100,
            "description": "optional_text",
            "discount_program_name": "optional_text"
          }
        }
      }
    }
  }
}

ขั้นตอนที่ 2: เพิ่มพารามิเตอร์ข้อความทั่วไป

เมื่ออ็อบเจ็กต์แบบอินเทอร์แอคทีฟสมบูรณ์ ให้นำพารามิเตอร์อื่นๆ ที่ประกอบขึ้นเป็นข้อความ ได้แก่ recipient_type, to และ type มาต่อท้าย โปรดอย่าลืมตั้งค่า type เป็น interactive
{
   "messaging_product": "whatsapp",
   "recipient_type": "individual",
   "to": "PHONE_NUMBER",
   "type": "interactive",
   "interactive": {
     // interactive object here
   }
 }

ขั้นตอนที่ 3: สร้างการเรียกใช้ POST ไปยังตำแหน่งข้อมูลของข้อความ

เรียกใช้ POST ไปยังตำแหน่งข้อมูล /[PHONE_NUMBER_ID]/messages พร้อมอ็อบเจ็กต์ JSON ที่คุณรวบรวมไว้ หากส่งข้อความสำเร็จ คุณจะได้รับการตอบกลับต่อไปนี้
{
  "messaging_product": "whatsapp",
  "contacts": [ {
      "input": "[PHONE_NUMBER_ID]",
      "wa_id": "[PHONE_NUMBER_ID]"
  } ],
  "messages": [ {
      "id": "wamid.HBgLMTY1MDUwNzY1MjAVAgARGBI5QTNDQTVCM0Q0Q0Q2RTY3RTcA"
  } ]
}
โปรดดูข้อผิดพลาดทั้งหมดที่ระบบสามารถส่งคืนได้และคำแนะนำเกี่ยวกับวิธีจัดการข้อผิดพลาดที่รหัสข้อผิดพลาดของ API ระบบคลาวด์ของ WhatsApp

ประสบการณ์ด้านผลิตภัณฑ์

ลูกค้าจะได้รับข้อความ order_details ที่คล้ายกับข้อความด้านล่าง (ด้านซ้าย) เมื่อลูกค้าคลิกที่ "ตรวจสอบและชำระเงิน" หน้าจอรายละเอียดคำสั่งซื้อจะเปิดขึ้นมา ดังที่แสดงไว้ด้านล่าง (ตรงกลาง) จากนั้น ลูกค้าจะสามารถชำระเงินสำหรับคำสั่งซื้อของตนได้โดยใช้ปุ่ม "ดำเนินการต่อ" ซึ่งจะเปิดชีตด้านล่างที่มีตัวเลือกการชำระเงิน (ด้านขวา)
Image
Image
Image

ขั้นตอนที่ 4: รับ Webhook เกี่ยวกับสถานะธุรกรรม

ธุรกิจจะได้รับการอัพเดตผ่าน Webhooks ข้อความ เมื่อธุรกรรมที่เริ่มโดยผู้ใช้มีการเปลี่ยนแปลงสถานะเป็นประเภท “payment” ซึ่งประกอบด้วยช่องต่อไปนี้
อ็อบเจ็กต์ คำอธิบาย
id
สตริง
จำเป็นต้องระบุ
ID Webhook สำหรับการแจ้งเตือน
recipient_id
สตริง
จำเป็นต้องระบุ
ID WhatsApp ของลูกค้า
type
สตริง
จำเป็นต้องระบุ
สำหรับ Webhooks การอัพเดตสถานะการชำระเงิน ประเภทจะเป็น “payment”
status
สตริง
จำเป็นต้องระบุ
captured/pending: captured แสดงเมื่อการชำระเงินเสร็จสมบูรณ์แล้ว ส่วน pending จะแสดงเมื่อผู้ใช้พยายามชำระเงินแต่ยังไม่ได้รับสัญญาณการทำธุรกรรมที่สำเร็จ
payment
อ็อบเจ็กต์
จำเป็นต้องระบุ
ประกอบด้วยช่องต่อไปนี้
สตริง reference_id
  • ID อ้างอิงที่ไม่ซ้ำกันสำหรับคำสั่งซื้อที่ส่งไปในข้อความ order_details
    อ็อบเจ็กต์ amount
  • มีช่องค่าและจำนวนชดเชยที่สอดคล้องกับยอดรวมที่ผู้ใช้ได้ชำระ
    สตริง currency
  • สกุลเงินจะเป็น INR เสมอ
    อ็อบเจ็กต์ transaction คือความพยายามทำธุรกรรมสำหรับการชำระเงินนี้ อ็อบเจ็กต์ธุรกรรมประกอบด้วยช่องต่อไปนี้
  • สตริง idต้องระบุ ID คำสั่งซื้อผ่านเกตเวย์การชำระเงินในรูปแบบตัวอักษรคละกับตัวเลข
  • สตริง pg_transaction_idระบุหรือไม่ก็ได้ ID การชำระเงินของเกตเวย์การชำระเงินในรูปแบบตัวอักษรคละกับตัวเลข
  • สตริง typeต้องระบุ ประเภทการชำระเงินสำหรับธุรกรรมนี้ ระบบรองรับเฉพาะ billdesk หรือ razorpay หรือ payu หรือ zaakpay เท่านั้น
  • สตริง statusต้องระบุ สถานะของธุรกรรม โดยอาจเป็น pending หรือ success หรือ failed อย่างใดอย่างหนึ่ง
  • จำนวนเต็ม created_timestampต้องระบุ เวลาที่สร้างธุรกรรมในหน่วยวินาทีแบบ Epoch
  • จำนวนเต็ม updated_timestampต้องระบุ เวลาที่อัพเดตธุรกรรมครั้งล่าสุดในหน่วยวินาทีแบบ Epoch
  • อ็อบเจ็กต์ method (ระบุหรือไม่ก็ได้ ข้อมูลวิธีการชำระเงินอาจไม่พร้อมใช้งานสำหรับการชำระเงินที่ล้มเหลว)
  • สตริง typeต้องระบุ รายการนี้อธิบายถึงประเภทวิธีการชำระเงินที่ผู้บริโภคใช้ในการชำระเงินสำหรับคำสั่งซื้อ โดยอาจเป็น upi หรือ card หรือ wallet หรือ netbanking อย่างใดอย่างหนึ่ง
  • อ็อบเจ็กต์ error รายการ (ระบุหรือไม่ก็ได้ รายละเอียดข้อผิดพลาดเกี่ยวกับการชำระเงินอาจไม่พร้อมใช้งานสำหรับการพยายามชำระเงินทุกรายการ)
  • สตริง codeต้องระบุ รายการนี้อธิบายเหตุผลที่การชำระเงินล้มเหลวซึ่งเกิดจากเกตเวย์การชำระเงิน และ Meta จะแจ้งเหตุผลนี้ให้พาร์ทเนอร์ทราบ
  • สตริง reasonต้องระบุ รายการนี้อธิบายเหตุผลที่การชำระเงินล้มเหลวด้วยข้อความธรรมดาซึ่งเกิดจากเกตเวย์การชำระเงิน และ Meta จะแจ้งเหตุผลนี้ให้พาร์ทเนอร์ทราบ
    สตริง additional_info1-7ระบุหรือไม่ก็ได้
  • ส่งเฉพาะเกตเวย์การชำระเงินของ Billdesk เท่านั้นเมื่อมีการส่งค่าในข้อความรายละเอียดคำสั่งซื้อ คีย์ additional_info1-4 แต่ละคีย์จะมีค่าสตริงอยู่ในคีย์
    อ็อบเจ็กต์ notes ระบุหรือไม่ก็ได้
  • ส่งเฉพาะเกตเวย์การชำระเงินของ RazorPay เท่านั้นเมื่อมีการส่งค่าในข้อความรายละเอียดคำสั่งซื้อ ซึ่งประกอบด้วยคู่คีย์-ค่าตามที่ส่งผ่านไปในข้อความรายละเอียดคำสั่งซื้อ
    สตริง receiptระบุหรือไม่ก็ได้
  • ส่งเฉพาะเกตเวย์การชำระเงินของ RazorPay เท่านั้นเมื่อมีการส่งค่าในข้อความรายละเอียดคำสั่งซื้อ
    สตริง udf1-4ระบุหรือไม่ก็ได้
  • ส่งเฉพาะเกตเวย์การชำระเงินของ Payu เท่านั้นเมื่อมีการส่งค่าในข้อความรายละเอียดคำสั่งซื้อ คีย์แต่ละคีย์จาก udf1-4 จะมีค่าสตริงอยู่ในคีย์

สตริง extra1-2ระบุหรือไม่ก็ได้
  • ส่งเฉพาะเกตเวย์การชำระเงินของ Zaakpay เท่านั้นเมื่อมีการส่งค่าในข้อความรายละเอียดคำสั่งซื้อ คีย์แต่ละคีย์จาก extra1-2 จะมีค่าสตริงอยู่ในคีย์
    อาร์เรย์ refundsระบุหรือไม่ก็ได้
รายการการคืนเงินสำหรับคำสั่งซื้อนี้ อ็อบเจ็กต์การคืนเงินแต่ละรายการจะมีช่องต่อไปนี้
  • สตริง idต้องระบุ ID การคืนเงินในรูปแบบตัวอักษรคละกับตัวเลข
  • อ็อบเจ็กต์ amountต้องระบุ จำนวนเงินทั้งหมดที่คืน
  • สตริง speed_processedต้องระบุ ความเร็วในการประมวลผลการคืนเงิน โดยอาจเป็น instant หรือ normal อย่างใดอย่างหนึ่ง
  • สตริง statusต้องระบุ สถานะของการคืนเงิน โดยอาจเป็น pending, success หรือ failed อย่างใดอย่างหนึ่ง
  • จำนวนเต็ม created_timestampต้องระบุ เวลาที่สร้างการคืนเงินในหน่วยวินาทีแบบ Epoch
  • จำนวนเต็ม updated_timestampต้องระบุ เวลาที่อัพเดตการคืนเงินครั้งล่าสุดในหน่วยวินาทีแบบ Epoch
timestamp
สตริง
จำเป็นต้องระบุ
ประทับเวลาสำหรับ Webhook
ต่อไปนี้คือตัวอย่าง Webhook สถานะของประเภท payment:
{
  "object": "whatsapp_business_account",
  "entry": [{
    "id": "WHATSAPP-BUSINESS-ACCOUNT-ID",
    "changes": [{
      "value": {
         "messaging_product": "whatsapp",
         "metadata": {
           "display_phone_number": "[PHONE_NUMBER]",
           "phone_number_id": "[PHONE_NUMBER_ID]"
         },
         "contacts": [{...}],
         "errors": [{...}],
         "messages": [{...}],
         "statuses": [{
            "id": "gBGGFlB5YjhvAgnhuF1qIUvCo7A",
            "recipient_id": "[PHONE_NUMBER]",
            "type": "payment",
            "status": "[TRANSACTION_STATUS]",
            "payment": {
               "reference_id": "[REFERENCE_ID]",
               "amount": {
                 "value": 21000,
                 "offset": 100
               },
               "transaction": {
                 "id": "[PG-ORDER-ID]",
                 "pg_transaction_id": "[PG-PAYMENT-ID]",
                 "type": "billdesk/razorpay/payu/zaakpay",
                 "status": "success/failed",
                 "created_timestamp": "CREATED_TIMESTAMP",
                 "updated_timestamp": "UPDATED_TIMESTAMP",
                 "method": {
                   "type": "upi/card/netbanking/wallet"
                 },
                 "error": {
                   "code": "pg-generated-error-code",
                   "reason": "pg-generated-descriptive-reason"
                 }
               },
               "currency": "INR",
               "receipt": "receipt-value",
               "notes": {
                 "key1": "value1",
                 "key2": "value2"
               },
               "udf1": "udf1-value",
               "udf2": "udf2-value",
               "udf3": "udf3-value",
               "udf4": "udf4-value",
               "additional_info1": "additional_info1-value",
               "additional_info2": "additional_info2-value",
               "additional_info3": "additional_info3-value",
               "additional_info4": "additional_info4-value",
               "additional_info5": "additional_info5-value",
               "additional_info6": "additional_info6-value",
               "additional_info7": "additional_info7-value",
               "refunds": [{
                 "id": "[REFUND-ID]",
                 "amount": {
                   "value": 100,
                   "offset": 100
                 },
                 "speed_processed": "instant/normal",
                 "status": "success",
                 "created_timestamp": "CREATED_TIMESTAMP",
                 "updated_timestamp": "UPDATED_TIMESTAMP"
              }]
            },
            "timestamp": "notification_timestamp"
         }]
      },
      "field": "messages"
    }]
  }]
}
โปรดดูข้อมูลเพิ่มเติมเกี่ยวกับสถานะอื่นๆ ที่ Webhooks ข้อความ

ขั้นตอนที่ 5: ยืนยันการชำระเงิน

หลังจากได้รับ Webhook สถานะการชำระเงินแล้ว หรือในเวลาที่เหมาะสม ธุรกิจสามารถค้นหาสถานะการชำระเงินสำหรับคำสั่งซื้อได้ หากต้องการทำเช่นนั้น ธุรกิจต้องเรียกใช้ GET ไปยังตำแหน่งข้อมูลการชำระเงินตามที่แสดงไว้ที่นี่
GET <PHONE_NUMBER_ID>/payments/<PAYMENT_CONFIGURATION>/<REFERENCE_ID>
โดยที่ configuration_name และ reference_id เป็นแบบเดียวกับที่ส่งไปในข้อความ order_details
ธุรกิจควรจะได้รับการตอบกลับในเซสชั่น HTTP เดียวกัน (ไม่ได้อยู่ในการแจ้งเตือน Webhook) ซึ่งมีช่องต่อไปนี้
ช่อง คำอธิบาย
reference_id
สตริง
จำเป็นต้องระบุ
ID ที่ธุรกิจส่งมาในข้อความ order_details
status
สตริง
จำเป็นต้องระบุ
สถานะการชำระเงินสำหรับคำสั่งซื้อ อาจเป็น pending หรือ captured อย่างใดอย่างหนึ่ง
โปรดดูความหมายของสถานะเหล่านี้จากตารางด้านล่าง
currency
สตริง
จำเป็นต้องระบุ
สกุลเงินสำหรับการชำระเงินนี้ ขณะนี้รองรับเฉพาะค่า INR เท่านั้น
amount
อ็อบเจ็กต์
จำเป็นต้องระบุ
ยอดรวมสำหรับการชำระเงินนี้ ซึ่งประกอบด้วยช่องต่อไปนี้
จำนวนเต็ม offset
  • จำเป็นต้องระบุ ต้องเป็น 100
จำนวนเต็ม value
  • จำเป็นต้องระบุ จำนวนเต็มบวกที่แสดงถึงค่าของจำนวนซึ่งคูณด้วยจำนวนชดเชย ตัวอย่างเช่น ₹12.34 จะมีค่าเป็น 1234
transactions
อาร์เรย์
ระบุหรือไม่ก็ได้
รายการธุรกรรมสำหรับการชำระเงินนี้ ช่องนี้จะปรากฏเฉพาะเมื่อมีการชำระเงินอย่างน้อย 1 ครั้ง หากสถานะการชำระเงินเป็น pending และไม่มีการชำระเงินเกิดขึ้น ระบบจะไม่ส่งคืนช่องนี้ อ็อบเจ็กต์ธุรกรรมแต่ละรายการจะมีช่องต่อไปนี้
สตริง id
  • จำเป็นต้องระบุ ID คำสั่งซื้อผ่านเกตเวย์การชำระเงินในรูปแบบตัวอักษรคละกับตัวเลข
สตริง pg_transaction_id
  • จำเป็นต้องระบุ ID การชำระเงินของเกตเวย์การชำระเงินในรูปแบบตัวอักษรคละกับตัวเลข
สตริง type
  • จำเป็นต้องระบุ ประเภทการชำระเงินสำหรับธุรกรรมนี้ ระบบรองรับเฉพาะ billdesk หรือ razorpay หรือ payu หรือ zaakpay เท่านั้น
สตริง status
  • จำเป็นต้องระบุ สถานะของธุรกรรม โดยอาจเป็น pending หรือ success หรือ failed อย่างใดอย่างหนึ่ง
ธุรกรรมที่มีสถานะ success จะมีได้เพียงรายการเดียวเท่านั้น
จำนวนเต็ม created_timestamp
  • จำเป็นต้องระบุ เวลาที่สร้างธุรกรรมในหน่วยวินาทีแบบ Epoch
จำนวนเต็ม updated_timestamp
  • จำเป็นต้องระบุ เวลาที่อัพเดตธุรกรรมครั้งล่าสุดในหน่วยวินาทีแบบ Epoch
อ็อบเจ็กต์ method
ระบุหรือไม่ก็ได้ ข้อมูลวิธีการชำระเงินอาจไม่พร้อมใช้งานสำหรับการชำระเงินที่ไม่สำเร็จ
  • สตริง typeต้องระบุ รายการนี้อธิบายถึงประเภทวิธีการชำระเงินที่ผู้บริโภคใช้ในการชำระเงินสำหรับคำสั่งซื้อ โดยอาจเป็น upi หรือ card หรือ wallet หรือ netbanking อย่างใดอย่างหนึ่ง
อ็อบเจ็กต์ error
ระบุหรือไม่ก็ได้ รายละเอียดข้อผิดพลาดเกี่ยวกับการชำระเงินอาจไม่พร้อมใช้งานสำหรับการพยายามชำระเงินทุกครั้ง
  • สตริง codeต้องระบุ รายการนี้อธิบายเหตุผลที่การชำระเงินล้มเหลวซึ่งเกิดจากเกตเวย์การชำระเงิน และ Meta จะแจ้งเหตุผลนี้ให้พาร์ทเนอร์ทราบ
  • สตริง reasonต้องระบุ รายการนี้อธิบายเหตุผลที่การชำระเงินล้มเหลวด้วยข้อความธรรมดาซึ่งเกิดจากเกตเวย์การชำระเงิน และ Meta จะแจ้งเหตุผลนี้ให้พาร์ทเนอร์ทราบ
อาร์เรย์ refunds
ระบุหรือไม่ก็ได้ รายการการคืนเงินสำหรับคำสั่งซื้อนี้ อ็อบเจ็กต์การคืนเงินแต่ละรายการจะมีช่องต่อไปนี้
  • สตริง idต้องระบุ ID การคืนเงินในรูปแบบตัวอักษรคละกับตัวเลข
  • อ็อบเจ็กต์ amountต้องระบุ จำนวนเงินทั้งหมดที่คืน
  • สตริง speed_processedต้องระบุ ความเร็วในการประมวลผลการคืนเงิน โดยอาจเป็น instant หรือ normal อย่างใดอย่างหนึ่ง
  • สตริง statusต้องระบุ สถานะของการคืนเงิน โดยอาจเป็น pending, success หรือ failed อย่างใดอย่างหนึ่ง
  • จำนวนเต็ม created_timestampต้องระบุ เวลาที่สร้างการคืนเงินในหน่วยวินาทีแบบ Epoch
  • จำนวนเต็ม updated_timestampต้องระบุ เวลาที่อัพเดตการคืนเงินครั้งล่าสุดในหน่วยวินาทีแบบ Epoch
additional_info1-7
สตริง
ระบุหรือไม่ก็ได้
รองรับเฉพาะ BillDesk PG ซึ่งมีค่าสตริงที่ส่งเป็นส่วนหนึ่งของข้อความรายละเอียดคำสั่งซื้อ
receipt
สตริง
ระบุหรือไม่ก็ได้
ระบบรองรับเฉพาะ Razorpay PG ซึ่งมีค่าใบเสร็จที่ส่งเป็นส่วนหนึ่งของข้อความรายละเอียดคำสั่งซื้อ
notes
อ็อบเจ็กต์
ระบุหรือไม่ก็ได้
ระบบรองรับเฉพาะ Razorpay PG ซึ่งมีคู่คีย์-ค่าที่ส่งเป็นส่วนหนึ่งของข้อความรายละเอียดคำสั่งซื้อ
udf1-4
สตริง
ระบุหรือไม่ก็ได้
รองรับเฉพาะ PayU PG ซึ่งมีค่าสตริงที่ส่งเป็นส่วนหนึ่งของข้อความรายละเอียดคำสั่งซื้อ
extra1-2
สตริง
ระบุหรือไม่ก็ได้
รองรับเฉพาะ Zaakpay PG ซึ่งมีค่าสตริงที่ส่งเป็นส่วนหนึ่งของข้อความรายละเอียดคำสั่งซื้อ

สถานะการชำระเงิน

สถานะ คำอธิบาย
pending
คำสั่งซื้อถูกสร้างขึ้นแล้วแต่ยังไม่มีการบันทึกการชำระเงิน สถานะนี้จะครอบคลุม 2 สถานการณ์ดังต่อไปนี้
  • ยังไม่มีการพยายามชำระเงิน: อาร์เรย์ transactions จะไม่ปรากฏในการตอบกลับ
  • พยายามชำระเงินแต่ไม่สำเร็จ: อาร์เรย์ transactions จะมีรายการอย่างน้อย 1 รายการโดยตั้งค่า status เป็น failed
captured
บันทึกการชำระเงินสำเร็จแล้ว อาร์เรย์ transactions จะมีรายการหนึ่งที่ตั้งค่า status เป็น success
ตัวอย่างการตอบกลับที่สำเร็จจะมีลักษณะดังนี้
{
  "payments": [{
    "reference_id": "reference-id-value",
    "status": "status-of-payment",
    "currency": "INR",
    "amount": {
      "value": 21000,
      "offset": 100
    },
    "transactions": [
      {
        "id": "[PG-ORDER-ID]",
        "pg_transaction_id": "[PG-TXN-ID]",
        "type": "billdesk/razorpay/payu/zaakpay",
        "status": "success/failed",
        "created_timestamp": "CREATED_TIMESTAMP",
        "updated_timestamp": "UPDATED_TIMESTAMP",
        "method": {
           "type": "upi/card/netbanking/wallet"
        },
        "error": {
           "code": "pg-generated-error-code",
           "reason": "pg-generated-descriptive-reason"
        },
        "refunds": [
          {
            "id": "[REFUND-ID]",
            "amount": {
              "value": 100,
              "offset": 100
            },
            "speed_processed": "instant/normal",
            "status": "success",
            "created_timestamp": "CREATED_TIMESTAMP",
            "updated_timestamp": "UPDATED_TIMESATMP"
          }
        ]
      }
    ],
    "receipt": "receipt-value",
    "notes": {
      "key1": "value1",
      "key2": "value2"
    },
    "udf1": "udf1-value",
    "udf2": "udf2-value",
    "udf3": "udf3-value",
    "udf4": "udf4-value",
    "additional_info1": "additional_info1-value",
    "additional_info2": "additional_info2-value",
    "additional_info3": "additional_info3-value",
    "additional_info4": "additional_info4-value",
    "additional_info5": "additional_info5-value",
    "additional_info6": "additional_info6-value",
    "additional_info7": "additional_info7-value"
  }]
}
ตัวอย่างข้อผิดพลาดทั่วไปมีดังนี้
{
  "errors": [{
    "code": 500,
    "title": "Generic error",
    "details": "System error. Please try again."
  }]
}

การตอบกลับตามระยะการชำระเงิน

เพย์โหลดการตอบกลับจะแตกต่างกันไปตามระยะการชำระเงิน ด้านล่างนี้คือตัวอย่างของแต่ละขั้นตอน
ไม่มีการพยายามชำระเงิน หมายความว่าผู้ใช้ยังไม่ได้พยายามชำระเงิน ระบบจะส่งคืนเฉพาะช่องระดับคำสั่งซื้อเท่านั้น โดยจะไม่มีอาร์เรย์ transactions
{
  "payments": [
    {
      "reference_id": "<your_reference_id>",
      "status": "pending",
      "amount": {
        "offset": 100,
        "value": 1000
      },
      "currency": "INR"
    }
  ]
}
การชำระเงินสำเร็จ หมายความว่าผู้ใช้ดำเนินการชำระเงินเสร็จสมบูรณ์แล้ว และเกตเวย์การชำระเงินยืนยันการจับภาพ อาร์เรย์ transactions ประกอบด้วยธุรกรรมที่สำเร็จพร้อมรายละเอียดวิธีการชำระเงิน
{
  "payments": [
    {
      "reference_id": "<your_reference_id>",
      "status": "captured",
      "amount": {
        "offset": 100,
        "value": 1000
      },
      "currency": "INR",
      "transactions": [
        {
          "id": "<order_id>",
          "pg_transaction_id": "<payment_id>",
          "type": "razorpay",
          "status": "success",
          "created_timestamp": 1772129215,
          "updated_timestamp": 1772129215,
          "amount": {
            "offset": 100,
            "value": 1000
          },
          "order_amount": {
            "offset": 100,
            "value": 1000
          },
          "currency": "INR",
          "method": {
            "type": "upi"
          }
        }
      ]
    }
  ]
}
การชำระเงินไม่สำเร็จ หมายความว่าผู้ใช้พยายามชำระเงินแต่ไม่สำเร็จ สถานะการชำระเงินโดยรวมจะยังคงเป็น pending (คำสั่งซื้อยังคงรอการชำระเงินให้สำเร็จ) แต่อาร์เรย์ transactions จะมีความพยายามที่ล้มเหลวพร้อมรายละเอียดข้อผิดพลาด
{
  "payments": [
    {
      "reference_id": "<your_reference_id>",
      "status": "pending",
      "amount": {
        "offset": 100,
        "value": 1000
      },
      "currency": "INR",
      "transactions": [
        {
          "id": "<order_id>",
          "pg_transaction_id": "<payment_id>",
          "type": "razorpay",
          "status": "failed",
          "created_timestamp": 1772129329,
          "updated_timestamp": 1772129329,
          "amount": {
            "offset": 100,
            "value": 1000
          },
          "order_amount": {
            "offset": 100,
            "value": 1000
          },
          "currency": "INR",
          "method": {
            "type": "upi"
          },
          "error": {
            "code": "BAD_REQUEST_ERROR",
            "reason": "incorrect_pin"
          }
        }
      ]
    }
  ]
}

ขั้นตอนที่ 6: อัพเดตสถานะคำสั่งซื้อ

ธุรกิจต้องส่งอัพเดตคำสั่งซื้อโดยใช้ข้อความ order_status แทนข้อความ SMS เนื่องจากสถานะล่าสุดของคำสั่งซื้อที่แสดงในหน้ารายละเอียดคำสั่งซื้ออิงตาม order_status ข้อความเท่านั้น
หากต้องการแจ้งให้ลูกค้าทราบถึงการอัพเดตคำสั่งซื้อ คุณสามารถส่งข้อความ interactive ที่มีประเภทเป็น order_status ได้ตามที่แสดงด้านล่าง
{
  "recipient_type": "individual",
  "to": "whatsapp-id",
  "type": "interactive",
  "interactive": {
    "type": "order_status",
    "body": {
      "text": "your-text-body-content"
    },
    "action": {
      "name": "review_order",
      "parameters": {
        "reference_id": "reference-id-value",
        "order": {
          "status": "processing | partially_shipped | shipped | completed | canceled",
          "description": "optional-text"
        }
      }
    }
  }
}
ตารางต่อไปนี้จะอธิบายถึงช่องต่างๆ ในข้อความแบบอินเทอร์แอคทีฟ order_status
อ็อบเจ็กต์ คำอธิบาย
type
สตริง
จำเป็นต้องระบุ ต้องเป็น “order_status”
body
อ็อบเจ็กต์
จำเป็นต้องระบุ
อ็อบเจ็กต์ที่มีเนื้อหาของข้อความ อ็อบเจ็กต์นี้ประกอบด้วยช่องต่อไปนี้
สตริง text
  • จำเป็นต้องระบุ หากมี body เนื้อหาของข้อความ ระบบรองรับอีโมจิและมาร์กดาวน์ มีความยาวสูงสุดได้ 1,024 ตัวอักษร
footer
อ็อบเจ็กต์
ระบุหรือไม่ก็ได้
อ็อบเจ็กต์ที่มีส่วนท้ายของข้อความ อ็อบเจ็กต์นี้ประกอบด้วยช่องต่อไปนี้
สตริง text
  • จำเป็นต้องระบุ หากมี footer เนื้อหาส่วนท้าย ระบบรองรับอีโมจิ มาร์กดาวน์ และลิงก์ มีความยาวสูงสุดได้ 60 ตัวอักษร
action
อ็อบเจ็กต์
จำเป็นต้องระบุ
อ็อบเจ็กต์การดำเนินการที่คุณต้องการให้ผู้ใช้ทำหลังจากอ่านข้อความ อ็อบเจ็กต์การดำเนินการนี้ประกอบด้วยช่องต่อไปนี้
สตริง name
  • จำเป็นต้องระบุ ต้องเป็น "review_order"
อ็อบเจ็กต์ parameters

อ็อบเจ็กต์พารามิเตอร์

อ็อบเจ็กต์ parameters ประกอบด้วยช่องต่อไปนี้
ค่า คำอธิบาย
reference_id
สตริง
จำเป็นต้องระบุ
ID ที่ธุรกิจส่งมาในข้อความ order_details
order
อ็อบเจ็กต์
จำเป็นต้องระบุ อ็อบเจ็กต์นี้ประกอบด้วยช่องต่อไปนี้
สตริง status
  • จำเป็นต้องระบุstatus ของคำสั่งซื้อใหม่ ต้องเป็น processing, partially_shipped, shipped, completed, canceled รายการใดรายการหนึ่ง
สตริง description
  • ระบุหรือไม่ก็ได้ ข้อความสำหรับแชร์ข้อมูลที่เกี่ยวข้องกับสถานะใน order_details อาจมีประโยชน์ขณะส่งการยกเลิก มีความยาวได้สูงสุด 120 ตัวอักษร
ข้อความ order_status จะมีข้อผิดพลาดใหม่ 2 รายการซึ่งสรุปไว้ด้านล่าง
รหัสข้อผิดพลาด คำอธิบาย
2046 - การเปลี่ยนสถานะไม่ถูกต้อง
ไม่อนุญาตให้เปลี่ยนสถานะคำสั่งซื้อ
2047 - ไม่สามารถยกเลิกคำสั่งซื้อได้
ไม่สามารถยกเลิกคำสั่งซื้อได้เนื่องจากผู้ใช้ได้ชำระเงินแล้ว

ประสบการณ์ด้านผลิตภัณฑ์

ลูกค้าจะได้รับแต่ละอัพเดต order_status เป็นข้อความแยกในเธรดแชท ซึ่งอ้างอิงถึงข้อความ order_details ต้นฉบับดังที่แสดงด้านล่าง (ด้านซ้าย) หน้ารายละเอียดคำสั่งซื้อจะแสดงสถานะที่ถูกต้องล่าสุดที่แจ้งให้ลูกค้าทราบโดยใช้ข้อความ order_status เหมือนในตัวอย่างด้านล่าง (ด้านขวา)
Image
Image

สถานะคำสั่งซื้อและการเปลี่ยนที่รองรับ

ขณะนี้เรารองรับค่าสถานะคำสั่งซื้อดังต่อไปนี้
ค่า คำอธิบาย
pending
ผู้ใช้ยังไม่ได้ชำระเงินสำเร็จ
processing
การชำระเงินของผู้ใช้ได้รับอนุญาตแล้ว ผู้ค้า/พาร์ทเนอร์กำลังดำเนินการตามคำสั่งซื้อ ให้บริการ ฯลฯ
partially-shipped
ผู้ค้าได้จัดส่งสินค้าตามคำสั่งซื้อแล้วเป็นบางส่วน
shipped
ผู้ค้าได้จัดส่งสินค้าทั้งหมดตามคำสั่งซื้อนี้แล้ว
completed
คำสั่งซื้อเสร็จสมบูรณ์แล้ว และผู้ใช้หรือพาร์ทเนอร์/ผู้ค้าไม่จำเป็นต้องดำเนินการใดๆ เพิ่มเติม
canceled
พาร์ทเนอร์/ผู้ค้าต้องการยกเลิกข้อความ order_details สำหรับคำสั่งซื้อ/ใบเรียกเก็บเงิน การอัพเดตสถานะจะล้มเหลวหากมีการชำระเงิน successful หรือ pending สำหรับข้อความ order_details นี้แล้ว
ระบบจำกัดการเปลี่ยนสถานะคำสั่งซื้อเพื่อความสอดคล้องของประสบการณ์ของผู้บริโภค การเปลี่ยนสถานะที่อนุญาตมีดังต่อไปนี้
  • สถานะเริ่มต้นของคำสั่งซื้อจะเป็น pending เสมอ ซึ่งส่งมาในข้อความ order_details
  • canceled และ completed เป็นสถานะปลายทางและไม่สามารถอัพเดตเป็นสถานะอื่นได้
  • pending สามารถเปลี่ยนเป็นสถานะอื่นๆ ได้ รวมถึง processing, shipped, partially-shipped
  • processing, shipped และ partially-shipped เป็นสถานะที่เท่ากันและสามารถเปลี่ยนไปมาระหว่างกันหรือเปลี่ยนเป็นหนึ่งในสถานะปลายทางได้
Image
เมื่อส่งข้อความ order_status ที่มีการเปลี่ยนสถานะที่ไม่ถูกต้อง คุณจะได้รับ Webhook ข้อผิดพลาดที่มีรหัสข้อผิดพลาด 2046 และข้อความว่า “สถานะคำสั่งซื้อใหม่เปลี่ยนผิดพลาด”

การยกเลิกคำสั่งซื้อ

ตั้งสถานะคำสั่งซื้อเป็น canceled ได้โดยส่งข้อความ order_status ที่มีสถานะ canceled ลูกค้าไม่สามารถชำระเงินสำหรับคำสั่งซื้อที่ถูกยกเลิกได้ ลูกค้าจะได้รับข้อความ order_status และหน้ารายละเอียดคำสั่งซื้อจะอัพเดตเพื่อแสดงให้เห็นว่าคำสั่งซื้อถูกยกเลิกแล้วและลบปุ่ม "ดำเนินการต่อ" ออกแล้ว คุณสามารถระบุหรือไม่ก็ได้ข้อความที่แสดงอยู่ด้านล่าง "ยกเลิกคำสั่งซื้อแล้ว" ในหน้ารายละเอียดคำสั่งซื้อโดยใช้ช่อง description ในข้อความ order_status
คำสั่งซื้อจะสามารถยกเลิกได้ก็ต่อเมื่อผู้ใช้ยังไม่ได้ชำระเงินสำหรับคำสั่งซื้อดังกล่าวเท่านั้น หากผู้ใช้ได้ชำระเงินแล้วและคุณส่งข้อความ order_status ที่มีสถานะ canceled คุณจะได้รับ Webhook ข้อผิดพลาดที่มีรหัสข้อผิดพลาด 2047 และข้อความ "ไม่สามารถเปลี่ยนสถานะคำสั่งซื้อเป็น 'ยกเลิกแล้ว' ได้"

ขั้นตอนที่ 7: ตรวจสอบยอดการชำระเงิน

WhatsApp ไม่รองรับการกระทบยอดการชำระเงิน ธุรกิจควรใช้บัญชีเกตเวย์การชำระเงินเพื่อกระทบยอดการชำระเงินโดยใช้ reference_id ที่ระบุไว้ในข้อความ order_details และ id ของธุรกรรมที่ส่งคืนมาเป็นส่วนหนึ่งของการสืบค้นการค้นหาการชำระเงิน

ขั้นตอนที่ 8: การคืนเงิน

ธุรกิจสามารถเริ่มการคืนเงินสำหรับคำสั่งซื้อได้ โดยธุรกิจต้องเรียกใช้ POST ไปยังตำแหน่งข้อมูล /[PHONE_NUMBER_ID]/payments_refund พร้อมอ็อบเจ็กต์ JSON ต่อไปนี้
{
  "reference_id": "reference-id-value",
  "speed": "normal",
  "payment_config_id": "payment-config-id",
  "amount": {
    "currency": "INR",
    "value": "100",
    "offset": "100"
  }
}
ตารางต่อไปนี้จะอธิบายเกี่ยวกับช่องในอ็อบเจ็กต์คำขอตำแหน่งข้อมูลการคืนเงิน
ช่อง คำอธิบาย
reference_id
สตริง
จำเป็นต้องระบุ
ID อ้างอิงที่ไม่ซ้ำกันสำหรับคำสั่งซื้อที่ส่งไปในข้อความ order_details
speed
สตริง
ระบุหรือไม่ก็ได้
ความเร็วในการประมวลผลการคืนเงิน โดยอาจเป็น instant หรือ normal อย่างใดอย่างหนึ่ง
payment_config_id
สตริง
จำเป็นต้องระบุ
การกำหนดค่าการชำระเงินสำหรับคำสั่งซื้อที่ส่งในข้อความ order_details
amount
อ็อบเจ็กต์
จำเป็นต้องระบุ
อ็อบเจ็กต์ amount ประกอบด้วยช่องต่อไปนี้
สตริง offset
  • จำเป็นต้องระบุ ต้องเป็น 100 สำหรับ INR
สตริง value
  • จำเป็นต้องระบุ จำนวนเต็มบวกที่แสดงถึงค่าของจำนวนซึ่งคูณด้วยจำนวนชดเชย ตัวอย่างเช่น ₹12.34 จะมีค่าเป็น 1234
สตริง currency
  • จำเป็นต้องระบุ สกุลเงินสำหรับการคืนเงินนี้ ขณะนี้รองรับเฉพาะค่า INR เท่านั้น
ธุรกิจควรจะได้รับการตอบกลับในเซสชั่น HTTP เดียวกัน (ไม่ได้อยู่ในการแจ้งเตือน Webhook) ซึ่งมีช่องต่อไปนี้
ช่อง คำอธิบาย
id
สตริง
จำเป็นต้องระบุ
ID ที่ไม่ซ้ำกันซึ่งแสดงถึงการคืนเงินที่เริ่มต้น
status
สตริง
จำเป็นต้องระบุ
สถานะของการคืนเงิน อาจเป็น pendingfailed หรือ completed อย่างใดอย่างหนึ่ง
speed_processed
สตริง
จำเป็นต้องระบุ
ความเร็วในการประมวลผลการคืนเงิน โดยอาจเป็น instant หรือ normal อย่างใดอย่างหนึ่ง PG เป็นผู้ตัดสินขั้นสูงสุดว่าจะคืนเงินโหมดความเร็วใด ซึ่งอาจไม่ตรงกับพารามิเตอร์ที่มีในคำขอเสมอไป
ตัวอย่างการตอบกลับที่สำเร็จจะมีลักษณะดังนี้
{
  "id": "refund-id",
  "status": "pending",
  "speed_processed": "normal"
}

วิธีการชำระเงินของ UPI ที่ผู้ค้าแนะนำ

ขณะนี้ผู้ค้าสามารถระบุแอพการชำระเงิน UPI ได้สูงสุด 1 แอพเพื่อแสดงในขั้นตอนการชำระเงิน แอพชำระเงินที่ผู้ค้าแนะนำจะแสดงอยู่ด้านบนสุดของรายการแอพ UPI ที่ใช้งานได้ในหน้าจอ "เลือกวิธีการชำระเงิน" ในการเปิดใช้งานความสามารถนี้ เรากำหนดให้พาร์ทเนอร์ระบุ ID ของแอพภายนอกในข้อความรายละเอียดคำสั่งซื้อหรือใบเรียกเก็บเงินคำสั่งซื้อ
หมายเหตุ: ฟีเจอร์นี้มีให้ใช้งานในแอพสำหรับผู้บริโภคในเวอร์ชั่น 2.24.21.0 ขึ้นไป

การอัพเดตเพย์โหลดรายละเอียดคำสั่งซื้อ

{
  "messaging_product": "whatsapp",
  "interactive": {
    "action": {
      "name": "review_and_pay",
      "parameters": {
        "payment_settings": [
           {
             "type": "payment_gateway",
             "payment_gateway": {
               "preferred_payment_methods": [
                 {
                   "method": "Application-ID"
                 }
               ]
             }
           }

        ],
      "order": ..
      }
    }
  }
}

รายชื่อแอพที่รองรับ:

แอพพลิเคชั่น UPI ID แอพพลิเคชั่นที่จะส่งต่อในเพย์โหลดรายละเอียดคำสั่งซื้อ
Google Pay
gpay
PhonePe
phonepe
PayTm
paytm
BHIM
bhim
Amazon Pay
amazonpay
CRED
cred
Mobikwik
mobikwik

จำกัดตัวเลือกการชำระเงินที่มี

ผู้ขายสามารถระบุได้ว่าจะแสดงตัวเลือกการชำระเงินใดในขั้นตอนการชำระเงินระหว่างตัวเลือก UPI และเว็บ การดำเนินการนี้จะช่วยให้ผู้ค้าสามารถเปิดใช้งานเฉพาะ UPI หรือบัตรเครดิต (ตัวเลือก PG ที่มีอยู่ทั้งหมด) เพื่อรับการชำระเงินสำหรับใบเรียกเก็บเงินได้
ธุรกรรม UPI มีขีดจำกัดอยู่ที่ ₹5,00,000 หากเป็นจำนวนเงินที่สูงกว่านั้น ให้ตั้งค่า enabled_payment_options เป็น ["web"] เพื่อใช้การชำระเงินผ่านเว็บของเกตเวย์การชำระเงินของคุณ การชำระเงินที่เปิดใช้งาน UPI ที่เกินขีดจำกัดนี้จะดำเนินการไม่สำเร็จ
หมายเหตุ: ฟีเจอร์นี้มีให้ใช้งานในแอพสำหรับผู้บริโภคในเวอร์ชั่น 2.24.22.4 ขึ้นไป

การอัพเดตเพย์โหลดรายละเอียดคำสั่งซื้อ

{
  "messaging_product": "whatsapp",
  "interactive": {
    "action": {
      "name": "review_and_pay",
      "parameters": {
        "payment_settings": [
           {
             "type": "payment_gateway",
             "payment_gateway": {
                "enabled_payment_options": ["upi"/"web"]
             }
           }
        ],
      "order": ...
      }
    }
  }
}

รายการตัวเลือกการชำระเงิน

ตัวเลือกที่เปิดใช้งาน ประสบการณ์ในขั้นตอนการชำระเงิน
upi
เฉพาะแอพ UPI เท่านั้นที่จะแสดงในขั้นตอนการชำระเงิน
เว็บ
โหลดเว็บเพจเกตเวย์การชำระเงินแล้ว และตัวเลือกการชำระเงินที่กำหนดค่าไว้ในบัญชีเกตเวย์การชำระเงินของผู้ขายจะแสดงขึ้นในขั้นตอนการชำระเงิน
เกตเวย์การชำระเงินบางรายการจะอนุญาตให้ปรับแต่งตัวเลือกการชำระเงินที่แสดงในลิงก์การชำระเงินหรือขั้นตอนการชำระเงินบนเว็บได้ โปรดติดต่อเกตเวย์การชำระเงินเพื่อจำกัดตัวเลือกการชำระเงินในลิงก์การชำระเงินหรือเว็บเพจ

การตรวจสอบความถูกต้องจากภายนอกด้วย Razorpay และ PayU Payment Gateways

ขณะนี้ เรารองรับ TPV สำหรับผู้ค้าบน RazorPay และ PayU ซึ่งจะช่วยให้ผู้ค้าสามารถระบุบัญชีของผู้บริโภคที่ต้องชำระเงินสำหรับคำสั่งซื้อได้ เนื่องจากข้อมูลบัญชีธนาคารของผู้บริโภคเป็นข้อมูลที่มีความละเอียดอ่อน โปรดร่วมมือกับเกตเวย์การชำระเงินเพื่อจัดหาคีย์การเข้ารหัสแบบสาธารณะและส่งต่อข้อมูลการเข้ารหัสโดยเป็นส่วนหนึ่งของข้อความรายละเอียดคำสั่งซื้อ
หากต้องการใช้ฟีเจอร์นี้ซึ่งอยู่ระหว่างการทดสอบอัลฟ่า โปรดติดต่อทีมการชำระเงินของ Meta ที่ whatsappindia-bizpayments-support@meta.com

การอัพเดตเพย์โหลดรายละเอียดคำสั่งซื้อเพื่อรองรับ TPV สำหรับผู้ค้าบน Razorpay

{
  "messaging_product": "whatsapp",
  "interactive": {
    "action": {
      "name": "review_and_pay",
      "parameters": {
        "payment_settings": [
          {
            "type": "razorpay",
            "razorpay": {
              "encrypted_payment_gateway_data": "encrypted-data"
            }
          }
        ],
        "order": {}
      }
    }
  }
}
ค่าดิบก่อนการเข้ารหัสควรจะมีลักษณะดังนี้
{
  "bank_account": {
    "account_number": "account-no",
    "name": "consumer-cbs-name",
    "ifsc": "ifsc-code"
  }
}

การอัพเดตเพย์โหลดรายละเอียดคำสั่งซื้อเพื่อรองรับ TPV สำหรับผู้ค้า PayU

{
  "messaging_product": "whatsapp",
  "interactive": {
    "action": {
      "name": "review_and_pay",
      "parameters": {
        "payment_settings": [
          {
            "type": "payu",
            "payu": {
              "encrypted_payment_gateway_data": "encrypted-data"
            }
          }
        ],
        "order": {}
      }
    }
  }
}
ค่าดิบก่อนเข้ารหัสควรจะมีลักษณะดังนี้
{
  "beneficiaryDetail" : {
    "beneficiaryAccountNumber" : "account_number1|account_number2",
    "ifscCode" : "ifsc1|ifsc2"
  }
}
หมายเหตุ โปรดร่วมมือกับทีม Meta และทีมเกตเวย์การชำระเงิน (RazorPay หรือ PayU) อย่างใกล้ชิดเพื่อปลดล็อกฟีเจอร์นี้ เนื่องจากเรายังคงอยู่ในช่วงการทดสอบอัลฟ่า

ข้อควรพิจารณาด้านการรักษาความปลอดภัย

ธุรกิจต่างๆ ควรปฏิบัติตามข้อกำหนดด้านการรักษาความปลอดภัยและข้อบังคับในท้องถิ่นของประเทศอินเดีย ธุรกิจไม่ควรดูสถานะของธุรกรรมที่ระบุไว้ใน Webhook เพียงอย่างเดียว และต้องใช้ API การค้นหาการชำระเงินเพื่อดึงข้อมูลสถานะจาก WhatsApp โดยตรง ธุรกิจต้องตัดกรอง/ตรวจสอบความถูกต้องของข้อมูลในการตอบกลับ API หรือ Webhook อยู่เสมอเพื่อป้องกันการโจมตี SSRF

รายการตรวจสอบสำหรับผู้ขายที่ผสานการทำงาน

  • ตรวจสอบให้แน่ใจว่าระบบได้ส่งข้อความ order_status ถึงผู้บริโภคเพื่อแจ้งให้ทราบเกี่ยวกับการอัพเดตคำสั่งซื้อหลังจากได้รับการอัพเดตธุรกรรมสำหรับคำสั่งซื้อ
  • ตรวจสอบให้แน่ใจว่าผู้ค้าได้รับการตรวจสอบยืนยันแล้ว และผู้ติดต่อของ WABA มีเครื่องหมายถูกที่แสดงว่าได้รับการตรวจสอบยืนยันแล้วกำกับอยู่
  • ตรวจสอบยืนยันว่า WABA ได้รับการแมปกับระดับการส่งข้อความที่เริ่มโดยผู้ค้าอย่างเหมาะสม (1,000, 10,000 และ 100,000 รายการต่อวัน)
  • ผู้ค้าควรระบุข้อมูลฝ่ายสนับสนุนลูกค้าในหน้าจอโปรไฟล์ในกรณีที่ผู้บริโภคต้องการรายงานปัญหา
  • ย้ายไปยัง “payment_settings” แทน “payment_type” และ “payment_configuration” นี่คือวิธีที่แนะนำ และจะให้สิทธิ์การเข้าถึงฟีเจอร์ต่างๆ เช่น ช่อง "notes" และ "udf" ตัวอย่างเช่น ดูเพย์โหลดด้านบน
หน้านี้มีประโยชน์กับคุณหรือไม่
ไอคอนยกนิ้วโป้ง
ไอคอนคว่ำนิ้วโป้ง