Alipay は、中国語のモバイル決済プラットフォームです。Alibaba Group (E コマース会社) が開発し、現時点で 5 億人を超えるアクティブユーザーが存在します。また、毎日 1 億 7,500 万を超える決済トランザクションが発生しています。Alipay は中国におけるあらゆるビジネスで幅広く利用されているため、このプラットフォームとの連携はモバイルアプリケーションで一般的な要件となっています。このプラットフォームでは、連携のための包括的な API を提供しています。
次の図は、Alipay と連携するための基本アーキテクチャの概要を示しています:
詳細:
- サードパーティ製モバイルアプリケーションから決済のオーダーが作成されます。
- アプリケーションサーバーがオーダーを処理し、Alipay での決済に必要な情報を返します。
- モバイルアプリケーションから Alipay アプリケーションを呼び出すことによって、決済プロセスを開始します。
- Alipay アプリケーションが Alipay サーバーを使用して決済処理をします。
- Alipay サーバーから Alipay アプリケーションに決済結果が返されます。
- Alipay アプリケーションからモバイルアプリケーションに決済結果が返されます。
- Alipay サーバーからアプリケーションサーバーに非同期決済通知が送信されます。
GeneXus 15 Upgrade 8 以降では、付属の拡張ライブラリを使用し、決済用 API をインポートすることによって、生成した Android アプリケーションと iOS アプリケーションに Alipay の決済機能を組み込むことができます。
開発者は Alipay 開発者サイトに登録し、決済機能を組み込むすべてのアプリケーションを登録する必要があります。登録すると、開発者は Alipay を組み込むために必要なアプリケーションの認証情報と署名情報を取得します。登録方法については、こちらを参照してください。
各トランザクションでは、Alipay 開発者サイトへのアプリケーションの登録時に取得した認証情報を使用して決済情報に署名する必要があります。Alipay は、アプリケーションごとに公開鍵と秘密鍵をプレーンテキストで作成します。GeneXus と連携する際にこれらの認証情報を暗号化データタイプとして扱うには、PFX ファイル (個人情報交換) を作成する必要があります。そのためには、一連の OpenSSL コマンドを実行します。これらのコマンドの詳細なリストについては、こちらを参照してください。ここでは、このプロセスを簡略化するためのユーティリティファイルもダウンロードできます。これは 1 回限りのプロセスです。つまり、アプリケーション用の PFX ファイルを一度作成したら、以降のビルドで再作成する必要はありません。
プログラミングの最初の手順は、情報を設定することです。Alipay API の既定の設定では、LoadConfig プロシージャーを通じて Alipay_Config という名前の XML ファイルから設定情報がロードされます。このファイルを変更するだけで、アプリケーションを Alipay と連携するために必要なすべての設定をすることができます。次に、Alipay_Config.xml ファイルの設定について説明します。
<Configuration>
<AppId />
<Environment />
<CertificateFilename />
<CertificatePassword />
<CallbackURL />
<Timeout />
<AdditionalConfig />
</Configuration>
- AppId: Alipay へのアプリケーションの登録時に取得した識別子です。
- Environment: 指定可能な値は Production または Sandbox です。決済トランザクションを実行する環境です。Sandbox (サンドボックス) 環境は Android のみで使用でき、Production (本番) 環境は iOS のみで使用できます。
- CertificateFilename: 前の手順で作成した PFX ファイルの名前です。
- CertificatePassword: 前の手順で作成した PFX ファイルのパスワードです。
- CallbackURL: Alipay で決済トランザクションを完了するために呼び出される決済通知サービスの URL です (前述のアーキテクチャリストの 7)。既定では、Alipay API に含まれている CallbackService プロシージャーの URL が使用されます。
- Timeout: 決済トランザクションのタイムアウト (分単位) です。
- AdditionalConfig: その他の情報のリストです。
次の手順は、Alipay に送信する決済データを準備することです。最初に、ユーザーは Alipay API の PaymentApplicationData SDT タイプの変数に値 (製品コード、件名、本文、金額) を設定する必要があります。この変数を GetPaymentInformation プロシージャーに入力として渡すことで、Alipay に送信可能な処理済みの情報が返されます。
GetPaymentInformation プロシージャーには中間の工程があります。つまり、送信可能な決済情報 (生成されたオーダー番号を含む) をユーザーの指示に沿って処理し、アプリケーションのデータベーステーブルに格納するといったことが可能です。このような操作は、Alipay API の OnAboutToPay プロシージャーで編集できます。
ユーザーは、Alipay API に用意されている AlipayProvider 外部オブジェクトの Pay メソッドを使用して、Alipay に決済情報を送信できます。このメソッドでは、前の手順で GetPaymentInformation プロシージャーから返された処理済みの決済情報を、PaymentInformation SDT に基づいた変数で受け取ります。
手順 4 と手順 5 のアクションを行う GeneXus スマートデバイス オブジェクト イベントのコード例を次に示します。
Event 'Pay with Alipay'
Composite
&PaymentApplicationData.ProductCode = 'Product name'
&PaymentApplicationData.TotalAmount = 1000
&PaymentApplicationData.Subject = 'Subject'
&PaymentApplicationData.Body = 'Purchase information'
GeneXus.Common.UI.Progress.ShowWithTitleAndDescription("Please Wait...","Preparing payment information...")
Alipay.GetPaymentInformation(&PaymentApplicationData, &PaymentInformation)
GeneXus.Common.UI.Progress.Hide()
if &PaymentInformation.ErrorCode > 0
Msg("Error: " + &PaymentInformation.ErrorDescription)
else
AlipayProvider.Pay(&PaymentInformation)
endif
EndComposite
Endevent
Alipay の決済結果を処理するには、2 つのアクションを行うコードを記述する必要があります。1 つ目は、OnPaymentFinished という AlipayProvider 外部オブジェクトのイベントです。このイベントは PaymentResult SDT に基づいた変数を受け取ります。これには完了した決済の ErrorCode、ErrorDescription、OrderNumber が含まれます。詳しくは、「Alipay の API」を参照してください。
このイベントのコード例を次に示します。
Event AlipayProvider.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
最後の手順は、アプリケーションの開発者が提供する決済通知サービスの呼び出しの設定です。この呼び出しは Alipay サーバーによって行われます。サービスの URL は、設定ファイルの CallbackURL パラメーターで指定したものです。既定ではこの URL は Alipay の API に含まれる CallbackService プロシージャーを参照します。このプロシージャーは HTTP データを受け取って SDT 構造 (PaymentNotificationInfo) に変換します。次に、CallbackHandler という名前の別のプロシージャーを呼び出して、その SDT を通知情報とともに処理します。
アプリケーションの登録と PFX ファイルの作成が済んだら、GeneXus の開発者は次のオブジェクトを変更するだけでアプリケーションに Alipay を連携させることができます。
- Alipay_Config.xml ファイルで設定します。
- OnAboutToPay プロシージャーで Alipay に決済データを送信する直前に決済データ処理のコードを記述します。
- 決済データを設定して、GetPaymentInformation プロシージャーとスマート デバイス オブジェクトにある AlipayProvider 外部オブジェクトの Pay メソッドを呼び出します。
- スマート デバイス オブジェクトにある AlipayProvider 外部オブジェクトの OnPaymentFinished イベントのコードを記述します。
- CallbackHandler プロシージャーで処理される通知サービスのコードを記述します。
例の詳細はこちらからダウンロードできます。
|