ไลบรารี Elixir (omise-elixir)
ไลบรารี omise-elixir มอบอินเทอร์เฟซ Elixir ที่เป็นมาตรฐานสำหรับ Omise API พร้อมด้วย pattern matching, ฟีเจอร์ OTP และการผสานรวม Phoenix ที่ยอดเยี่ยม
การติดตั้ง
การใช้ Mix
เพิ่มลงใน mix.exs ของคุณ:
def deps do
[
{:omise, "~> 0.11"}
]
end
จากนั้นรัน:
mix deps.get
ข้อกำหนด
- Elixir 1.10 หรือสูงกว่า (รวมถึง Elixir 1.14+)
- Erlang/OTP 22+ (รวมถึง OTP 25+)
- Mix สำหรับการจัดการ dependency
- Phoenix 1.6+ (ไม่บังคับ สำหรับแอปพลิเคชัน Phoenix)
เริ่มต้นอย่างรวดเร็ว
การกำหนดค่าพื้นฐาน
# กำหนดค่า API keys ของคุณ
Omise.configure(
public_key: "pkey_test_123456789",
secret_key: "skey_test_123456789",
api_version: "2019-05-29"
)
การกำหนดค่า Phoenix
# config/config.exs
config :omise,
public_key: System.get_env("OMISE_PUBLIC_KEY"),
secret_key: System.get_env("OMISE_SECRET_KEY"),
api_version: "2019-05-29"
# config/runtime.exs (Phoenix 1.6+)
import Config
config :omise,
public_key: System.fetch_env!("OMISE_PUBLIC_KEY"),
secret_key: System.fetch_env!("OMISE_SECRET_KEY")
ตัวแปรสภาพแวดล้อม
# การพัฒนา/ทดสอบ
export OMISE_SECRET_KEY=skey_test_123456789
export OMISE_PUBLIC_KEY=pkey_test_123456789
# ผลิตภาพ
# export OMISE_SECRET_KEY=skey_live_123456789
# export OMISE_PUBLIC_KEY=pkey_live_123456789
การดำเนินการทั่วไป
การสร้างค่าธรร มเนียม
# สร้างค่าธรรมเนียมด้วย card token
{:ok, charge} = Omise.Charge.create(
amount: 100_000, # 1,000.00 บาท (ในหน่วยสกุลเงินที่เล็กที่สุด)
currency: "THB",
card: "tokn_test_123",
description: "Order #1234",
metadata: %{
order_id: "1234",
customer_name: "John Doe"
}
)
case charge do
%{paid: true} ->
IO.puts("Charge successful: #{charge.id}")
%{paid: false} ->
IO.puts("Charge failed: #{charge.failure_message}")
end
ด้วย Pattern Matching
defmodule Paymentบริการ do
def create_charge(token, amount) do
case Omise.Charge.create(amount: amount, currency: "THB", card: token) do
{:ok, %{paid: true} = charge} ->
{:ok, charge}
{:ok, %{paid: false, failure_message: message}} ->
{:error, message}
{:error, error} ->
{:error, error}
end
end
end
ด้วย 3D Secure
def create_secure_charge(token, amount, return_uri) do
case Omise.Charge.create(
amount: amount,
currency: "THB",
card: token,
return_uri: return_uri
) do
{:ok, %{authorized: true, authorize_uri: uri} = charge} when not is_nil(uri) ->
{:redirect, uri}
{:ok, %{authorized: true, paid: true} = charge} ->
{:success, charge}
{:ok, %{failure_message: message}} ->
{:error, message}
{:error, error} ->
{:error, error}
end
end
การดึงค่าธรรมเนียม
case Omise.Charge.retrieve("chrg_test_123") do
{:ok, charge} ->
IO.puts("Amount: #{charge.amount}")
IO.puts("Currency: #{charge.currency}")
IO.puts("Status: #{charge.status}")
IO.puts("Paid: #{charge.paid}")
{:error, error} ->
IO.puts("Error: #{inspect(error)}")
end
ก ารแสดงรายชื่อค่าธรรมเนียม
# แสดงรายการค่าธรรมเนียมทั้งหมดพร้อม pagination
{:ok, charges} = Omise.Charge.list(
limit: 20,
offset: 0,
order: "reverse_chronological"
)
charges.data
|> Enum.filter(&(&1.paid))
|> Enum.each(fn charge ->
IO.puts("#{charge.id}: #{charge.amount} #{charge.currency}")
end)
# แสดงรายการค่าธรรมเนียมด้วยตัวกรองวันที่
week_ago = DateTime.utc_now() |> DateTime.add(-7, :day) |> DateTime.to_date()
today = Date.utc_today()
{:ok, recent_charges} = Omise.Charge.list(
from: week_ago,
to: today
)
การสร้างลูกค้า
{:ok, customer} = Omise.Customer.create(
email: "customer@example.com",
description: "John Doe",
metadata: %{
user_id: "12345",
account_type: "premium"
}
)
IO.puts("Customer created: #{customer.id}")
การบันทึกบัตรเข้าไปในลูกค้า
# อัปเดตลูกค้าด้วย card token
{:ok, customer} = Omise.Customer.update(
"cust_test_123",
card: "tokn_test_456"
)
IO.puts("Card saved: #{customer.default_card}")
# หรือสร้างลูกค้าพร้อมบัตรในขั้นตอนเดียว
{:ok, customer} = Omise.Customer.create(
email: "customer@example.com",
description: "John Doe",
card: "tokn_test_123"
)
การแสดงรายชื่อบัตรลูกค้า
{:ok, customer} = Omise.Customer.retrieve("cust_test_123")
customer.cards.data
|> Enum.each(fn card ->
IO.puts("#{card.brand} ending in #{card.last_digits}")
IO.puts("Expires: #{card.expiration_month}/#{card.expiration_year}")
end)