การเก็บข้อมูลกับโอมิเซะโดยใช้ Metadata API

ตามปกติแล้วในรายการรับชำระเงิน (charge object) จะมีการจัดเก็บข้อมูลพื้นฐานไว้อยู่แล้ว เช่น ราคา, สถานะของรายการ, สกุลเงินที่ผู้ซื้อชำระเข้ามา เป็นต้น ซึ่งที่ผ่านมามีผู้ใช้งานโอมิเซะจำนวนมากถามถึงคุณสมบัติการทำงานที่จะช่วยให้ร้านค้าสามารถเก็บข้อมูลเฉพาะของรายการไว้กับ charge object ได้เพิ่มขึ้น เช่น จัดเก็บรายการคำสั่งซื้อ (Order ID) หรือ จัดเก็บหมายเลข tracking number เพื่อนำมาใช้ในการอ้างอิงข้อมูล หรือกระทบยอด (reconcile) ได้อย่างสะดวกมากขึ้นในภายหลัง เราจึงได้พัฒนาเป็น Metadata API ออกมา

Metadata สามารถเก็บข้อมูลอะไรได้บ้าง?

ในส่วนของขอบเขตข้อมูลที่สามารถจัดเก็บได้นั้น ร้านค้าสามารถกำหนดเองได้ ไม่มีข้อจำกัด เราขอยกตัวอย่างการนำ Metadata API ไปใช้ ดังนี้:

  • จัดเก็บรายการคำสั่งซื้อ (Order ID) ไว้กับรายการรับชำระเงิน (charge object) เพื่อให้ง่ายต่อการกระทบยอด (reconcile) ในภายหลัง
  • เก็บข้อมูลการจัดส่ง หรือระบุรุ่นของสินค้าไว้กับรายการรับชำระเงิน (charge object) ทำให้สามารถติดตามตรวจสอบรายการผ่าน dashboard ของโอมิเซะได้เลย
  • สามารถจัดเก็บข้อมูลที่จำเป็นต่อการทำงานของฝ่ายบัญชี ให้เจ้าหน้าที่ในแผนกเรียกดูข้อมูลทั้งหมดจากที่เดียว ช่วยให้ทำงานได้เร็วขึ้น
  • สามารถใช้ API ของโอมิเซะ เพื่อจัดเก็บเป็นฐานข้อมูลหลักของร้านค้าได้เลย (ถึงแม้จะสามารถทำได้ แต่เรายังแนะนำให้ร้านค้ามีฐานข้อมูลของตัวเองไว้อยู่ดี)

ก่อนการพัฒนา Metadata API ออกมา เราให้ผู้ใช้งานเพิ่ม custom JSON ลงใน description field ของ charge object แต่เนื่องจากมีผู้ใช้งานเยอะขึ้นเรื่อย ๆ เราจึงเห็นว่าควรมีโซลูชันที่สะดวกกว่านี้ให้ทุกคนได้ใช้งานกัน เราได้เพิ่ม metadata key เข้าไปใน Charge และ Customer API แล้ว โดย key นี้ต้องใส่เป็น JSON Hash ส่วนค่าข้างในสามารถกำหนดได้ตามต้องการ

ตัวอย่าง PHP

<?php

$charge = OmiseCharge::create(array(
    'description' => 'Payment for Order #3947',
    'currency' => 'thb',
    'amount' => 10000,
    'card' => 'tokn_test_58307zpezucfvb6u1ty',
    'metadata' => array(
        'order_id' => '3947'
    )
));

ตัวอย่างข้อมูล JSON ที่ตอบกลับ

{
  "object": "charge",
  "description": "Payment for Order #3947",
  "metadata": {
    "order_id": "3947"
  },
  "...": "..."
}

ใช้ Metadata API แล้วเป็นอย่างไร มี use case อื่น ๆ ที่น่าสนใจ หรือหากพบ bug สามารถพูดคุยแนะนำเข้ามาได้เลยที่ Gitter