ปรับ Placeorder
หลักการของ Omise เป็นแบบไหน ?
Document ต้นฉบับ: https://docs.opn.ooo/th/rabbit-linepay/thailand
ทีนี้ Omise นั้น support การจ่ายเงินหลากหลายประเภทมาก (สามารถดูเอกสารได้) เราจะเลือกการชำระเงินเป็น
- เแบบ rabbit line pay เนื่องจาก เป็นลักษณะของการ link out ออก (ซึ่งเป็นรูปแบบที่ implement ง่ายที่สุด)
- แต่สามารถนำไปประยุกต์ใช้กับทุกแบบได้
ก่อนที่จะมีการลง library เรามาทำความเข้าใจ library และ flow ของ omise กันก่อน
Document ต้นฉบับ: https://docs.opn.ooo/th/omise-js/thailand
- ในการเชื่อม Omise นั้นเราจะมี library อยู่ 2 ฝั่งคือ
- ฝั่ง Frontend = Omise.js
- ฝั่ง Backend = omise-node
โดย concept โดยประมาณคือ
- ฝั่ง Frontend จะทำการสร้าง source token ออกมา (โดยสร้างจาก public key ของ Omise.js)
- ฝั่ง Frontend จะทำการส่ง source token เข้าไปในฝั่ง Backend และทำการ validate source token (ผ่าน secret key ของ Omise) และสร้างเป็น charge ขึ้นมา (เมื่อ token และราคาออกมาถูกต้อง)
ทำการลง Library omise
เราจะทำการลง Library และ setup key ทั้ง 2 ฝั่งกันก่อน อย่างแรกสุดให้เตรียม key เอาไว้ โดยการเข้าไปที่ setting > key (ตามภาพนี้)
จะเจอ public key (ใช้สำหรับ Frontend) และ secret key (ใช้สำหรับ Backend)
เพิ่ม Library ฝั่ง Frontend
import library Omise.js
ฝั่ง Frontend เราจะทำการเพิ่มที่ layer นอกสุดคือ index.html
เลย เนื่องจากเราต้อง import ผ่าน cdn เข้ามาผ่าน tag script = เราเลยจะทำการ import ตำแหน่งนอกสุด เพื่อให้มันสามารถเรียกใช้งานแบบ global ได้
index.html
<!DOCTYPE html>
<html lang="en" data-theme="lofi">
<head>
<meta charset="UTF-8">
<link rel="icon" href="/favicon.ico">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Vite App</title>
</head>
<body>
<div id="app"></div>
<!-- เพิ่ม script omise เข้ามา -->
<script type="text/javascript" src="https://cdn.omise.co/omise.js"></script>
<script type="module" src="/src/main.js"></script>
</body>
</html>
เพิ่ม env ให้ public key
Document ต้นฉบับ: https://vitejs.dev/guide/env-and-mode.html
หลังจากนั้น เราจะทำการเพิ่ม env เข้าไปสำหรับส่วนของ public key
- ไม่ควร fix code ไว้เนื่องจาก มันจะทำให้เราไม่สามารถทำหลาย environment ได้
- ตัว vite อำนวยความสะดวกเรื่อง .env ให้แล้ว ด้วยการเพิ่มผ่าน
.env.local
เข้าไปได้
ทำการ เพิ่ม public key ของ omise ของเราเข้าไปผ่าน key VITE_OMISE_PUBLIC_KEY
VITE_OMISE_PUBLIC_KEY=pkey_test_xxxx
หลังจากนั้น เราจะสามารถเรียกค่า env ผ่าน import.meta.env.VITE_OMISE_PUBLIC_KEY
ออกมาได้
เพิ่ม setup Omise ที่ stores/cart.js
สุดท้ายที่ stores/cart.js
เราจะทำการเรียกใช้ Omise library เพื่อ setup public key เริ่มต้น
import { defineStore } from 'pinia'
import axios from 'axios'
/* code เหมือนเดิม */
// เพิ่มบรรทัดนี้เข้ามา
Omise.setPublicKey(import.meta.env.VITE_OMISE_PUBLIC_KEY)
export const useUserCartStore = defineStore('user-cart', {
/* code เหมือนเดิม */
})
ถ้าไม่เกิด Error อะไรออกมาใน console = แปลว่าเราได้ทำการลงอย่างถูกต้องแล้ว
เพิ่ม Library ฝั่ง Backend (Cloud function)
ลง omise-node
ที่ Backend เราจะทำการลง library ชื่อ omise-node เพื่ออำนวยความสะดวกในการส่งข้อมูลเข้าไปที่ฝั่ง omise
library: https://github.com/omise/omise-node
เข้าไปใน folder functions/index.js
ทำการลงด้วยคำสั่ง
npm install omise
เพิ่ม env Secret key
Document ต้นฉบับ: https://firebase.google.com/docs/functions/config-env?gen=2nd
หลังจากนั้น เหมือนกันกับฝั่งของ Frontend เราจำเป็นต้องเพิ่ม env ของ cloud function เข้าไปเช่นกัน เราจะทำการเพิ่ม secret key เข้าไปใน env เพื่อให้สามารถเรียกใช้งานเพื่อ setup ของ cloud function ได้
สร้าง .env.local
ขึ้นมา และเพิิ่ม secret key ของ omise เข้าไป
OMISE_SECRET_KEY=skey_test_xxxx
เพียงเท่านี้ก็จะสามารถเรียกผ่าน process.env.OMISE_SECRET_KEY
ของ cloud function ได้