【问题标题】:How to handle payment gateway via webview in android如何在android中通过webview处理支付网关
【发布时间】:2018-01-16 21:53:10
【问题描述】:

我们在我们的项目中添加一个活动,用户可以通过它购买一些东西,我们打开客户在我们的网络视图中提供给我们的 URL。 他们使用 ccavenus 付款方式。 在购买完成后的某些手机上,ccavenus 重定向 URL 卡住了,它会无限长地显示微调器。 并且在某些手机上 URL 重定向工作顺利,用户可以购买东西。

你们能帮我们解决这个问题吗?这是我们的网页视图代码。

private void launchWebView(String URL)
    {

            webView.setInitialScale(1);
            webView.getSettings().setLoadWithOverviewMode(true);
            webView.getSettings().setUseWideViewPort(true);

            webView.getSettings().setJavaScriptEnabled(true);

            webView.getSettings().setAllowFileAccess(true);
            webView.getSettings().setAllowContentAccess(true);
            webView.setScrollbarFadingEnabled(false);


            webView.setWebChromeClient(new WebChromeClient(){
                @Override
                public void onProgressChanged(WebView view, int newProgress) {
                    if(newProgress == 100){
                        mProgressBar.setVisibility(View.GONE);
                    }else{
                        mProgressBar.setVisibility(View.VISIBLE);
                        mProgressBar.setProgress(newProgress);
                    }
                }

            });

        webView.setWebViewClient(new WebViewClient(){

            public boolean shouldOverrideUrlLoading(WebView view,String url){
                return false;
            }
            //To Handle SSL Errors
            @Override
            public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) {
                final AlertDialog.Builder builder = new AlertDialog.Builder(context);
                builder.setMessage("The site's security certificate is not trusted!");
                builder.setPositiveButton("Proceed anyway", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        handler.proceed();
                    }
                });
                builder.setNegativeButton("Back To safety", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        handler.cancel();
                    }
                });
                final AlertDialog dialog = builder.create();
                dialog.show();
            }
        });


            webView.loadUrl(URL);

            mProgressBar = (ProgressBar)findViewById(R.id.offer_page_progressbar);
            mProgressBar.setMax(100);


    }

【问题讨论】:

    标签: android webview payment-gateway ccavenue


    【解决方案1】:

    使用所需的权限

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
        <uses-permission android:name="android.permission.INTERNET" />
    

    为 webview 使用 xml 文件 显示任何视图

    <?xml version="1.0" encoding="utf-8"?>
    <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">
    
        <WebView
            android:id="@+id/webView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:visibility="gone"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
    
        <LinearLayout
            android:id="@+id/linNtWkOff"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@color/white"
            android:visibility="visible"
            android:gravity="center_vertical"
            android:orientation="vertical">
            <ImageView
                android:layout_width="match_parent"
                android:layout_height="300dp"
                android:src="@drawable/img_ntwk_conn"/>
            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textSize="14sp"
                android:gravity="center_horizontal"
                android:textColor="@color/black"
                android:text="Internet Connection Unavailable"/>
        </LinearLayout>
    
    </androidx.constraintlayout.widget.ConstraintLayout>
    

    我使用 webView 在 baseActivity 中使用网络检查 //有以下参数:

        public class MainActivity extends BaseActivity {
    
        private WebView mWebView;
        LinearLayout linNtWkOff;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            linNtWkOff = findViewById(R.id.linNtWkOff);
            mWebView = (WebView) findViewById(R.id.webView);
        }
    
        @Override
        protected void onResume() {
            super.onResume();
            if (checkInternetConnection()){
                setNetWorkON();
            }else {
                setNetWorkOFF();
            }
            mWebView.setWebViewClient(new MyBrowser());
            WebSettings webSettings = mWebView.getSettings();
            webSettings.setJavaScriptEnabled(true);
            webSettings.setLoadsImagesAutomatically(true);
            mWebView.loadUrl("-----write your url------");
        }
    
        private class MyBrowser extends WebViewClient {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
        }
    
        @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
            if (event.getAction() == KeyEvent.ACTION_DOWN) {
                switch (keyCode) {
                    case KeyEvent.KEYCODE_BACK:
                        if (mWebView.canGoBack()) {
                            mWebView.goBack();
                        } else {
                            finish();
                        }
                        return true;
                }
            }
            return super.onKeyDown(keyCode, event);
        }
    
    
        public void setNetWorkON(){
            linNtWkOff.setVisibility(View.GONE);
            mWebView.setVisibility(View.VISIBLE);
        }
        public void setNetWorkOFF(){
            linNtWkOff.setVisibility(View.VISIBLE);
            mWebView.setVisibility(View.GONE);
        }
    
        private boolean checkInternetConnection() {
            ConnectivityManager manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo ni = manager.getActiveNetworkInfo();
            boolean isConnected;
            if (ni != null && ni.getState() == NetworkInfo.State.CONNECTED) {
                isConnected =true;
            } else {
                isConnected= false;
            }
            return isConnected;
        }
    }
    

    BaseActivity 用于新工作连接检查

    public class BaseActivity extends AppCompatActivity {
    
        private static final int WIFI_ENABLE_REQUEST = 0x1006;
    
        private BroadcastReceiver mNetworkDetectReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                checkInternetConnection();
            }
        };
        private AlertDialog mInternetDialog;
        private boolean isConnected;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            isConnected = false;
            registerReceiver(mNetworkDetectReceiver, new IntentFilter(android.net.ConnectivityManager.CONNECTIVITY_ACTION));
        }
    
        @Override
        protected void onDestroy() {
    
            unregisterReceiver(mNetworkDetectReceiver);
            super.onDestroy();
        }
    
        private void checkInternetConnection() {
            ConnectivityManager manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo ni = manager.getActiveNetworkInfo();
    
            if (ni != null && ni.getState() == NetworkInfo.State.CONNECTED) {
                isConnected =true;
                //showNoConnectionSnackBar("Connected", isConnected, 1500);
                onResume();
            } else {
                isConnected= false;
                //showNoConnectionSnackBar("No active Internet connection found.", isConnected,10000);
                onResume();
            }
        }
    
        private  void showNoConnectionSnackBar(String message, boolean isConnected, int duration) {
            Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content),
                    message, duration);
            View sbView = snackbar.getView();
            TextView textView = (TextView) sbView
                    .findViewById(R.id.snackbar_text);
            textView.setTextColor(ContextCompat.getColor(this, android.R.color.white));
    
            if (isConnected){
                sbView.setBackgroundColor(getResources().getColor(R.color.purple_500));
    
            }else{
                sbView.setBackgroundColor(getResources().getColor(R.color.purple_500));
                snackbar.setAction("Turn On", new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        Intent internetOptionsIntent = new Intent(android.provider.Settings.ACTION_WIFI_SETTINGS);
                        startActivityForResult(internetOptionsIntent, WIFI_ENABLE_REQUEST);
                    }
                });
                snackbar.setActionTextColor(getResources().getColor(R.color.purple_500));
            }
    
            snackbar.show();
        }
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    
            if (requestCode == WIFI_ENABLE_REQUEST) {
    
            } else {
    
                super.onActivityResult(requestCode, resultCode, data);
    
            }
        }
    
    }
    

    【讨论】:

    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
    【解决方案2】:
       private void startWebView(String url) {
        webview.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
    
            //Show loader on url load
            @Override
            public void onLoadResource(WebView view, String url) {
            }
    
            @Override
            public void onPageFinished(WebView view, String url) {
    
                try {
    
                    if (url.contains("/wallet-recharge/failed")) {
                        finishMethod();
                    } else if (url.contains("/wallet-recharge/pay-completed")) {
                        webview.clearHistory();
                        Intent broadcastIntent = new Intent();
                        broadcastIntent.setAction("com.package.ACTION_CLASS_CABILY_MONEY_REFRESH");
                        sendBroadcast(broadcastIntent);
                        finishMethod();
                    } else if (url.contains("/wallet-recharge/pay-cancel")) {
                        finishMethod();
                    }
    
                } catch (Exception exception) {
                    exception.printStackTrace();
                }
            }
        });
    
        //Load url in webView
        webview.loadUrl(url);
    }
    

    【讨论】:

    • 您能否解释一下您的代码,或任何有关它的链接/教程/博客。
    猜你喜欢
    • 2021-09-27
    • 2020-09-11
    • 2011-01-24
    • 1970-01-01
    • 2023-03-25
    • 2010-12-05
    • 2023-03-14
    • 2019-04-20
    • 2017-09-23
    相关资源
    最近更新 更多