WeChat Pay は中国のソーシャル メディア アプリケーションの WeChat に含まれているモバイル決済プラットフォームです。Tencent 社が開発し、現在、中国の国内外に 9 億人以上のユーザーがいます。中国のモバイル決済市場で非常に大きなシェアを持つため、モバイルアプリケーションでは標準で WeChat Pay と連携することが求められています。そのためには WeChat Open Platform を使用する必要があります。
GeneXus 15 Upgrade 8 以降で生成した Android および iOS アプリケーションは、WeChat Pay の決済機能と連携させることができます。使用する拡張ライブラリは GeneXus のインストールに含まれており、Payment API をインポートします。
WeChat Open Platform サイトに開発者として登録し、決済機能と連携させるすべてのアプリケーションを登録する必要があります。この処理で、WeChat Pay と連携するのに必要なアプリケーション証明書を取得します。登録方法については、こちらを参照してください。
プログラミングの最初の手順は、情報を設定することです。既定では、WeChat Pay API が LoadConfig プロシージャーを使用して WeChatPay_Config という名前の XML ファイルから構成情報をロードします。このファイルを変更すると、WeChat Pay をアプリケーションに連携させるのに必要なすべての構成を設定できます。WeChatPay_Config.xml ファイルの構造と、その説明を次に示します。
<Configuration>
<AppId />
<Environment />
<CallbackURL />
<Timeout />
<MerchantId />
<MerchantKey />
<AdditionalConfig />
</Configuration>
- AppId: アプリケーションを WeChat Pay に登録したときに取得する ID です。
- Environment: 指定可能な値は Production または Sandbox です。決済トランザクションを実行するときの実行環境を指定します。
- CallbackURL: 決済トランザクションを完了する際に WeChat Pay が呼び出す決済通知サービスの URL です。既定では、WeChat Pay API にある CallbackService プロシージャーに含まれる URL が使用されます。
- Timeout: 決済トランザクションのタイムアウト (分単位) です。
- MerchantId: WeChat Open Platform に登録したユーザー ID です。
- MerchantKey: WeChat Open Platform のアプリケーションに割り当てられたキーです。
- AdditionalConfig: その他の情報の一覧です。
WeChat Pay と連携する iOS アプリケーションを生成する場合は、追加の設定手順が必要です。スマートデバイスの [ Main object properties ] プロパティグループの [ WeChat Pay ] の [ Application Id ] の値を、設定ファイルの AppId タグに設定した値と同じにする必要があります。
次の手順では、WeChat Pay に送信する決済データを準備します。まず、ユーザーは WeChat Pay API (製品コード、製品の説明、通貨、金額) からの PaymentApplicationData SDT に基づいて変数にいくつかの値を設定する必要があります。この変数は、WeChat Pay に送信する情報を返す GetPaymentInformation プロシージャーの入力になります。
GetPaymentInformation プロシージャーには中間の工程があります。つまり、送信可能な決済情報 (生成されたオーダー番号を含む) をユーザーの指示に沿って処理し、アプリケーションのデータベーステーブルに格納するといったことが可能です。これらのアクションは WeChat Pay API の OnAboutToPay プロシージャーで編集できます。
これで WeChat Pay API に含まれる WeChatPayProvider 外部オブジェクトからの Pay メソッドを使用して、WeChat Pay に決済情報を送信する準備ができました。このメソッドでは、前の手順で GetPaymentInformation プロシージャーから返された処理済みの決済情報を、PaymentInformation SDT に基づいた変数で受け取ります。
手順 4 と手順 5 のアクションを行う GeneXus スマートデバイス オブジェクト イベントのコード例を次に示します。
Event 'Pay with WeChat Pay'
Composite
&PaymentApplicationData.ProductCode = 'Product name'
&PaymentApplicationData.ProductDescription = 'Product description'
&PaymentApplicationData.Currency = 'CNY'
&PaymentApplicationData.Amount = 1000
GeneXus.Common.UI.Progress.ShowWithTitleAndDescription("Please Wait...","Preparing payment information...")
WeChatPay.GetPaymentInformation(&PaymentApplicationData, &PaymentInformation)
GeneXus.Common.UI.Progress.Hide()
if &PaymentInformation.ErrorCode > 0
Msg("Error: " + &PaymentInformation.ErrorDescription)
else
WeChatPayProvider.Pay(&PaymentInformation)
endif
EndComposite
Endevent
WeChat Pay の決済結果を処理するには、2 つのアクションを行うコードを記述する必要があります。まず、OnPaymentFinished という WeChatPayProvider 外部オブジェクト イベントを作成します。このイベントは PaymentResult SDT に基づいた変数を受け取ります。これには完了した決済の ErrorCode、ErrorDescription、OrderNumber が含まれます。詳しくは、「WeChat Pay API」を参照してください。
このイベントのコード例を次に示します。
Event WeChatPayProvider.OnPaymentFinished(&PaymentResult)
Composite
if &PaymentResult.ErrorCode = 0
GeneXus.Common.UI.Progress.ShowWithTitleAndDescription("Please Wait...","Finishing transaction...")
SetSaleStatus(&PaymentResult.OrderNumber, PaymentStatus.Paid)
ClearCart()
GeneXus.Common.UI.Progress.Hide()
ConfirmationPanel()
else
SetSaleStatus.Call(&PaymentResult.OrderNumber, PaymentStatus.Error)
Msg(&PaymentResult.ErrorDescription)
endif
EndComposite
EndEvent
最後の手順は、アプリケーションの開発者が提供する決済通知サービスの呼び出しの設定です。この呼び出しは WeChat Pay サーバーによって行われます。サービスの URL は、設定ファイルの CallbackURL パラメーターで指定したものです。既定では、この URL は WeChat Pay API に含まれる CallbackService プロシージャーを参照します。このプロシージャーは HTTP データを受け取って SDT 構造 (PaymentNotificationInfo) に変換します。次に、CallbackHandler という別のプロシージャーを呼び出して、その SDT を通知情報とともに処理します。
アプリケーションの登録が済んだら、GeneXus の開発者は次のオブジェクトを変更するだけでアプリケーションに WeChat Pay を連携させることができます。
- WeChatPay_Config.xml ファイルに構成を設定する。
- OnAboutToPay プロシージャーで WeChat Pay に決済データを送信する直前に決済データ処理のコードを記述する。
- 決済データを設定して、GetPaymentInformation プロシージャーとスマート デバイス オブジェクトにある WeChatPayProvider EO (外部オブジェクト) の Pay メソッドを呼び出す。
- スマート デバイス オブジェクトにある WeChatPayProvider EO の OnPaymentFinished イベントのコードを記述する。
- CallbackHandler プロシージャーで処理される通知サービスのコードを記述する。
例の詳細はこちらからダウンロードできます。
|