Pythonライブラリ(omise-python)
omise-python ライブラリは、Django と Flask のサポート、非同期操作、型ヒント、包括的なエラーハンドリングを備えた、Omise API への Pythonic なインターフェースを提供します。
インストール
pip の使用(推奨)
pip install omise
requirements.txt を使用した pip
# requirements.txt
omise>=0.11.0
pip install -r requirements.txt
Poetry の使用
poetry add omise
要件
- Python 3.6 以降(Python 3.11+ を含む)
- requests ライブラリ(自動的にインストールされます)
- オプション:非同期サポート用の aiohttp
クイックスタート
基本的な構成
import omise
# API キーで構成
omise.api_secret = 'skey_test_123456789'
omise.api_version = '2019-05-29'
# オプション:API エンドポイントを設定
# omise.api_url = 'https://api.omise.co'
Django の構成
Django 設定に追加:
# settings.py
import os
OMISE_SECRET_KEY = os.environ.get('OMISE_SECRET_KEY')
OMISE_PUBLIC_KEY = os.environ.get('OMISE_PUBLIC_KEY')
OMISE_API_VERSION = '2019-05-29'
# apps.py または __init__.py で初期化
import omise
omise.api_secret = OMISE_SECRET_KEY
omise.api_version = OMISE_API_VERSION
Flask の構成
# config.py
import os
class Config:
OMISE_SECRET_KEY = os.environ.get('OMISE_SECRET_KEY')
OMISE_PUBLIC_KEY = os.environ.get('OMISE_PUBLIC_KEY')
OMISE_API_VERSION = '2019-05-29'
# app.py
from flask import Flask
import omise
app = Flask(__name__)
app.config.from_object('config.Config')
omise.api_secret = app.config['OMISE_SECRET_KEY']
omise.api_version = app.config['OMISE_API_VERSION']
環境変数
.env ファイルに追加:
# 開発/テスト
OMISE_SECRET_KEY=skey_test_123456789
OMISE_PUBLIC_KEY=pkey_test_123456789
# 本番環境
# OMISE_SECRET_KEY=skey_live_123456789
# OMISE_PUBLIC_KEY=pkey_live_123456789
認証
ライブラリはすべての API 操作にシークレットキーを使用します:
import omise
# オプション 1:グローバル構成(推奨)
omise.api_secret = os.environ['OMISE_SECRET_KEY']
# オプション 2:リクエストごとの構成
charge = omise.Charge.retrieve('chrg_test_123', key='skey_test_alternate')
一般的な操作
チャージの作成
トークンを使用
import omise
# カードトークンでチャージを作成
charge = omise.Charge.create(
amount=100000, # 1,000.00 THB(最小通貨単位)
currency='THB',
card='tokn_test_123',
description='注文 #1234',
metadata={
'order_id': '1234',
'customer_name': 'John Doe'
}
)
if charge.paid:
print(f"チャージ成功: {charge.id}")
else:
print(f"チャージ失敗: {charge.failure_message}")
型ヒントを使用
from typing import Dict, Any
import omise
def create_charge(
amount: int,
currency: str,
token: str,
metadata: Dict[str, Any]
) -> omise.Charge:
"""指定されたパラメータでチャージを作成します。"""
charge = omise.Charge.create(
amount=amount,
currency=currency,
card=token,
metadata=metadata
)
return charge
# 使用方法
charge = create_charge(
amount=100000,
currency='THB',
token='tokn_test_123',
metadata={'order_id': '1234'}
)
顧客を使用
# 既存の顧客に対してチャージを作成
charge = omise.Charge.create(
amount=50000,
currency='THB',
customer='cust_test_123',
description='サブスクリプション支払い'
)
3D セキュアで
# 3D セキュアが必要な可能性があるチャージを作成
charge = omise.Charge.create(
amount=100000,
currency='THB',
card='tokn_test_123',
return_uri='https://example.com/payment/callback'
)
if charge.authorized:
if charge.authorize_uri:
# 3D セキュアのために顧客を authorize_uri にリダイレクト
return redirect(charge.authorize_uri)
else:
# 3D セキュアなしでチャージが完了
process_successful_payment(charge)
チャージの取得
# ID でチャージを取得
charge = omise.Charge.retrieve('chrg_test_123')
print(f"金額: {charge.amount}")
print(f"通貨: {charge.currency}")
print(f"ステータス: {charge.status}")
print(f"支払済: {charge.paid}")
チャージのリスト表示
from datetime import datetime, timedelta
# ページネーション付きですべてのチャージをリスト表示
charges = omise.Charge.list(
limit=20,
offset=0,
order='reverse_chronological'
)
for charge in charges:
print(f"{charge.id}: {charge.amount} {charge.currency}")
# フィルター付きでチャージをリスト表示
week_ago = (datetime.now() - timedelta(days=7)).date().isoformat()
today = datetime.now().date().isoformat()
recent_charges = omise.Charge.list(
from_date=week_ago,
to_date=today
)
顧客の作成
# カードなしで顧客を作成
customer = omise.Customer.create(
email='customer@example.com',
description='John Doe',
metadata={
'user_id': '12345',
'account_type': 'premium'
}
)
print(f"顧客作成: {customer.id}")
顧客へのカード保存
# カードトークンで顧客を更新
customer = omise.Customer.retrieve('cust_test_123')
customer.update(card='tokn_test_456')
print(f"カード保存: {customer.default_card}")
# または 1 ステップでカード付き顧客を作成
customer = omise.Customer.create(
email='customer@example.com',
description='John Doe',
card='tokn_test_123'
)
顧客カードのリスト表示
customer = omise.Customer.retrieve('cust_test_123')
for card in customer.cards:
print(f"{card.brand} 末尾 {card.last_digits}")
print(f"有効期限: {card.expiration_month}/{card.expiration_year}")
払い戻しの作成
# 全額返金
refund = omise.Refund.create(
charge='chrg_test_123',
amount=None # 全額返金の場合は None
)
# 部分払い戻し
refund = omise.Refund.create(
charge='chrg_test_123',
amount=25000, # 250.00 THB
metadata={
'reason': 'customer_request',
'ticket_id': 'TICKET-123'
}
)
print(f"払い戻し {refund.id}: {refund.amount} {refund.currency}")