สร้าง QR Code ชำระเงิน ด้วย Kbank Open API ด้วย PHP CURL

KBANK Open API คือ ระบบที่ถูกพัฒนาขึ้นมาเพื่อให้เราสามารถทำธุรกรรมทางการเงินในรูปแบบต่าง ๆ เช่น การชำระเงิน การเติมเงิน การดูรายงานรายการเดินบัญชี กับทางธนาคารกสิกรได้

ในอดีตการที่เราจะทำธุรกรรมทางการเงินในรูปแบบต่าง ๆ จำเป็นต้องใช้บริการของธนาคารนั้น ๆ เป็นหลัก เช่น จะตรวจสอบ Transactions ยอดเงินในบัญชี รายการโอน ถอน อาจจะต้องเข้าแอพ K Plus หรือเข้า K-Cyber  Internet Banking เพื่อดูรายการ รายวัน รายเดือน

KBANK Open API จะเข้ามาช่วยให้เราสามารถทำสิ่งเหล่านั้นได้ โดยที่ไม่ขึ้นกับซอฟต์แวร์ของธนาคาร เราจะสามารถตรวจสอบยอดเงินในบัญชี รายการเดินบัญชี ผ่าน Mobile Apps หรือ หน้าเว็บไซต์ของเราเอง เราจะสามารถ Generate QR Code สำหรับการชำระเงินขึ้นมาเองได้ เป็นต้น

KBANK Open API แบ่งเป็น 5 บริการหลัก ๆ คือ

  • QR PAYMENT ( สำหรับสร้าง QR Code ชำระเงิน )
  • ACCOUNT / CASA ( ตรวจสอบยอดเงิน ธุรกรรมการเงินล่าสุด )
  • CREDIT CARD API ( ข้อมูลบัตรเครดิต คะแนนสะสม ข้อมูลธุรกรรมบางประเภท )
  • KBANK OPEN API INFORMATION ( ข้อมูลที่ตั้งตู้ ATM สาขาธนาคาร และอัตราแลกเปลี่ยน )
  • PAY WITH K+ ( เอพีไอ การชำระเงินที่เชื่อมต่อกับแอพ K Plus )

จาก 5 บริการหลัก ตอนนี้ยังเปิดให้ใช้งานระบบเดียว คือ QR PAYMENT เท่านั้นนะครับ

วิธีการใช้งาน KBANK QR PAYMENT เบื้องต้น ( Test Mode )

  • กรอกข้อมูลให้ครบ กด Create New App ไปที่หน้า Dashbaord
  • สิ่งที่เราต้องใช้หลัก ๆ จากหน้า Dashboard มีอยู่ 3 อย่างครับ
  1. Merchant Id
  2. Partner Id
  3. Client Secret
  • จากนั้นให้สร้าง php ไฟล์สำหรับทดสอบการ Request/Response เขียนโค๊ดส่ง json post data ด้วย curl ดังนี้ครับ

$ch = curl_init();
$form_field = array();
$form_field['partnerTxnUid']  = substr(uniqid(rand(), true), 0, 15);
$form_field['partnerId']  = 'ใส่ Partner ID ';
$form_field['partnerSecret']  = 'ใส่ Client Secret';
$form_field['requestDt']  = '2018-01-03T12:30:00+07:00';
$form_field['merchantId']  = 'ใส่ Merchant ID ดูที่ User Info';
$form_field['terminalId']  = 'term1';
$form_field['qrType']  = '3';
$form_field['txnAmount']  = 100.50;
$form_field['txnCurrencyCode']  = 'THB';
$form_field['reference1']  = 'INV001';
$form_field['reference2']  = NULL;
$form_field['reference2']  = NULL;
$form_field['reference4']  = NULL;
$form_field['metadata']  = 'ปลาร้าสับแพคถุง 100 บาท ยั่ว ๆ จ้าาา';
$post_string = json_encode($form_field);  
curl_setopt($ch, CURLOPT_HTTPHEADER, array(                                                                          
	'Content-Type: application/json',              
	'Cache-Control:no-cache')                                                                       
);

curl_setopt($ch, CURLOPT_URL, 'https://apiportal.kasikornbank.com:12002/pos/qr_request');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$data = curl_exec($ch);
$response = json_decode($data);

partnerTxnUid คือ unique id ที่เราสร้างขึ้นมาเองเพื่อกำกับไว้ในทุก ๆ ครั้งที่เราส่งไปขอ qrCode

ทดสอบ Run Script ถ้าข้อมูลที่ส่งไปถูกต้อง เราจะได้ข้อมูลที่ Return กลับมา errorCode เป็น 00 และได้ข้อมูล qrCode กลับมา ข้อมูลส่วนนี้สามารถนำไป generate QR code เพื่อใช้ในการ scan ชำระเงินได้

ตัวอย่าง Response Code

{
    "partnerTxnUid": "QRH001030118001",
    "partnerId": "POS001",
    "statusCode": "00",
    "errorCode": null,
    "errorDesc": null,
    "accountName": "นายสมชาย รักกสกิ ร",
    "qrCode":
 "00020101021230690016A000000677010112011301055580807780211LEX110000020313LE
    X026039306931590016A00000067701011301030040211LEX110000020413LEX02603930695
    303764540512.815802TH6304A2C1"
}

แต่การทดสอบของเราเป็นการทดสอบในโหมด sandbox นะครับ ถ้าเราทดสอบโดยการใช้แอพ K+ สแกน QR code จะยังไม่สามารถใช้งานได้จริง จนกว่าเราจะลงทะเบียนเปิดร้านจริง ๆ ซึ่งการลงทะเบียน จากวันที่ทดสอบ Kbank Open API เปิดให้ลงทะเบียนเฉพาะนิติบุคคลเท่านั้นครับ

ขั้นตอนการ Generate QR Code

ดาวน์โหลด QR code generator library ได้ที่ https://github.com/dwisetiyadi/CodeIgniter-PHP-QR-Code

สำหรับ codeigniter วาง library ไว้ที่ application/library และเรียกใช้งาน $this->load->library(‘ciqrcode’); สำหรับ pure php เรียกใช้งาน include ‘ciqrcode.php’;

การใช้งานหลังจากที่ได้ data ที่ response มาจาก open api ให้เรียกใช้งานหลังจากได้รับข้อมูล ตัวอย่างตามโค๊ดด้านล่าง

$response = json_decode($data);
$params['data'] = $response->qrCode;
$params['level'] = 'H';
$params['size'] = 10;
$params['savename'] = $img = 'qrcode/'.$response->partnerTxnUid.'.png';
$this->ciqrcode->generate($params);

ทดสอบการแสดงผลรูป QR Code

echo '<img src="'.$img.'"/>';

ผลลัพธ์ที่ได้ ทุก ๆ ครั้ง ที่เราส่ง request ไป จะได้ qr code ตัวใหม่มาเสมอ เราสามารถใช้ partnerTxnUid ในการตั้งชื่อรูปเพื่อที่จะระบุได้ว่า qr code ตัวนี้เป็นการ request ครั้งที่เท่าไหร่

Leave a Reply