このページは現在翻訳中です。

TrueMoneyウォレット BETA

Omiseは、顧客がTrueMoneyウォレットから直接支払いを行えるようにするための一連のAPIを提供しています。TrueMoneyウォレットを使用すると、カードや決済の詳細を入力する必要がなくなり、顧客は短時間で決済を終えることができます。この機能を利用するには、顧客は携帯電話番号をTrueMoney ウォレットにご登録いただく必要があります。このガイドでは、この支払い方法の決済フローと基本的な実装方法について説明します。

本サービスは、現在Omise Thailandで契約中の加盟店のみご利用いただけます。

TrueMoney は現在クローズドベータ版です。TrueMoneyウォレットのご利用に関心がある事業者様は、 こちらのフォームに詳細を記入し送付してください。本サービスがご利用可能となりましたら、最新情報をご提供いたします。

決済フロー

TrueMoneyウォレットによる決済を選択したお客様は、ワンタイムパスワード(OTP)を使用した「リダイレクト」決済フローが適用されます。顧客が携帯番号を入力すると、ワンタイムパスワードが携帯電話に送信され、決済金額を承認、確認するように求められます。完了すると顧客は加盟店のWebサイトにリダイレクトされます。

  1. 決済時に、決済方法としてTrueMoneyウォレットをご選択いただきます。
  2. 携帯番号を入力した後、携帯に送信されたワンタイムパスワード(OTP)を入力します。
  3. 顧客が実際にする作業は、決済情報の確認とワンタイムパスワード(OTP)の入力のみとなります。

実装

通常、TrueMoneyウォレットの課金作成は以下のようなステップとなります。

  1. ソースAPI を使用して新しい決済ソースを作成する。
  2. 最初のステップで作成したソースIDを渡し、課金APIを使用して新しい課金を作成する。

これは、パブリックキー(公開鍵)を使用してクライアント側(ユーザのブラウザや携帯電話など)でTrueMoneyウォレット・ソースの作成が行われ、シークレットキー(秘密鍵)を使用してサーバー側で課金作成が行われることを前提としています。このフローをクライアント側で実装する際は、Omise.jsまたはOmiseモバイルSDK のいずれかを使用することをお勧めします。

注: Omise.jsの統合は近日中に公開されます。

推奨はされないものの、サーバー側でソースの作成と課金の両方が行われる必要がある場合、課金APIを使用してソースの作成と課金を行うことができます。

クライアント側のソースを作成する

TrueMoneyウォレットの決済方法は、ソースの種類として実装されています。 次のコードは、新しいTrueMoneyウォレットソースを作成する方法を示しています。

注: 以下の例では$OMISE_PUBLIC_KEY環境変数をご自身のパブリックキー(公開鍵)が含まれるように設定しておく必要があります。

curl https://api.omise.co/sources \
  -X POST                         \
  -u $OMISE_PUBLIC_KEY:           \
  -d "amount=100000"              \
  -d "currency=thb"               \
  -d "type=truemoney"             \
  -d "phone_number=11111111111"
{
  "object": "source",
  "id": "src_test_5fxf2nn7bvpkrutcyiu",
  "livemode": false,
  "location": "/sources/src_test_5fxf2nn7bvpkrutcyiu",
  "type": "truemoney",
  "flow": "redirect",
  "amount": 100000,
  "currency": "thb",
  "phone_number": "11111111111"
}

TrueMoney課金を作成する

上記で返されたオブジェクトのid属性の値を利用して、新しい課金に対するソースパラメータの値として渡します。この課金には、課金承認のためにサイトを離れる顧客が含まれるため、パラメータreturn_uriも渡す必要があります。課金完了時に顧客がリダイレクトされるサイトのURLはこちらです。

注: この例では、ご自身のシークレットキー(秘密鍵)が含まれるよう、$OMISE_SECRET_KEY環境変数を設定しておく必要があります。また、$ SOURCE_IDには上記のid属性の値を含める必要があります。

curl https://api.omise.co/charges                           \
  -X POST                                                   \
  -u $OMISE_SECRET_KEY:                                     \
  -d "amount=100000"                                        \
  -d "currency=thb"                                         \
  -d "return_uri=http://example.com/orders/345678/complete" \
  -d "source=$SOURCE_ID" 
{
  "object": "charge",
  "id": "chrg_test_5fxf2ntltpp1th6yawp",
  "livemode": false,
  "location": "/charges/chrg_test_5fxf2ntltpp1th6yawp",
  "amount": 100000,
  "currency": "thb",
  "funding_amount": 100000,
  "funding_currency": "thb",
  "description": null,
  "metadata": {
  },
  "status": "pending",
  "capture": true,
  "authorized": false,
  "schedule": null,
  "reversed": false,
  "reversed_at": null,
  "expires_at": "2019-05-24T08:09:48Z",
  "expired": false,
  "expired_at": null,
  "voided": false,
  "paid": false,
  "paid_at": null,
  "transaction": null,
  "refunded": 0,
  "refunds": {
    "object": "list",
    "from": "1970-01-01T00:00:00Z",
    "to": "2019-05-17T08:09:48Z",
    "offset": 0,
    "limit": 20,
    "total": 0,
    "order": "chronological",
    "location": "/charges/chrg_test_5fxf2ntltpp1th6yawp/refunds",
    "data": [

    ]
  },
  "return_uri": "http://example.com/orders/345678/complete",
  "failure_code": null,
  "failure_message": null,
  "card": null,
  "customer": null,
  "ip": null,
  "dispute": null,
  "created": "2019-05-17T08:09:48Z",
  "source": {
    "object": "source",
    "id": "src_test_5fxf2n7baulmpak09c2",
    "type": "truemoney",
    "flow": "redirect",
    "amount": 100000,
    "currency": "thb",
    "phone_number": "11111111111"
  },
  "disputable": false,
  "capturable": false,
  "reversible": false,
  "refundable": false,
  "reference": "pay2_test_5fxf2ntr10o6ibucntm",
  "authorize_uri": "https://pay.omise.co/payments/pay2_test_5fxf2ntr10o6ibucntm/authorize"
}

サーバー側のソースと課金を作成する

課金作成時にソースを指定しなければならない場合(サーバ側)、課金APIを利用することで、一度のAPIコールでソースの作成と課金を行うことができます。

curl https://api.omise.co/charges                           \
  -X POST                                                   \
  -u $OMISE_SECRET_KEY:                                     \
  -d "amount=100000"                                        \
  -d "currency=thb"                                         \
  -d "return_uri=http://example.com/orders/345678/complete" \
  -d "source[type]=truemoney"                               \
  -d "source[phone_number]=11111111111"
{
  "object": "charge",
  "id": "chrg_test_5fxf2o3fifulprgiqf7",
  "livemode": false,
  "location": "/charges/chrg_test_5fxf2o3fifulprgiqf7",
  "amount": 100000,
  "currency": "thb",
  "funding_amount": 100000,
  "funding_currency": "thb",
  "description": null,
  "metadata": {
  },
  "status": "pending",
  "capture": true,
  "authorized": false,
  "schedule": null,
  "reversed": false,
  "reversed_at": null,
  "expires_at": "2019-05-24T08:09:49Z",
  "expired": false,
  "expired_at": null,
  "voided": false,
  "paid": false,
  "paid_at": null,
  "transaction": null,
  "refunded": 0,
  "refunds": {
    "object": "list",
    "from": "1970-01-01T00:00:00Z",
    "to": "2019-05-17T08:09:50Z",
    "offset": 0,
    "limit": 20,
    "total": 0,
    "order": "chronological",
    "location": "/charges/chrg_test_5fxf2o3fifulprgiqf7/refunds",
    "data": [

    ]
  },
  "return_uri": "http://example.com/orders/345678/complete",
  "failure_code": null,
  "failure_message": null,
  "card": null,
  "customer": null,
  "ip": null,
  "dispute": null,
  "created": "2019-05-17T08:09:49Z",
  "source": {
    "object": "source",
    "id": "src_test_5fxf2o2v84ly5nu9yyf",
    "type": "truemoney",
    "flow": "redirect",
    "amount": 100000,
    "currency": "thb",
    "phone_number": "11111111111"
  },
  "disputable": false,
  "capturable": false,
  "reversible": false,
  "refundable": false,
  "reference": "pay2_test_5fxf2o3j2moe92owpy8",
  "authorize_uri": "https://pay.omise.co/payments/pay2_test_5fxf2o3j2moe92owpy8/authorize"
}

承認

上記のAPIコールから作成された課金オブジェクトには、属性authorize_uriが含まれます。OTP入力フォームを含むTrueMoneyが運営するWebページのURLはこちらです。

ライブモードでは、ユーザーをauthorize_urihttps://pay.omise.co/...)に指定されているURLにリダイレクトして、ワンタイムパスワード(OTP)を入力します。

TrueMoney Authorize URI Live

テストモードでは、URLにアクセスし課金を手動で成功または失敗とマークすることで、一連の動作をシミュレートできます。

TrueMoney Authorize URI Test

ステータスを確認する

Webhooks

課金完了時の通知を受ける際には、イベントAPIを使用してください。WebhooksURLが設定されると、TrueMoneyの課金完了のたびに、charge.completeというイベント名のリクエストが送信されます。詳細はWebhooksをご覧ください。

課金が失敗した際は、課金オブジェクトのfailure_codefailure_messageをチェックし詳細をご説明ください。

code Description
payment_rejected 特段の理由なく、TrueMoneyサービスによって課金が拒否されました。
failed_processing 決済処理が失敗しました。
invalid_account 携帯電話番号がTrueMoneyアカウントでご利用いただけません。
insufficient_fund 決済に必要な残高が不足しています。

failure_codefailure_messageの詳細については、課金APIを確認してください。

マニュアル

課金API で説明されているように、idを取得することで、status属性、また課金ステータスの確認も可能です。

curl -s https://api.omise.co/charges/$CHARGE_ID \
  -u $OMISE_SECRET_KEY: | jq -M .status
"pending"

返金

TrueMoneyウォレットの課金の返金方法については、返金APIドキュメントを参照してください。

注: TrueMoneyウォレットの課金は、返金のみに対応しており、課金自体を無効にすることはできません。

TrueMoneyウォレットを有効化する

本番モードでの取引でAPIを使用する前に、利用規約をご確認ください。

最低限必要なAPIのバージョンは2017-11-02です。 APIバージョンの更新に関するガイダンスについては、APIバージョンを参照してください。