เชื่อมต่อกับ Omise อย่างง่ายๆ ด้วย Node.js

นานๆ จะกลับมาอัพเดท blog สักที เมื่อวันที่ผ่านมาได้มีโอกาสนั่งเขียนโค้ดเพื่อเป็นตัวอย่างในการเชื่อมต่อกับ Omise Payment Gateway อย่างง่ายๆด้วย node.js (express.js) โดยในโค้ดก็จะครอบคลุมการสร้าง Charge อย่างง่ายๆ ไม่ว่าจะเป็น Credit / Debit card และ Internet Banking รวมไปถึงการรับ WebHooks ด้วย

นานๆ จะกลับมาอัพเดท blog สักที เมื่อวันที่ผ่านมาได้มีโอกาสนั่งเขียนโค้ดเพื่อเป็นตัวอย่างในการเชื่อมต่อกับ Omise Payment Gateway อย่างง่ายๆด้วย node.js (express.js) โดยในโค้ดก็จะครอบคลุมการสร้าง Charge อย่างง่ายๆ ไม่ว่าจะเป็น Credit / Debit card และ Internet Banking รวมไปถึงการรับ WebHooks ด้วย

โดยจะประกอบไปด้วย

1) ฟอร์มสำหรับบัตรเครดิต/เดบิต โดยมีความปลอดภัยซึ่งทางผู้พัฒนาเว็บไซต์เองจะต้องไม่ส่งข้อมูลของบัตรเข้าเซิร์ฟเวอร์ของตนเอง และจะทำการสร้าง Token เพื่อนำไปสร้าง Charge เท่านั้น

2) การสร้าง Charge นั้นรองรับ 3-D secure หรือการกรอก OTP ซึ่งจะมีการ redirect ไปยังเว็บไซต์ของทางธนาคาร (ถ้าใช้ Live keys)

3) มี code สำหรับการสร้าง Charge สำหรับ Internet Banking ด้วยนะ ส่วนอื่นๆ เช่น Alipay, Installment ก็ทำคล้ายๆกัน แค่เปลี่ยน parameter เท่านั้น

4) มีตัวอย่างสำหรับหน้า return_uri หรือหน้าที่แสดงผลการชำระเงิน บางที่เรียก Thank you page ก็ว่ากันไปครับ

5) มีตัวอย่างสำหรับการรับข้อมูลจาก WebHooks ด้วยครับ แต่ก็ต้องไปพัฒนาต่อกันเองนะครับ ว่าจะมี logic ในการเอาไปประมวลผลอะไรต่อ

โดยในอนาคตอาจจะทำวีดีโออธิบายให้ด้วย และจะเพิ่มภาษาอื่นๆ หรือ Payment method อื่นๆ เพื่อเป็นตัวอย่างแบบง่ายๆให้นำไปพัฒนาต่อกันเองได้ครับ

ว่าแล้วก็สามารถเข้าไปดูได้ใน GitHub ของผมเลยครับ https://github.com/keeratita/omise-integration-examples

ปล. ก่อนหน้านี้มีบทความเกี่ยวกับ ASP.NET เดี๋ยวไว้จะเอามารวมไว้ใน Git เดียวกันครับ ลองไปอ่านได้ที่ https://keerati.co/2018/07/07/asp-net-core-กับ-omise-dotnet/

deploy เว็บไซต์ที่เขียนด้วย Nodejs ง่ายๆ โดยใช้ PM2

เพิ่งกลับมาทดสอบเริ่มเขียน Node.js อีกครั้ง ที่ปกติแล้วที่บริษัทจะมีทีม DevOps ซึ่งเขาใช้ Jenkins เพื่อ build docker และ deploy image ที่ผ่านการทดสอบแล้วขึ้น production โดยอัตโนมัติเพียงแค่ push code ขึ้น git เท่านั้น

แต่เนื่องด้วยว่าถ้าเขียน project เอง และค่อนข้างโง่เรื่อง Jenkins (ทำไม่เป็นอะ 😂😂😂😂) เลยได้มาใช้ PM2

เกริ่นก่อนว่าเคยได้รู้จัก PM2 คร่าวๆมาแล้วเมื่อ 2 ปีก่อน โดยไม่ได้ทำอะไรกับมันจริงจัง เพียงแค่รู้ว่ามันช่วย restart process ให้อัตโนมัตหาก script ที่เขียนมัน throw error และ process ตาย จนกระทั่งไปอ่านเว็บไซต์ของ PM2 และได้เจอหัวข้อ Deployment

สิ่งแรกง่ายๆเลยที่ต้องมีคือ

  1. ลง PM2 บนเครื่องของตัวเอง
  2. ลง PM2 บนเครื่องของ Server
  3. มี Git ที่ไหนสักที่ 😂 ส่วนตัวใช้ Private Git ของ Microsoft คือ Visualstudio.com
  4. สามารถ ssh remote โดยใช้ SSH Key-based authentication จากเครื่องของตัวเองไปยัง Server ได้ (วิธีตั้งค่าอ่านเจอที่นี่)
  5. เช่นกัน Server สามารถ clone git จาก Git Server โดยใช้ SSH Key-based authentication ได้
  6. แน่นอนทั้งบนเครื่องตัวเองและ Server อย่าลืมสร้าง SSH config เพื่อให้ชีวิตง่ายขึ้นใน ~/.ssh/config

    ส่วนนี้สำหรับบน macOS

    Host *
        UseKeychain yes
        AddKeysToAgent yes
        IdentityFile ~/.ssh/id_rsa
    

    ส่วนนี้สำหรับบน Linux

    Host *
        IdentityFile ~/.ssh/id_rsa
    

    หากใครอยากตั้งค่า advance กว่านั้นก็สามารถทำได้ครับ อันนี้แบบ simple

  7. จากนั้นก็ทำตามเอกสารของ PM2 ได้เลย~

พอติดตั้งทุกอย่างเสร็จสิ้น หลังจากที่แก้ไข code และ push ขึ้น git แล้วก็แค่พิมพ์

pm2 deploy production update

หากต้อง revert ก็พิมพ์

# Revert to -1 deployment
$ pm2 deploy production revert 1