อะไรคือ Webhooks ผมไม่ใช้ก็ตัดเงินได้ปกตินี่ครับ

webhook
thai
dashboard

#1

ผมเห็นหลาย post แนะนำให้ใช้ Webhooks อย่าง post นี้ ก็แนะนำ

ผมลองอ่านใน เอกสาร เค้าบอกว่า

Webhooks เป็น HTTP POST ที่คอยแจ้งเตือนความเคลื่อนไหวทั้งหมดที่เกิดขึ้นกับบัญชี Omise ของคุณไม่ว่าจะจาก API หรือบน dashboard ข้อมูลที่ระบบแจ้งเตือนจะถูกส่งจากเซิร์ฟเวอร์ของ Omise มายัง url ที่คุณได้ตั้งไว้ (สามารถเปลี่ยน url ได้ทุกเมื่อ)

นอกจากนี้ยังสามารถกำหนด url ที่ต่างกันได้สำหรับการใช้งานบน test mode และ live mode ส่วนข้อมูลที่ได้รับแจ้งเตือนทั้งหมดจะอยู่ในหัวข้อ “Events” บน dashboard หรือจะเรียกจาก API ก็ได้เช่นกัน

อ่านแล้วก็ไม่เข้าใจครับ มันคือการที่ server ของ omise มาเปิดเว็บผม แล้วส่ง event มากับ URL หรอครับ?


หลังจากไปหน้าให้เลือกว่า Success หรือ Failure จะรับค่ามันยังไงครับ omise-js, charge-api
#2

Webhook

Webhook ก็เป็น HTTP POST ธรรมดาครับ (เหมือนการ submit form ปกติ) โดยทาง Omise จะเรียกไปให้อัตโนมัติเมื่อมีเหตุการณ์ต่าง ๆ เช่น

  • charge.create: Charge has been created
  • charge.update: Charge has been updated
  • charge.capture: Charge has been captured (only for manual capture)
  • dispute.create: Dispute has been opened
  • dispute.update: Dispute has been updated
  • dispute.close: Dispute has been closed
  • etc.

สามารถดูรายการทั้งหมดได้ที่ เอกสารนี้

ทางร้านค้าสามารถกำหนดได้ว่าจะให้ Omise เรียกไปที่ url อะไร โดยกำหนดได้ที่หน้า
dashboard > webhooks ที่สมัครเอาไว้ (ดูขั้นตอนละเอียดได้ที่ เอกสารวิธีทดสอบ web hook)

ข้อมูลที่ส่งไปจะมีข้อมูลประมาณนี้

{
  "object": "event",
  "id": "evnt_test_56vp5pfwjf1fqjn4ryy",
  "livemode": false,
  "location": "/events/evnt_test_56vp5pfwjf1fqjn4ryy",
  "key": "charge.create",
  "created": "2017-02-03T13:52:54Z",
  "data": {
    "object": "charge",
    "id": "chrg_test_56vp5pdrw28e2sgyr51",
    "livemode": false,
    "location": "/charges/chrg_test_56vp5pdrw28e2sgyr51",
    "amount": 100000,
    "currency": "jpy",
    "description": "Charge for order 3947",
    "status": "successful",
    "capture": true,
    "authorized": true,
    "reversed": false,
    "paid": true,
    "transaction": "trxn_test_56vp5pfhp4tv1o8xp85",
    "source_of_fund": "card",
    "refunded": 0,
    "refunds": {
      "object": "list",
      "from": "1970-01-01T00:00:00+00:00",
      "to": "2017-02-03T13:52:54+00:00",
      "offset": 0,
      "limit": 20,
      "total": 0,
      "order": null,
      "location": "/charges/chrg_test_56vp5pdrw28e2sgyr51/refunds",
      "data": [

      ]
    },
    "return_uri": "http://www.example.com/orders/3947/complete",
    "offsite": null,
    "reference": "paym_test_56vp5pe0wpv1c02a2vg",
    "authorize_uri": "https://api.omise.co/payments/paym_test_56vp5pe0wpv1c02a2vg/authorize",
    "failure_code": null,
    "failure_message": null,
    "card": {
      "object": "card",
      "id": "card_test_56vp5nkjti9mi10tmlx",
      "livemode": false,
      "country": "us",
      "city": "Bangkok",
      "postal_code": "10320",
      "financing": "",
      "bank": "",
      "last_digits": "4242",
      "brand": "Visa",
      "expiration_month": 2,
      "expiration_year": 2019,
      "fingerprint": "uqEgwbY6J9JcS3z/H1/eDzZmxXacMWo2gT09m+kj//0=",
      "name": "JOHN DOE",
      "security_code_check": true,
      "created": "2017-02-03T13:52:45Z"
    },
    "customer": null,
    "ip": null,
    "dispute": null,
    "created": "2017-02-03T13:52:53Z"
  }
}

สามารถกดดูตัวอย่างได้จากหน้าจอ webhook บน dashboard

Read webhook

เมื่อต้องการสร้างไฟล์เพื่อรับข้อมูลจาก Webhook ท่านสามารถสร้างไฟล์แบบเดียวกับไฟล์ที่รับข้อมูลจาก html form ได้เลย (แต่ต้องเป็น https เท่านั้นนะ) เช่น

<?php

$json = $_POST["data"];
$data = json_decode($json);
$data_id = $data->id;
$data_amount = $data->amount;
$card_id = $action->data->card->id;


// validate and save to DB

ถ้าต้องการใช้ระบบทดสอบ webhook สามารถดูวิธีสร้างตัวทดสอบได้ที่ เอกสารนี้


ผมจะตั้งค่า web hook ได้อย่างไร
#3

แนะนำให้ใช้ php://input มากกว่าครับ

<?php
$payload = file_get_contents('php://input'); // get data from Omise

$event = json_decode($payload); // change json text to php object
print_r($payload); // show data from Omise

if ($event->key == "charge.create") { // if event is `charge.create`
    if ($event->data->status == "successful") { // if status is `successful`
        // add some logic here
    }
}
?>

#4

สอบถามหน่อยครับ
การใส่ Webhooks

คือผมต้องเอา URL ข้างล่างไปใส่ใน Webhooks ใช่เปล่าครับ
เมื่อมี event จะ ส่งค่าไปตาม url ที่ตั้งไว้
https://www.xxxxxxx.com/update.php

file update.php

<?php $payload = file_get_contents('php://input'); // get data from Omise $event = json_decode($payload); // change json text to php object print_r($payload); // show data from Omise if ($event->key == "charge.create") { // if event is `charge.create` if ($event->data->status == "successful") { // if status is `successful` // add some logic here } } ?>

ผมเข้าใจถูกต้องเปล่าครับ


#5

เข้าใจถูกต้องแล้วครับ โดยเข้าไปตั้งค่าใน Omise Dashboard ในเมนู Webhooks ได้เลยครับ


#6

$event->key == “charge.create”

ปกติ ตรงนี้ Events จะเป็น อะไรครับ ถ้าจ่ายผ่าน internet banking


#7

หลักๆจะมีอยู่ 2 ส่วนครับ

  1. หลังจากที่สร้าง Charge จะได้รับ charge.create
  2. หลังจากที่สถานะ Charge เปลี่ยนจะได้รับ charge.complete (ไม่ว่าจะ successful หรือ failure) ครับ

อีกวิธีที่จะทำให้ทดสอบได้อย่างครอบคลุมมากขึ้น ทางคุณ @poobate สามารถทดลองสร้าง charge ตามสมมติฐาน รวมถึงทดสอบอย่างครบกระบวนการ เพื่อตรวจสอบ event จากบน dashboard ได้เช่นกันครับ

รูปด้านล่างนี้เป็นตัวอย่างที่ได้สร้าง charge ด้วย internet banking และได้รับ successful status ครับ สามารถดู events ได้จากหัวข้อ events ด้านล่างสุดครับ

และสามารถคลิกเข้าไปดูข้อมูลในแต่ละ event เช่นกัน (หรือจะดูจากเมนู events ด้านข้างก็ได้ครับ)