อาลีเพย์ (หน้าร้าน)

ยกระดับโปรแกรมขายหน้าร้าน (ระบบ POS) ให้สามารถสแกนคิวอาร์โค้ดและเชื่อมต่อเข้ากับระบบของโอมิเซะ เพื่อรองรับการรับชำระเงินผ่านอาลีเพย์ด้วย Barcode wallet API

ภาพประกอบด้านล่างนี้ อธิบายถึงกระบวนการทำงานของระบบสำหรับการรับชำระเงินผ่านอาลีเพย์ โดยแสดงปฏิสัมพันธ์ที่เกิดขึ้นระหว่าง ผู้ซื้อ, ร้านค้า, โอมิเซะ และอาลีเพย์

Flow

ขั้นตอนการชำระเงิน

  1. เมื่อต้องการชำระเงินผู้ซื้อจะเปิดแอปพลิเคชันอาลีเพย์
  2. เลือกที่เมนู "ชำระเงิน" และระบบจะสร้างบาร์โค้ด เพื่อให้ผู้ซื้อแสดงต่อแคชเชียร์
  3. แคชเชียร์จะทำการสแกนบาร์โค้ด
  4. เซิร์ฟเวอร์ของร้านค้าจะสร้างรายการรับชำระเงิน โดยส่งคำสั่งไปที่ Charge API
  5. ร้านค้าจะได้รับสถานะรายการตอบกลับ แสดงเป็น กำลังดำเนินการ
  6. ในบางกรณี ผู้ซื้ออาจต้องยืนยันการทำรายการในแอปพลิเคชัน
  7. เซิร์ฟเวอร์ของทางร้านค้าจะสามารถรับสถานะรายการล่าสุดของรายการโดยส่งคำสั่งไปยัง Charge API
  8. สถานะรายการแสดงเป็น สำเร็จ หมายถึงรายการรับชำระเงินนั้นสำเร็จแล้ว และยอดชำระถูกส่งเข้าบัญชีโอมิเซะของทางร้านค้า
  9. สถานะรายการแสดงเป็น ไม่สำเร็จ หมายถึงเกิดข้อขัดข้องอย่างใดอย่างหนึ่ง:
    1. รายการเกินเวลาที่กำหนด - หากยังคงต้องการรับชำระเงิน แจ้งผู้ซื้อให้สร้างบาร์โค้ดอีกครั้ง
    2. วงเงินไม่เพียงพอสำหรับทำรายการ - ผู้ซื้อจะต้องเพิ่มวงเงินในบัญชีอาลีเพย์ หรือเลือกชำระเงินผ่านช่องทางอื่นๆ

* ระบบจะมีการส่ง webhook (POST) ไปยังเซิร์ฟเวอร์ของร้านค้าเมื่อมีการอัพเดตสถานะรายการ (สถานะเป็น สำเร็จ หรือ ไม่สำเร็จ)

สร้างรายการรับชำระเงิน

เช่นเดียวกันกับการสร้างรายการรับชำระเงินผ่านบัตร รายการรับชำระเงินผ่านอาลีเพย์จะต้องเรียกใช้ Charge API

การสร้างรายการรับชำระเงินสามารถทำได้ 2 วิธี

1. สร้าง source ของรายการก่อน แล้วจึงนำ source ที่ได้รับไปสร้างรายการรับชำระ

1.1 สร้างรายการรับชำระเงินโดยส่งเป็น POST request ไปยัง /sources

curl https://api.omise.co/sources \
  -X POST \
  -u skey_xxxxxxxxxxxxxx: \
  -d "description=barcode alipay charge" \
  -d "amount=2225" \
  -d "currency=thb" \
  -d "type=barcode_alipay" \
  -d "barcode=1234567890" \
  -d "store_id=store_1" \
  -d "store_name=store 1" \
  -d "terminal_id=POS-01"

ตัวอย่างการตอบกลับที่ร้านค้าจะได้รับ

{
    "object": "source",
    "id": "src_test_5atzxwlghyr2jydh33h",
    "livemode": false,
    "location": "/sources/src_test_5atzxwlghyr2jydh33h",
    "type": "barcode_alipay",
    "flow": "offline",
    "amount": 2225,
    "currency": "thb",
    "barcode": "1234567890",
    "store_id": "store_1",
    "store_name": "store 1",
    "terminal_id": "POS-01"
}

1.2 สร้างรายการด้วย source id (ตัวอย่าง source id src_test_5atzxwlghyr2jydh33h) ซึ่งได้รับจากขั้นตอนข้างต้น

curl https://api.omise.co/charges \
  -X POST \
  -u skey_xxxxxxxxxxxxxx: \
  -d "description=barcode alipay charge" \
  -d "amount=2225" \
  -d "currency=thb" \
  -d "source=src_test_5atzxwlghyr2jydh33h"

2. สร้างรายการรับชำระเงินโดยส่งคำสั่งครั้งเดียว

{
  "amount": "2225",
  "currency": "thb",
  "description": "a barcode alipay charge",
  "source": {
     "type": "barcode_alipay",
     "barcode": "1234567890",
     "store_id": "store_1",
     "store_name": "store 1",
     "terminal_id": "POS-01"
  },
  "metadata": {
   "invoice_id": "inv-1234567890"
  }
}

การสร้างรายการรับชำระเงินทั้ง 2 วิธีนี้จะได้ผลลัพธ์เดียวกัน

{
    "object": "charge",
    "id": "chrg_test_5au1dtnsoc7noi31yab",
    "livemode": false,
    "location": "/charges/chrg_test_5au1dtnsoc7noi31yab",
    "amount": 2225,
    "currency": "thb",
    "description": "a barcode alipay charge",
    "metadata": {
        "invoice_id": "inv-1234567890"
    },
    "status": "pending",
    "capture": true,
    "authorized": false,
    "reversed": false,
    "paid": false,
    "transaction": null,
    "refunded": 0,
    "refunds": {
        "object": "list",
        "from": "1970-01-01T00:00:00Z",
        "to": "2018-02-02T11:53:15Z",
        "offset": 0,
        "limit": 20,
        "total": 0,
        "order": null,
        "location": "/charges/chrg_test_5au1dtnsoc7noi31yab/refunds",
        "data": []
    },
    "return_uri": null,
    "reference": null,
    "authorize_uri": null,
    "failure_code": null,
    "failure_message": null,
    "card": null,
    "customer": null,
    "ip": null,
    "dispute": null,
    "created": "2018-02-02T11:53:15Z",
    "source": {
        "object": "source",
        "id": "src_test_5atzxwlghyr2jydh33h",
        "references": {
            "expires_at": "2018-02-03T11:53:15Z"
        },
        "type": "barcode_alipay",
        "flow": "offline",
        "amount": 2225,
        "currency": "thb"
    }
}

การตรวจสอบสถานะรายการ

ตามที่ได้ชี้แจ้งข้างต้นแล้วว่าในเบื้องต้นสถานะรายการรับชำระเงินจะแสดงเป็น "กำลังดำเนินการ" เสมอ เพื่ออัพเดตสถานะรายการให้เป็นปัจจุบัน ร้านค้าสามารถส่งคำสั่ง GET ไปยัง charge API

เมื่อสถานะของรายการเปลี่ยนเป็น สำเร็จ หรือ ไม่สำเร็จ โอมิเซะจะส่ง webhook (POST) ไปยังเซอร์เวอร์ของทางร้านค้า

อ่านรายละเอียดเพื่มเติมเกี่ยวกับ webhook ได้ที่นี่

การคืนเงิน

การคืนเงินสามารถทำได้ภายใน 12 เดือนนับจากวันทำรายการ โดยสามารถเลือกคืนเงินเต็มจำนวน หรือคืนเพียงบางส่วน

รหัสข้อขัดข้อง

รหัสข้อขัดข้อง รายละเอียดข้อขัดข้อง
insufficient_balance ยอดคงเหลือในบัญชีผู้ชำระไม่เพียงพอสำหรับทำรายการ
timeout ผู้ซื้อไม่ยืนยันรายการภายในเวลาที่กำหนด
failed_processing ทำรายการไม่สำเร็จโดยมีสาเหตุมาจากเหตุผลอื่นๆ
payment_rejected รายการถูกปฏิเสธโดยอาลีเพย์

หมายเหตุ

- ในเบื้องต้น อาลีเพย์จะรองรับเฉพาะร้านค้าที่ลงทะเบียนใช้งานในประเทศไทยเท่านั้น

- สำหรับร้านค้าที่มีอยู่ในโหมดใช้งานจริง (live account) อยู่แล้ว และมีความประสงค์จะเปิดใช้งานอาลีเพย์ กรุณาส่งอีเมล์ถึงทีมงานของเราที่ support@omise.co