1

私は多数の e-comm サイトを複数の銀行に統合していますが、最も簡単な方法は dotnetcharge (www.dotnetcharge.com) ライブラリを追加することだと判断しました。これはうまく機能し、銀行の種類や取引ごとに多くのコードを同じに保つことができることを意味します。ただし、彼らのサポートは少しお粗末で (4 通のメールが送信され、1 通の返信)、3D セキュアの問題については完全に困惑しています。

dotnetcharge と 3D セキュアの経験がある人はいますか? MerchantURL を設定すると、実際の 3D セキュア画面が表示されますが、システムを適切に「フロー」させる方法がわかりません。誰かがコード例や正しい方向へのポインタを持っていますか? それができない場合、サポートを応答させる方法を知っている人はいますか?

この特定の統合は SagePay との統合であり、SagePay も非常にひどいドキュメントとサポートを備えています。

参照用のコードは次のとおりです。

        Dim Amount As Decimal = ordertotal
        ' ApplySecure3D options:
        ' 0 = If 3D-Secure checks are possible and rules allow, perform the checks and apply the authorization rules. 
        ' 1 = Force 3D-Secure checks for this transaction only (if your account is 3D-enabled) and apply rules for authorization.
        ' 2 = Do not perform 3D-Secure checks for this transaction only and always authorize.
        ' 3 = Force 3D-Secure checks for this transaction (if your account is 3D-enabled) but ALWAYS obtain an auth code, irrespective of rule base.
        Dim ProtxLogin As String = "xxx"
        Dim ProtxPassword As String = "xxx"
        Dim ProtxApply3DSecure As Integer = 1
        Dim ProtxMerchantURL As String = "https://www.mydomain.com/processing/"

        Dim Number As String = txtCardNo.Text '//luhn/mod10 here.
        Dim AVS As String = txtCVN.Text
        Dim DD As String = "01"
        Dim MM As String = ddlValidTo_month.SelectedValue.ToString()
        Dim YY As String = ddlValidTo_year.SelectedValue.ToString()

        Dim ProcessingResult As Integer = 0
        Dim Protx As New dotnetCHARGE.CC()

        Protx.Login = ProtxLogin
        Protx.Password = ProtxPassword
        Protx.ApplySecure3D = ProtxApply3DSecure
        Protx.MerchantUrl = ProtxMerchantURL

        Dim AVSResponse As String = ""
        Dim CVV2 As String = ""

        Protx.OrderID = GoogleOrderNumber
        Protx.Month = MM
        Protx.Year = YY
        Protx.TransactionType = dotnetCHARGE.TransactionType.Sale
        Protx.Amount = ordertotal
        Protx.Number = Number
        Protx.Currency = "GBP"
        Protx.CustomerID = CustomerId
        '//loads of params removed for brevity
        Protx.ClientIP = Request.UserHostAddress.ToString()
        Protx.CardType = ddlCardType.SelectedValue.ToString()
        Protx.Description = "My Order"
        Protx.Code = AVS
        Protx.TestMode = True
        Protx.TransactionType = dotnetCHARGE.TransactionType.Sale

        ProcessingResult = Protx.Charge(Processor.Protx)

助けていただければ幸いです。

4

1 に答える 1

0

最終結果がどのように達成されたかを説明するために、この質問に戻ることにしました。うまくいけば、何人かの SO ユーザーが役に立つと思うでしょう。

正しい「フロー」を実現するには、2 ページが必要です。1 つのページでトランザクション処理全体を実行することは、現実的には不可能です。最初のページには、カード エントリの詳細が表示されます。カード番号、有効期限、CVN、請求先住所など。支払い/送信を押すと、トランザクションを「未処理」または同様のものとしてデータソースに保存することをお勧めします。すべての詳細が保存されたら (これまでカード処理は行われていません)、HTTPS で 2 番目のページにリダイレクトします。

設定方法によっては、顧客がこのページの存在を知らない場合があります。2 番目のページには、私の質問として .netCharge コードが含まれており、カードを処理します。3D セキュアが有効になっている場合 (.Apply3DSecure = 1)、顧客は銀行にリダイレクトされて詳細を入力し、この 2 番目のページに戻ります。ポストバックや更新のようには動作しないため、ページ処理への戻り呼び出しが 2 回発生することを心配する必要はありません。3 つのステータスのうちの 1 つを受け取ります。承認済み、エラー、拒否。あなたのページはさらに必要なページにリダイレクトできます (したがって、顧客はこの中間ページが存在することを決して知りません)、またはこの処理ページに結果を直接表示できます。

最後に 1 つの「落とし穴」がありますが、これはすぐにわかります。2 番目のページ (処理ページ) では、実際に処理するためにカードの詳細が必要です。カードの詳細をフォームやクエリ文字列で渡すことはできません。それは無責任です。.netCharge には .Encrypt および .Decrypt 関数が付属しています。暗号化する値と何らかのハッシュを渡し、これらの詳細を最初のページに一時的に保存し、2 番目のページで読み取りと復号化を行ってから削除します。これは、詳細が安全であることを意味し、ほとんどの場合 5 秒未満しか保存されず、破棄されるため公開されません。

これがお役に立てば幸いです。ご不明な点がございましたら、お気軽にお問い合わせください。

于 2010-06-30T10:13:40.953 に答える