自社連携
公式パッケージのインストールは不要です。署名、実行できる例、テスト集を使い、実装前にレスポンスを確認できます。
会員向けOpenAPI
組織やベトナム法人プロフィールを作成せずに、会員アカウントで直接連携できます。
管理者が会員ごとにOpenAPIを許可します。メインサイドバーのAPIキーから本番またはテストを選び、キーを作成してください。シークレットは一度だけ表示されます。上限は両モード共通です。権限停止時は両方が停止しますが、キーの失効は可能です。
本番は会員の実際のVND残高を使い、与信はありません。テストは独立した仮想残高と模擬eSIMを使います。テスト画面で残高追加、サンプル作成、リセットができます。テスト注文は本番の購入履歴に表示されません。
会員専用のプラン価格は最終価格で、ランク割引は追加されません。専用価格がない場合は現在の定価とランク割引が適用されます。注文時にサーバーが価格を確定します。
請求書は会員の手順に従い、初期設定は消費者向け販売です。注文作成時に、現在の検証ルールを満たす個人情報をinvoice_buyerに指定できます。OpenAPIの許可にベトナム法人プロフィールは不要です。
本番:https://api.tongkhoesim.com と tke_member_live_。テスト:https://api-testing.tongkhoesim.com と tke_member_test_。両方ともHMAC-SHA256およびX-TKE-Key、X-TKE-Timestamp、X-TKE-Nonce、X-TKE-Signatureを使用します。メソッド、パス/クエリ、未加工本文ハッシュに正確に署名し、ブラウザーコードにシークレットを置かないでください。
注文作成、プラン変更、キャンセル、返金申請のPOSTにはIdempotency-Keyが必要です。同じ意図の再試行ではキーと本文を維持してください。重複排除はAPIキー単位のため、処理待ちの取引を再試行する際にAPIキーを変更しないでください。 会員のテストデータ作成とリセットにもIdempotency-Keyが必要です。resetには{reason}本文を指定してください。
includeにlpaを指定してインストールコードを要求し、実際にコードが返ると通常のキャンセル期間が終了します。qrはlpaと併せてQR画像を追加するだけで、一覧エンドポイントでは無視されます。引き渡す準備ができたときだけコードを要求し、未開示にする場合はincludeを省略してください。返金申請は業務条件に従い、コード取得後に自由にキャンセルできる方法ではありません。
会員向けAPIエンドポイント
- APIパス:
GET /v1/catalog/packages - 必要な権限:
catalog:read - APIパス:
GET /v1/catalog/packages/{code} - 必要な権限:
catalog:read - APIパス:
GET /v1/orders - 必要な権限:
orders:read - APIパス:
POST /v1/orders - 必要な権限:
orders:write - APIパス:
GET /v1/orders/{id} - 必要な権限:
orders:read - APIパス:
POST /v1/orders/{id}/resend - 必要な権限:
orders:write - APIパス:
GET /v1/esims - 必要な権限:
esims:read - APIパス:
GET /v1/esims/{id} - 必要な権限:
esims:read - APIパス:
GET /v1/esims/{id}/usage - 必要な権限:
esims:read - APIパス:
GET /v1/esims/{id}/plan-options - 必要な権限:
esims:read - APIパス:
POST /v1/esims/{id}/change-plan - 必要な権限:
esims:write - APIパス:
POST /v1/esims/{id}/cancel - 必要な権限:
esims:write - APIパス:
GET /v1/esims/{id}/refund-requests - 必要な権限:
esims:read - APIパス:
POST /v1/esims/{id}/refund-requests - 必要な権限:
esims:write - APIパス:
GET /v1/wallet/balance - 必要な権限:
wallet:read
テストモード
GET /v1/testmode/statusesims:readPOST /v1/testmode/seedorders:writePOST /v1/testmode/resetorders:writePOST /v1/testmode/esims/{id}/simulateesims:write
コンソールはapi-testing上のパートナーtke_test_と会員tke_member_test_のテストキーのみ受け付けます。本番キーはすべて拒否します。シークレットはページのメモリー内だけに保持し、ストレージやログには保存しません。
リクエストに署名
HMACページに署名式、bash/Node/Python/PHP/Goの例、バックエンドのテストベクトルがあります。
#!/usr/bin/env bash
# Yeu cau: openssl. Ky POST /v1/orders.
KEY_ID="tke_test_ab12cd34..."
SECRET="tke_secret_test_0123456789abcdef"
METHOD="POST"
PATH_Q="/v1/orders"
BODY='{"items":[{"package_code":"THAY-BANG-MA-GOI-CUA-BAN","quantity":2}]}'
TS="$(date +%s000)" # epoch milliseconds
NONCE="$(uuidgen)"
BODY_HASH="$(printf '%s' "$BODY" | openssl dgst -sha256 -hex | awk '{print $NF}')"
SIGNING="$METHOD"$'
'"$PATH_Q"$'
'"$TS"$'
'"$NONCE"$'
'"$BODY_HASH"
SIG="$(printf '%s' "$SIGNING" | openssl dgst -sha256 -hmac "$SECRET" -hex | awk '{print $NF}')"
curl -sS "https://api.tongkhoesim.com$PATH_Q" -H "X-TKE-Key: $KEY_ID" -H "X-TKE-Timestamp: $TS" -H "X-TKE-Nonce: $NONCE" -H "X-TKE-Signature: $SIG" -H "Idempotency-Key: $(uuidgen)" -H "Content-Type: application/json" --data-raw "$BODY"実行できる例
examples/sign.mjsとexamples/sign.pyは標準ランタイムだけで動作します。/hmac-test-vectors.jsonを読み、各署名を計算・照合してPASS/FAILを表示します。
node examples/sign.mjs # plain Node (node:crypto), nothing to install
python examples/sign.py # plain Python (hmac/hashlib), nothing to installすぐ使えるリクエスト集
Postmanと.httpはビルド時にopenapi.jsonから生成します。各エンドポイントに4つの署名ヘッダーが用意されています。キーを入れて署名を計算してください。
- VS CodeのREST Client拡張やJetBrains HTTP Clientでtongkhoesim.httpを開きます。
- @key_idと@secretにtke_test_の値を入れます。@base_urlはapi-testing.tongkhoesim.comです。
- HMAC例やexamples/sign.*でtimestamp/nonce/signatureを計算し、変数に貼り付けます。
- Postmanや追加コードなしで、エディターからリクエストを送れます。
SDKが必要ですか?
openapi-generatorでopenapi.jsonからクライアントを生成すると、仕様に沿って利用できます。
npx @openapitools/openapi-generator-cli generate \
-i https://docs.tongkhoesim.com/openapi.json \
-g typescript-fetch \
-o ./tke-sdk