Payfort使用3-D安全信用卡

时间:2017-09-18 06:51:06

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

我正在使用Payfort sdk使用我的应用程序进行在线支付,一切都完全集成并且运行正常,在付款时,我可以使用普通卡进行付款而不用担心,但使用 3-D安全卡我必须输入密码进行验证,因此,带有密码字段的(由Visa验证)webview会自动打开并显示所需的详细信息。

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

我甚至不知道如何弄清楚它现在已经打开,因为我没有收到任何相应的回调。

enter image description here

浏览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,因此存在问题,但我找不到该代码的任何问题,任何一切都是直接链接。

1 个答案:

答案 0 :(得分:0)

终于发现了这个问题,它是一个名为R.layout.web_dialog Payfort 布局中的一个Bug,它有一个webview可以通过payfort showVerificationDialog()内部的方法访问R.layout.web_dialog 3}} class。

问题是,布局webView无法获得焦点,因为布局只包含showVerificationDialog(),并且没有任何其他内容可以将焦点放在布局上能够启动KB(Start),并且如上一个问题链接中所述,它是一个众所周知的Android Bug。

所以,要解决这个问题,我必须复制&粘贴整个Start类,并在对webView方法应用更改后直接从新复制的版本访问payfort。关于有助于克服该问题的更改,请查看have a look here(在我的情况下不起作用),或者您可以提供包含虚拟对象的新EditText布局&安培;如同this answer中所述,在同一问题链接中隐藏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; } 方法夸大您的新布局而不是Payfort发起的默认布局:

<?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>

<强> webview_dialog.xml:

Import-Module myModule -Force