eコマースWebアプリケーションを構築しており、顧客が注文を簡単に支払うことができるように、いくつかの支払い方法(Visa、MasterCardなど)をサポートする必要があります。これを自分で実装するのではなく、信頼できるサードパーティプロバイダーに頼ってこれらのサービスを提供することにします。
支払いサービスを提供するベルギー出身の有名な会社は賛成です。 40を超える国際的および地元の支払い方法を提供します。顧客、オンラインショップ、支払い方法のプロバイダー(Visaなど)の間の支払い取引を処理します。
もちろん、Ogoneが処理するトランザクションごとに少額を支払う必要がありますが、統合された詐欺保護、セキュリティ、支払いを管理するためのツールなどを購入します。これらすべてを自分で実装するコストははるかに大きいです。
そのため、agoneアカウントにサインアップし、システムをWebアプリケーションに統合することにしました。
どうすればこれを実現できますか?見つけましょう...
まず最初に、OgoneのWebサイトにアクセスして、無料のテストアカウントにサインアップしてください。サイトの右上隅で、「無料のテストアカウントを作成」というラベルの付いたボタンを見つけます。
図1-テストアカウント

それをクリックして、結果のフォームに記入します。このフォームに入力したデータが正しいことを確認してください。新しいテストアカウントのリクエストを送信した後、Ogoneの従業員はお客様の詳細を確認し、結果に応じてリクエストを承認または拒否します。このプロセスには数時間かかる場合があります。非常に迷惑ですが、それを回避する方法はありません。
アカウントが承認されると、パスワードを含む電子メールが届きます。これで、Ogone Merchant Administrationにログオンする準備ができました。
テストアカウントの使用を開始する前に、次の設定を構成する必要があります。
サブスクリプションオプションを構成するには、画面の左側のメニューに表示されているオプションアカウントをクリックします。
図2-商人管理メニュー

アカウントページで、いくつかのオプションが表示されます。オプション「サブスクリプション」を選択します。これで、サブスクリプションタイプを選択する必要があります。 「アドベンチャー」を選択し、「確認」というラベルの付いたボタンをクリックします。
ここでは、詐欺検出、画像ホスティング、請求書の外観など、多くのオプションをサブスクリプションに追加できます。このデモでは、追加のオプションは必要ありませんので、[確認]をクリックして設定を保存してください。
サブスクリプションタイプを構成した後、お客様に提供する支払い方法を追加して先に進むことができます。 Merchant Administrationメニューのオプション支払い方法をクリックします(図2)。 「選択された支払い方法」リストにビザを追加した後、この支払い方法を編集してアクティブ化するように設定する必要があります。
図3-ビザ支払い方法をアクティブにします

図3に示す編集オプションをクリックするだけで、支払い方法をアクティブ化されたもの(アクティベーション:はい)にマークし、[送信]をクリックします。カード番号4111 1111 1111 1111を使用して、ビザの支払いをテストできます。有効期限と3桁のセキュリティコードのために何かを入力するだけです。
最後になりましたが、オンライン支払いの処理方法を決定する技術的な設定を構成する必要があります。メニューに表示されているオプションの技術情報をクリックして続行します(図2)。
結果のページは、次のタブに分割されます。
これらのリンクをクリックして、ogoneテストアカウントを構成した方法をスクリーンショットに表示します。 Sha-1-inとsha-1-outの署名を「microsoftaspnet4」に設定しました。後でこれに戻ります。
これで、OGONEテストアカウントを作成して構成しました。最初のオンライン支払いをする準備ができました。
独自のASP.NET対応Webサイト内にogoneの支払いを統合する方法を示す簡単なASP.NET Webアプリケーションプロジェクトを作成しました。
図4-ソリューション

このWebアプリケーションには、ほんの一握りのページのみが含まれています。
注:ご覧のとおり、プロジェクトにはいくつかのコードファイルも含まれています。これらについては、次のセクションで説明します。これらのファイルには、支払いプロセスをogoneで処理するために必要なコードが含まれています。デザインを自由に改善してください。物事を機能させるために、最小限のコードを含めました。
以下に表示されている開始支払いボタンをクリックしないでください。これは単なるスクリーンショットです。これは、default.aspxページのように見えるものです。
図5-デフォルト.aspxページ

リファレンス(または注文ID)が生成され、支払われている注文を一意に識別します。 Ogoneはこれらの参照を追跡します。同じ参照を2回処理することはできません。そのため、この例にはランダムに生成されたGUIDを使用することを選択しました。 ogoneはこの制限を超えていないため、GUIDを30文字に短縮する必要がありました。
明らかに、このリファレンスに加えて、支払わなければならない金額を指定する必要があります。この例コードは、問題の顧客の電子メールアドレスに沿って送信されます。このようにして、支払いが正常に処理されたことを顧客に電子メールで送信できます。
ボタンのクリックイベントの後ろに隠されているコードを見てみましょう。
リスト1-支払いを要求します
// Persist order to database
// ...
OgoneRequest ogoneRequest = new OgoneRequest ( ) ;
ogoneRequest . RequestPayment ( this . _reference , amount , customerEmail ) ;
// Clear shopping cart
// ...OgoneRequestクラスの新しいインスタンスを作成し、RequestPayment(...)メソッドを呼び出すことにより、支払いを開始できます。この方法には、3つのパラメーター、つまり注文参照、支払う必要のある金額、および顧客の電子メールアドレスが必要です。
リスト2 -OgoneRequestコンストラクター
public OgoneRequest ( )
{
OgoneUrl = ConfigurationManager . AppSettings [ "Ogone_Url" ] ;
Psid = ConfigurationManager . AppSettings [ "Ogone_PSID" ] ;
ShaKey = ConfigurationManager . AppSettings [ "Ogone_SHA1_IN" ] ;
Currency = ConfigurationManager . AppSettings [ "Ogone_Currency" ] ;
Language = ConfigurationManager . AppSettings [ "Ogone_Language" ] ;
AcceptUrl = ConfigurationManager . AppSettings [ "Ogone_AcceptUrl" ] ;
ExceptionUrl = ConfigurationManager . AppSettings [ "Ogone_ExceptionUrl" ] ;
CancellationUrl = ConfigurationManager . AppSettings [ "Ogone_CancellationUrl" ] ;
}OgoneRequestクラスのコンストラクターは、アプリケーションの構成ファイル(web.config)からいくつかの値を読み取ることにより、いくつかのプロパティを初期化します。支払いプロセスを開始するために呼び出すURLを指定する必要があります、Ogone PSID(ユーザー名)、マーチャント管理で指定したSHA1-inキー、リダイレクトURL ...など。
リスト3 -RequestPayment(...)メソッド
public void RequestPayment ( string reference , double amount , string email )
{
// Multiply by one hundred and round to zero decimals
amount = Math . Round ( amount * 100 , 0 ) ;
RemotePost post = new RemotePost { Url = this . OgoneUrl } ;
post . Add ( "pspid" , this . Psid ) ;
post . Add ( "orderid" , reference ) ;
post . Add ( "amount" , amount . ToString ( ) ) ;
post . Add ( "currency" , this . Currency ) ;
post . Add ( "language" , this . Language ) ;
post . Add ( "email" , email ) ;
// Hash
post . Add ( "SHASign" , Ogone . GenerateHash (
reference + amount + this . Currency +
this . Psid + this . ShaKey ) ) ;
// Redirection URLs
post . Add ( "accepturl" , this . AcceptUrl ) ;
post . Add ( "exceptionurl" , this . ExceptionUrl ) ;
post . Add ( "cancelurl" , this . CancellationUrl ) ;
post . Post ( ) ;
}RequestPayment(...)メソッドは、RemotePostクラスを使用してHTTP投稿を作成することにより、新しい支払いプロセスを開始します。必要な情報はすべて、PSID、支払う必要のある金額、言語、SHA1サインなど、必要なすべての情報が投稿に含まれています。
Merchant Administrationで構成したSHA1-IN署名を使用してSHA1ハッシュを計算する必要があります。 Ogoneは、このハッシュに参照、金額、通貨、およびPSIDも含める必要があると述べています。後でSHA1ハッシュの計算に戻ります。
備考:HTTP投稿は、支払いが行われたときに使用される、キャンセルされた時などに使用されるいくつかのリダイレクトURLに沿って送信されます。これらを提供しない場合、商人管理で構成されているデフォルトのURLが使用されます(テクニカル情報の下のトランザクションフィードバックタブ)。
図6-支払い確認

支払いプロセスを開始した後、上の図に示すように、新しいページにリダイレクトされます。 HTTP投稿で追加のパラメーターを指定することにより、このページのレイアウトを変更できます。この記事の詳細については、この記事に付随するソースコードと公式のOgoneドキュメントをご覧ください。
ユーザーが[キャンセル]ボタンをクリックすると、支払いプロセスが終了すると、支払いcancelled.aspxページにリダイレクトされます。このページは、ユーザーが支払いプロセスをキャンセルしたというメッセージを表示するだけです。
ただし、支払いプロセスに関するすべての関連情報がクエリ文字列に含まれるように、OGONEアカウントを構成しました。例えば:
http:// localhost:3767/paymentcancelled.aspx?orderid = 246cf6f0-8bad-4edb-806c-eed3fb&currency = eur&rumant = 19.99&pm = creditcard&acceptance =&status = 1 &cardno =&ed =&cn =&trxdate = 04%2f08%2f10&payid = 6806803&ncerror =&brand = ...など。
元の注文参照、金額、支払い方法(ビザ)、支払い成功ステータスなどの情報を抽出できます。必要に応じて、この情報を記録または破棄できます。それはあなた次第です。 Ogoneには、Merchant Administrationで構成されたSHA1-Outの署名の助けを借りて構成されたSHA1ハッシュも含まれています。このハッシュを使用すると、クエリ文字列に存在するデータの要求と妥当性を行った人の身元を確認できます。
支払いプロセスが正常に完了した場合、OgoneはユーザーをPaymentAccepted.aspxページにリダイレクトします。クエリ文字列には同じデータも含まれます。ページのロードイベント中に、支払いのステータスとSha Hashの有効性が確認されます。両方が正しい場合、支払いは受け入れられます。
リスト4 -PaymentAccepted.aspxページロードイベントハンドラー
OgonePaymentStatus status = OgoneResponse . Status ;
// Invalid Sha key returned from Ogone?
bool paymentSucceeded = OgoneResponse . IsShaSignValid && Ogone . IsPaymentStatusValid ( status ) ;備考:ogoneには、クエリ文字列にステータス(整数)というパラメーターが含まれています。このステータスは、支払いのステータスを通知します。この記事のサンプルコードは、これらの値のいくつかをOgonepaymentStatusと呼ばれる列挙に包みました。すべての可能な値のリストについては、公式のOgoneドキュメントをご覧ください。 IsPaymentStatusValid(...)メソッドは、着信ステータスパラメーターが支払いが行われたことを通知する値の1つである場合に検証します。
Ogoneresponseクラスのタイプは、ユーザーをサイトにリダイレクトするときにogoneが含むクエリ文字列パラメーターの処理を処理する小さなラッパーです。
リスト5は、このクラスからの小さな抜粋を示しています。 ISShasignValidプロパティは、アプリケーションの構成ファイル(web.config)からSHA1-OUT署名を読み取り、SHA符号を再計算します。これを行うには、金額、注文参照、通貨などなど、他のデータを含める必要があります。 (詳細については、公式のOgoneドキュメントを参照してください)。
計算されたSHAサインがクエリ文字列に含まれるものと一致する場合、ogoneから発生するリクエストを扱い、クエリ文字列パラメーターのデータが有効です。
リスト5 -Ogoneresponseクラス
public static class OgoneResponse
{
public static string OrderId { get { return HttpContext . Current . Request [ "orderid" ] ; } }
public static string Amount { get { return HttpContext . Current . Request [ "amount" ] ; } }
public static string ShaSign { get { return HttpContext . Current . Request [ "shasign" ] ; } }
public static bool IsShaSignValid
{
get
{
string key = OrderId + Currency + Amount + PaymentMethod + AcceptanceCode +
( int ) Status + CardNumber + PaymentId + NcError + Brand +
ConfigurationManager . AppSettings [ "Ogone_SHA1_OUT" ] ;
return ShaSign == Ogone . GenerateHash ( key ) ;
}
}
} リスト6は、文字列のSHA1ハッシュを計算する方法の1つを示しています。文字列はバイト配列に変換され、sha1cryptoserviceproviderを使用してエンコードされます。結果のハッシュは、16進形式に変換されます。
リスト6- SHA1ハッシュの計算
public static string GenerateHash ( string input )
{
byte [ ] bytes = new ASCIIEncoding ( ) . GetBytes ( input ) ;
SHA1CryptoServiceProvider sha = new SHA1CryptoServiceProvider ( ) ;
byte [ ] hash = sha . ComputeHash ( bytes ) ;
StringBuilder result = new StringBuilder ( ) ;
for ( int i = 0 ; i < 20 ; i ++ )
{
string temp = hash [ i ] . ToString ( "X2" ) ;
if ( temp . Length == 1 )
{
temp = "0" + temp ;
}
result . Append ( temp ) ;
}
return result . ToString ( ) ;
}そしてこれで、記事は終わります...
OGoneの支払いサービスをeコマースWebアプリケーションと統合する方法に関するこのチュートリアルをお楽しみください。開発者の観点からカバーしたものを要約するには: