3

3DS の既存の実装では、チェックアウトと支払いの段階で、顧客をアプリから銀行/カード発行会社の Web サイトにリダイレクトし、そこで顧客は以前に設定したパスワードを入力して、実際にカード所有者であることを認証できます。 . その後、ウェブサイトは、トランザクションを完了するために必要な情報とともに、顧客をあなたのウェブサイトにリダイレクトします。リダイレクトに対する銀行サーバーの応答を読み取るにはどうすればよいですか? webview_flutter を介してこれを実行しようとしましたが、URL リダイレクトしか取得できません。

Widget _view3ds(PaymentAnswer answer) {
  final url = answer.model['AcsUrl'];
  return Scaffold(
    appBar: AppBar(
      title: const Text('Pay'),
    ),
    body: WebView(
      initialUrl: url,
      initialPostParameters: answer.paramPost3DS(),
      javascriptMode: JavascriptMode.unrestricted,
      onPageFinished: _pageFinished
    ),
  );
}

void _pageFinished(String url)  {
  print(url);
  url.response ??? // Is there a way to get to the server response? Maybe there is another plugin that allows this?
}

うまく機能する迅速なコードがあります:

/// Handle result from 3DS form
    func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        let urlString = request.url?.absoluteString
        if (urlString == Constants.cloudpaymentsURL) {
            var response: String? = nil
            if let aBody = request.httpBody {
                response = String(data: aBody, encoding: .ascii)
            }
            let responseDictionary = parse(response: response)
            webView.removeFromSuperview()
            post3ds(transactionId: responseDictionary?["MD"] as! String, paRes: responseDictionary?["PaRes"] as! String)
            return false
        }
        return true
    }

純粋なフラッターでこのようなものを得ることができますか?

4

2 に答える 2

1

支払い統合で発生しているフローを理解する必要があります。基本的に、アプリ、サーバー、支払いゲートウェイがあります。

アプリがサーバーへの支払いを開始し、サーバーがこの呼び出しを支払いゲートウェイにリダイレクトする場合があります。または、アプリで支払いゲートウェイのリンクを直接呼び出すこともできます (これは実装に依存します)。callbackUrlどちらの場合でも、支払いゲートウェイへの呼び出しは、何らかのパラメータで開始される可能性が最も高いでしょう。これcallbackUrlは、支払いゲートウェイが成功または失敗を通知するために使用されます。

すべてではないにしても、ほとんどの場合、callbackUrl はパブリックにアクセス可能な URL であるため、おそらくサーバーになります (アプリケーションは、支払いゲートウェイがエンドポイントを呼び出すためにパブリックにアクセスすることはできません)。支払いゲートウェイがサーバーを直接呼び出すため、アプリはまだこのデータにアクセスできないことに注意してください。次に、サーバーは HTTP リダイレクトを実行します。これは、成功ページまたはエラー ページに移動するアプリによって反映されます。

このリダイレクト URL が鍵です。後でサーバーにステータスを照会するために使用できるトランザクション ID、または次の作業に十分な情報を含む一般的な成功/失敗形式のいずれかを保持する必要があります。

また、上記は一例であることをご了承ください。サーバーで支払いフローがどのように実装されているかを理解する必要があります。

WKWebView のナビゲーション関数へのハンドルを取得するには、ナビゲーション デリゲートを使用します: https://developer.apple.com/documentation/webkit/wknavigationdelegate

具体的には、デリゲート メソッドを確認し、URL を取得するための適切なハンドルを選択する必要があります。次のことが役立つと思います。

func webView(WKWebView, didReceiveServerRedirectForProvisionalNavigation: WKNavigation!)
于 2019-08-18T20:11:31.433 に答える