【问题标题】:Payfort with 3-D Secure Credit Cards使用 3-D 安全信用卡支付
【发布时间】:2018-02-26 15:06:30
【问题描述】:

我正在使用Payfort sdk 使用我的应用程序进行在线支付,一切都已完全集成并且工作正常,在付款时,我可以毫无顾虑地使用普通卡进行支付,但是使用 3-D 安全卡 我必须输入密码进行验证,因此,带有密码字段的(由 Visa 验证的)网络视图会自动打开并显示所需的详细信息。

这里的问题是当点击密码字段时它获得焦点但键盘没有打开以写入密码,打开的 web 视图不是我的应用程序的视图,我无法控制它但是关闭。

我什至不知道如何确定它现在已打开,因为我没有收到任何相应的回调。

通过 Payfort 代码导航,我发现他们发出了一个 AlertDialog,其布局包含一个 webView,它需要显示验证页面链接:

 private Dialog showVerificationDialog(Context context, String url, VerificationDialogDismissListener onDialogListener) {
    LayoutInflater layoutInflater = LayoutInflater.from(context); // context here is MyActivity context
    View view = layoutInflater.inflate(R.layout.web_dialog, null);
    DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();

    // just to display the Dialog at 80% of the screen
    view.setMinimumHeight((int) (displayMetrics.heightPixels * 0.8f));
    view.setMinimumWidth((int) (displayMetrics.widthPixels * 0.8f));

    // setting the webView
    WebView webView = (WebView) view.findViewById(R.id.webView);
    webView.setWebViewClient(new WebViewClient());
    webView.getSettings().setJavaScriptEnabled(true);
    webView.loadUrl(url);

    // setting the Dialog
    AlertDialog.Builder builder = new AlertDialog.Builder(context)
            .setView(view)
            .setOnCancelListener(onDialogListener);
    if (Build.VERSION.SDK_INT >= 17) {
        builder.setOnDismissListener(onDialogListener);
    }
    Dialog dialog = builder.create();
    dialog.show();

    return dialog;
}

此对话框包含用于验证过程的 webView,因此存在问题,但我找不到该代码的任何问题,任何所有内容都直接链接。

【问题讨论】:

    标签: android android-keypad 3d-secure payfort


    【解决方案1】:

    终于发现了这个问题,这是一个名为 R.layout.web_dialogPayfort 布局中的错误,它有一个 web 视图,可以通过 payfort Start 类中的方法 showVerificationDialog() 访问。

    问题在于布局 R.layout.web_dialog 无法获取焦点,因为布局仅包含 webView 并且没有其他东西可以将焦点赋予布局以便它能够启动 KB (have a look here),并且如上一个问题链接中所述,这是一个众所周知的 Android Bug。

    因此,为了解决该问题,我必须在对 showVerificationDialog() 方法进行更改后直接复制并粘贴整个 Start 类并从新复制的版本中访问 payfort。关于有助于克服该问题的更改,请查看 this answer(在我的情况下不起作用),或者您可以提供一个新的 webView 布局,其中包含一个虚拟和隐藏的 EditText 为在同一问题链接的my answer 中声明,然后膨胀您的新布局,而不是由 Payfort 在showVerificationDialog() 方法发起的默认布局:

    private Dialog showVerificationDialog(Context context, String url, PayfortStarter.VerificationDialogDismissListener onDialogListener) {
        isVerifying = true;
        isOTP = true;
        LayoutInflater layoutInflater = LayoutInflater.from(context);
        View view = layoutInflater.inflate(R.layout.webview_dialog, null);
        DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
        view.setMinimumHeight((int) (displayMetrics.heightPixels * WEB_VIEW_SCREEN_PERCENTS));
        view.setMinimumWidth((int) (displayMetrics.widthPixels * WEB_VIEW_SCREEN_PERCENTS));
    
        WebView webView = (WebView) view.findViewById(R.id.webView);
        webView.setWebViewClient(new WebViewClient());
        webView.getSettings().setJavaScriptEnabled(true);
        webView.loadUrl(url);
    
        AlertDialog.Builder builder = new AlertDialog.Builder(context)
                .setView(view)
                .setOnCancelListener(onDialogListener);
        if (Build.VERSION.SDK_INT >= 17) {
            builder.setOnDismissListener(onDialogListener);
        }
        Dialog dialog = builder.create();
        dialog.show();
    
        return dialog;
    }
    

    webview_dialog.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <EditText
            android:id="@+id/kb_holder"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:inputType="text"
            android:maxLines="1"
            android:visibility="gone" />
    
        <WebView
            android:id="@+id/webView"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    
    </FrameLayout>
    

    【讨论】:

      猜你喜欢
      • 2013-07-30
      • 2013-04-17
      • 2019-06-24
      • 1970-01-01
      • 2013-04-04
      • 2011-02-22
      • 2015-01-29
      • 2015-01-16
      • 2018-01-13
      相关资源
      最近更新 更多