android 建行龙支付教程2:传递支付url给建行,获取支付数据并处理

目录:前言

            android 建行龙支付教程1:支付url的拼接

            android 建行龙支付教程2:传递支付url给建行,获取支付数据并处理

            android 建行龙支付教程3:从建行app获取支付结果

            demo下载

通过

获取到支付url后,需要把这一串url传递给建行,传递方法很简单,用webView打开url就行:

String url = new CcbPayUtils().pay(价格,订单号,说明);
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl(url);

打开建行app:

把url传递给建行后,建行会传回一个h5的支付网页和一个带mbspay协议和支付信息的url,通过 webView.setWebViewClient()获取到回传的url再进行处理

 webView.setWebViewClient(new WebViewClient() {
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
               //获取建行返回的支付信息,mbspay开头则跳转到建行app
                //判断用户有没有安装建行app,有的话跳转到建行app,没有的话不做任何处理就是h5支付
                if(url.startsWith("mbspay:")) {
                PackageManager pm = getPackageManager();
                Intent checkIntent =                 pm.getLaunchIntentForPackage("com.chinamworld.main");
                
                if (checkIntent != null) {
                    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                    startActivity(intent);
                }
                return true;
            }else

            {
                return false;
            }
            }


        });

当用户使用h5支付时,可以直接获取到支付回调码(通知串),也就是支付结果:

h5支付返回的回调码格式为:手机银行网页反馈地址+通知串,

手机银行网页反馈地址在设置实时反馈地址时一起设置的,参考填写反馈地址

通知串格式为:

POSID=000000000&BRANCHID=110000000&ORDERID=19991101234&PAYMENT=500.00&CURCODE=01&REMARK1=&REMARK2=&ACC_TYPE=12&SUCCESS=Y&TYPE=1&REFERER=http://www.ccb.com/index.jsp&CLIENTIP=172.0.0.1&ACCDATE=20100907&USRMSG=T4NJx%2FVgocRsLyQnrMZLyuQQkFzMAxQjdqyzf6pM%2Fcg%3D&INSTALLNUM=3&ERRMSG=&USRINFO= T4NJx%2FVgocRsLyQnrMZLyuQQkFzMAxQjdqyzf6pM%2Fcg%3D&DISCOUNT=1.00&SIGN=317b7dd349c1fbcabc26a20ba117a778da5a685c588be5e7378682651062a25b0885e36ee237c19a143f7271c9529a0e9bf198c8735709dc74233d96e1a276cec9d4835422bee597100b0a47d11b44dbba74bdf9cbde0587f138141ce79a3536733d5f6b53ed119c13708dca52ee8d3fcf7e67dcdb20053889adff1989a8c859

其中SUCCESS为支付结果标志,SUCCESS = Y说明支付成功,获取通知串的方法可以参考:

 webView.setWebViewClient(new WebViewClient() {
            public boolean shouldOverrideUrlLoading(WebView view, String url) {


                //判断开头是否为手机银行网页反馈地址
                if (url.startsWith("设置反馈地址时的手机银行网页反馈地址")) {
                    //提取回调信息关传递
                    String CCBPARAM = "";
                    String[] split = url.split("?");
                    if (split.length == 2)
                        CCBPARAM = split[1];

                    //CCBPARAM即为通知串,判断其中是否有"SUCCESS=Y",有的话即为支付成功


                    return true;
                }
            }

        });

完成的调用支付可以参考:

public class CCBPayActivity extends AppCompatActivity {

    private WebView webView;
    private ProgressBar progressBar;
    private ProgressDialog dialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ccb_pay);
        webView = findViewById(R.id.webview);
        progressBar = findViewById(R.id.ProgressBar);
        dialog = new ProgressDialog(this);
        dialog.setMessage("支付数据加载中");

        String url = new CcbPayUtils().pay(0.01, "123456789", "");
        WebSettings settings = webView.getSettings();
        settings.setJavaScriptEnabled(true);
        settings.setAllowFileAccess(false);
        settings.setSupportZoom(true);
        settings.setCacheMode(WebSettings.LOAD_NO_CACHE);
//        settings.setUserAgentString("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.134 Safari/537.36");
        //自适应屏幕
        settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
        settings.setUseWideViewPort(true);
        settings.setLoadWithOverviewMode(true);
        settings.setBuiltInZoomControls(true);
        settings.setDisplayZoomControls(false);


        webView.requestFocusFromTouch();
        webView.loadUrl(url);
        dialog.show();
        webView.setWebViewClient(new WebViewClient() {
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                //  重写此方法表明点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边
                if (url.startsWith("mbspay:")) {
                    PackageManager pm = getPackageManager();
                    Intent checkIntent = pm.getLaunchIntentForPackage("com.chinamworld.main");
                    //判断是否有安装建行app
                    if (checkIntent != null) {
                        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                        startActivity(intent);
//                        webView.loadUrl("");
                    } else {
                        showToast("未安装建行app");
                    }
                    return true;
                } else if (url.startsWith("设置反馈地址时的手机银行网页反馈地址")) {
                    //提取回调信息关传递
                    String CCBPARAM = url.replace("手机银行网页反馈地址", "");
                    //CCBPARAM即为通知串,判断其中是否有"SUCCESS=Y",有的话即为支付成功
                    if(!TextUtils.isEmpty(CCBPARAM)&&CCBPARAM.contains("UCCESS=Y")){
                        //支付成功
                    }else {
                        //支付失败
                    }
                    return true;
                } else {
                    return false;
                }
            }


        });

        webView.setInitialScale(100);
        webView.setWebChromeClient(new WebChromeClient() {
            @Override
            public void onProgressChanged(WebView view, int newProgress) {
                progressBar.setProgress(newProgress);
                if (newProgress < 100) {
                    if (progressBar.getVisibility() != View.VISIBLE) {
                        progressBar.setVisibility(View.VISIBLE);
                        if (!dialog.isShowing())
                            dialog.show();
                    }
                } else {
                    dialog.dismiss();
                    if (progressBar.getVisibility() != View.GONE) {
                        progressBar.setVisibility(View.GONE);
                    }
                }
            }
        });


    }

    private void showToast(String text) {
        Toast.makeText(this, text, Toast.LENGTH_SHORT).show();
    }

   

}

猜你喜欢

转载自blog.csdn.net/jingzz1/article/details/82348523
今日推荐