Elixirライブラリ(omise-elixir)
omise-elixirライブラリは、パターンマッチング、OTP機能、優れたPhoenix統合を備えた、Omise APIへの慣用的なElixirインターフェースを提供します。
インストール
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
- Phoenix 1.6+(オプション、Phoenixアプリケーション用)
クイックスタート
基本的な構成
# APIキーを構成
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
一般的な操作
チャージの作成
# カードトークンでチャージを作成
{:ok, charge} = Omise.Charge.create(
amount: 100_000, # 1,000.00 THB(最小通貨単位)
currency: "THB",
card: "tokn_test_123",
description: "注文 #1234",
metadata: %{
order_id: "1234",
customer_name: "John Doe"
}
)
case charge do
%{paid: true} ->
IO.puts("チャージ成功: #{charge.id}")
%{paid: false} ->
IO.puts("チャージ失敗: #{charge.failure_message}")
end
パターンマッチングを使用
defmodule PaymentService 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セキュアで
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("金額: #{charge.amount}")
IO.puts("通貨: #{charge.currency}")
IO.puts("ステータス: #{charge.status}")
IO.puts("支払い済み: #{charge.paid}")
{:error, error} ->
IO.puts("エラー: #{inspect(error)}")
end
チャージのリスト表示
# ページネーション付きですべてのチャージをリスト表示
{: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.id}")