这回要讲讲了,招行的支付比较蛋疼,一种是用来测试(他们开发人员说测试用的- -!坑死了~),另一种是上线的,测试是桥接,上线的是html5的,代码已经梳理好了,需要注意的是桥接自己写回调,还有js的配置以及key的替换,html5的直接替换上线的key就可以了~差点忘了提醒大家,招行有一个加密键盘,别忘导入,支付的时候调起用的- -!
大概的代码如下:
桥接代码:
public class PayChooseActivityQrCodeYuan extends BaseActivity implements View.OnClickListener { private static PayChooseActivityQrCodeYuan instance = null; private static int time = 40000; private LinearLayout ll_back; private TextView tv_title1; // private ImageView btn_pay1; private String from; private AnimationDrawable ad; static private BridgeWebView webview; private String url; private String testUrl = "file:///android_asset/2.html"; // private CMBKeyboardFunc kbFunc = null; private CMBPayStateCallback payStateCallback; // public static PayChooseFragment getInstance() { // if (instance == null) { // synchronized (PayChooseFragment.class) { // if (instance == null) { // instance = new PayChooseFragment(); // } // } // } // return instance; // } @Override protected int getLayoutId() { return R.layout.activity_paychoose_qrcodeyuan; } @Override protected void setup(@Nullable Bundle savedInstanceState) { SmartBarInject.inject(this).show(SmartBar.HOME | SmartBar.BACK); findviews(); addlisteners(); doNetWork();//第一次加载 } private void LoadUrl() { try { CookieSyncManager.createInstance(PayChooseActivityQrCodeYuan.this.getApplicationContext()); CookieManager.getInstance().removeAllCookie(); CookieSyncManager.getInstance().sync(); } catch (Exception e) { } webview.loadUrl(url); } private void doNetWork() { ShowLoadingUtil.showProgressDialog2(PayChooseActivityQrCodeYuan.this, getResources().getString(R.string.loading)); } public String subStirngGetMoney(String url) { int posStart = url.indexOf("total_fee=") + 10; int posEnd = url.indexOf("&", posStart); String money = null; if (posStart < posEnd) { money = url.substring(posStart, posEnd); } return money; } private void addlisteners() { ll_back.setOnClickListener(this); } private void findviews() { from = getIntent().getExtras().getString(ConstantUtil.Bundle_FROM); ll_back = (LinearLayout) findViewById(R.id.ll_back); tv_title1 = (TextView) findViewById(R.id.tv_title1); //招商银行部分 tv_title1.setText(getString(R.string.pay_choose114)); url = getIntent().getExtras().getString(ConstantUtil.Bundle_INFO1); MyLogUtil.e("888", url); // url=testUrl; webview = (BridgeWebView) findViewById(R.id.webview); // 对WebView进行设置 WebSettings set = webview.getSettings(); // 支持JS set.setJavaScriptEnabled(true); set.setSaveFormData(false); set.setSavePassword(false); set.setSupportZoom(false); // set.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);// WebSettings.LOAD_CACHE_ELSE_NETWORK webview.setDefaultHandler(new DefaultHandler()); webview.setWebChromeClient(new WebChromeClient() { @Override public void onReceivedTitle(WebView view, String title) { super.onReceivedTitle(view, title); } @Override public void onProgressChanged(WebView view, int newProgress) { // TODO Auto-generated method stub super.onProgressChanged(view, newProgress); } }); //呼出安全键盘 webview.setOnShouldOverrideUrlLoading(new BridgeWebView.OnShouldOverrideUrlLoading() { public boolean onShouldOverrideUrlLoading(WebView view, String url) { CMBKeyboardFunc kbFunc = new CMBKeyboardFunc(PayChooseActivityQrCodeYuan.this); if (url.contains("http://pay.success.compay.com/return_url.jsp")) { //支付成功 SpUtils.getInstance().put(PayParams.Pay_money,subStirngGetMoney(url)); } MyLogUtil.e("******",url); return kbFunc.HandleUrlCall(webview, url); } @Override public void onPageStarted(WebView view, String url, Bitmap bitmap) { } public void onPageFinished(WebView view, String url) { } }); LoadUrl(); //description:由于招行一网通测试站与正式站使用的桥名不一样, // 测试站:WebViewJavascriptBridge // 正式站:CMBMerchantJSBridge // js桥回调handler均为:initCmbSignNetPay // 如需更换其他桥名,请修改library下assets目录下的WebViewJavascriptBridge.js文件, // 把文件名及文件内WebViewJavascriptBridge替换成对应桥名并执行下面代码即可 //=======================使用招行正式站时调用以下代码即可========================== webview.setCustom(true, "CMBMerchantJSBridge"); //=======================招行一网通js桥回调========================== webview.registerHandler("initCmbSignNetPay", new BridgeHandler() { @Override public void handler(String data, CallBackFunction function) { //在这里解析回调数据并执行处理 //Log.i(TAG, "回传结果:" + data); // Toast.makeText(PayChooseActivityQrCodeYuan.this, data, Toast.LENGTH_SHORT).show(); initCmbSignNetPay(data); } }); webview.setWebChromeClient(new WebChromeClient() { @Override public void onProgressChanged(WebView view, int newProgress) { // newProgress 1-100之间的整数 // Log.i("---------------RegActivity-------------", // "newProgress:"+newProgress); // mHandler.sendEmptyMessage(newProgress); // if (newProgress == 100) { // // 网页加载完毕,关闭ProgressDialog // closeDialog(); // } /*else { // // 网页正在加载,打开ProgressDialog // // openDialog(newProgress); // if (dialog == null) { // mHandler.sendEmptyMessage(START_PROGRESS); // }else{ // // } // // }*/ // mdialog.setProgress(newProgress); if (newProgress == 100) { // dialog.dismiss(); ShowLoadingUtil.dismissProgressDialog2(); } super.onProgressChanged(view, newProgress); } private void closeDialog() { ShowLoadingUtil.dismissProgressDialog2(); } private void openDialog(int newProgress) { ShowLoadingUtil.showProgressDialog2(PayChooseActivityQrCodeYuan.this , getResources().getString(R.string.loading)); } }); } @Override public void onResume() { super.onResume(); } public void onPause() { super.onPause(); // 停止动画 // ad.stop(); } @Override public void onStop() { super.onStop(); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.ll_back: // handler1.removeCallbacks(runnable); onBackPressed(); break; // case R.id.btn_pay1: // // 实例化SelectPicPopupWindow // handler1.removeCallbacks(runnable); // menuWindow2 = new PopPaysuccess2(this, null, -1); // // 显示窗口 // menuWindow2.showAtLocation( // findViewById(R.id.main), Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL // , 0, 0); // 设置layout在PopupWindow中显示的位置 // break; default: break; } } public static final String RESULT_KEY = "pay_status"; public static final int RESULT_PAYING = 0; public static final int RESULT_FAILED = 1; public static final int RESULT_SUCCESS = 2; private int resultCode = RESULT_PAYING; /** * 支付H5页面状态回调 * * @param payData */ public void initCmbSignNetPay(final String payData) { // Toast.makeText(activity, "***", 4000).show(); // TODO Auto-generated method stub try { // PayUtils.paySPGet(); resultCode = RESULT_PAYING; if (TextUtils.isEmpty(payData)) { return; } JSONObject result = JSON.parseObject(payData); //TODO test // String resultCodetest = (String) result.get("sign_status"); {"pay_status":0} String resultCodetest = (String) result.get("pay_status"); // ToastUtil.showToastLong(result.toString()); if (!TextUtils.isEmpty(result.toString()) && result.containsKey(RESULT_KEY)) { // ToastUtil.showToastLong(result.toString()); resultCode = result.getIntValue(RESULT_KEY); if (resultCode == RESULT_PAYING) { //支付中 // ToastUtil.showToastLong(resultCode + "***"); } if (resultCode == RESULT_FAILED) { //支付失败 // ToastUtil.showToastLong(resultCode + ""); PayUtils.payfail(PayChooseActivityQrCodeYuan.this); } if (resultCode == RESULT_SUCCESS) { //支付成功 // ToastUtil.showToastLong(resultCode + ""); // if (SpUtils.getInstance().get(PayParams.Pay_money, null).toString()){ // // } Intent intent = new Intent(PayChooseActivityQrCodeYuan.this, PayChooseSuccessActivity.class); intent.putExtra(ConstantUtil.Bundle_FROM, PayParams.Pay_company2); // intent.putExtra(ConstantUtil.INTENT_INFO1, SpUtils.getInstance().get(PayParams.Pay_money, null).toString()); startActivity(intent); } } } catch (Exception e) { // TODO: handle exception } } private void shezhisp() { SpUtils.getInstance().put(PayParams.Pay_merger_id, ""); SpUtils.getInstance().put(PayParams.Pay_order_ids, ""); SpUtils.getInstance().put(PayParams.Pay_payChoose, ""); SpUtils.getInstance().put(PayParams.Pay_money, ""); } }
正常的HTML5代码:
public class PayChooseActivityQrCodeYuanOld extends BaseActivity implements View.OnClickListener { private static PayChooseActivityQrCodeYuanOld instance = null; private static int time = 40000; private LinearLayout ll_back; private TextView tv_title1; // private ImageView btn_pay1; private String from; private AnimationDrawable ad; private WebView webView; private String url; private String testUrl = "file:///android_asset/2.html"; // private CMBKeyboardFunc kbFunc = null; private CMBPayStateCallback payStateCallback; // public static PayChooseFragment getInstance() { // if (instance == null) { // synchronized (PayChooseFragment.class) { // if (instance == null) { // instance = new PayChooseFragment(); // } // } // } // return instance; // } @Override protected int getLayoutId() { return R.layout.activity_paychoose_qrcode; } @Override public void onBackPressed() { //失败页面跳转 Intent intent = new Intent(PayChooseActivityQrCodeYuanOld.this, MyOrderActivity.class); intent.putExtra(ConstantUtil.Bundle_FROM, getClass().getName()); intent.putExtra(ConstantUtil.INTENT_INFO1, ConstantUtil.pay_fail); startActivity(intent); finish(); PayUtils.paySPPut(); } @Override protected void setup(@Nullable Bundle savedInstanceState) { SmartBarInject.inject(this).show(SmartBar.BACK); findviews(); addlisteners(); doNetWork();//第一次加载 } private void LoadUrl() { try { CookieSyncManager.createInstance(PayChooseActivityQrCodeYuanOld.this.getApplicationContext()); CookieManager.getInstance().removeAllCookie(); CookieSyncManager.getInstance().sync(); } catch (Exception e) { } webView.loadUrl(url); ShowLoadingUtil.dismissProgressDialog2(); MyLogUtil.e("***loadUrl", url); } private void doNetWork() { ShowLoadingUtil.showProgressDialog2(PayChooseActivityQrCodeYuanOld.this, getResources().getString(R.string.loading)); } private void addlisteners() { ll_back.setOnClickListener(this); } private void findviews() { from = getIntent().getExtras().getString(ConstantUtil.Bundle_FROM); ll_back = (LinearLayout) findViewById(R.id.ll_back); tv_title1 = (TextView) findViewById(R.id.tv_title1); //招商银行部分 tv_title1.setText(getString(R.string.pay_choose114)); url = getIntent().getExtras().getString(ConstantUtil.Bundle_INFO1); MyLogUtil.e("***", url); // url=testUrl; webView = (WebView) findViewById(R.id.webview); // kbFunc = new CMBKeyboardFunc(PayChooseActivityQrCodeYuan.this); // webView.loadUrl(url); WebSettings settings = webView.getSettings(); // settings.setBuiltInZoomControls(true); // settings.setDisplayZoomControls(false); // 隐藏webview缩放按钮 // settings.setUseWideViewPort(true); // settings.setLoadWithOverviewMode(true); settings.setJavaScriptEnabled(true); settings.setSaveFormData(false); settings.setSavePassword(false); settings.setSupportZoom(true); // webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); settings.setCacheMode(WebSettings.LOAD_NO_CACHE);// WebSettings.LOAD_CACHE_ELSE_NETWORK // payStateCallback = new CMBPayStateCallback(this); // webView.addJavascriptInterface(payStateCallback, "CMBMerchantJSBridge"); LoadUrl(); webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { // 使用当前的WebView加载页面 CMBKeyboardFunc kbFunc = new CMBKeyboardFunc(PayChooseActivityQrCodeYuanOld.this); // MyLogUtil.e("***","1"); //: http://pay.success.smarthaier.com/return_url.jsp?total_fee=1 //http://bjdnserror4.wo.com.cn:8080/bj/index_m.htm MyLogUtil.e("***kbFunc", url); if (kbFunc.HandleUrlCall(webView, url) == false) { // MyLogUtil.e("***","2"); if (url.contains("http://pay.success.smarthaier.com/return_url.jsp")) { //支持成功old // String money = PayUtils.subStirngGetMoneyOld(url); // MyLogUtil.e("***money",money); // SpUtils.getInstance().put(PayParams.Pay_money, money); // Intent intent = new Intent(PayChooseActivityQrCodeYuanOld.this, // PayChooseSuccessActivity.class); // intent.putExtra(ConstantUtil.Bundle_FROM, PayParams.Pay_alipay); //// intent.putExtra(ConstantUtil.INTENT_INFO1, money); // startActivity(intent); //支付成功new Intent intent = new Intent(PayChooseActivityQrCodeYuanOld.this, MyOrderActivity.class); intent.putExtra(ConstantUtil.Bundle_FROM, getClass().getName()); intent.putExtra(ConstantUtil.INTENT_INFO1, ConstantUtil.pay_success); startActivity(intent); finish(); PayUtils.paySPPut(); }else{ } return super.shouldOverrideUrlLoading(view, url); } else { return true; } } }); } @Override public void onResume() { super.onResume(); } public void onPause() { super.onPause(); // 停止动画 // ad.stop(); } @Override public void onStop() { super.onStop(); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.ll_back: // handler1.removeCallbacks(runnable); onBackPressed(); break; // case R.id.btn_pay1: // // 实例化SelectPicPopupWindow // handler1.removeCallbacks(runnable); // menuWindow2 = new PopPaysuccess2(this, null, -1); // // 显示窗口 // menuWindow2.showAtLocation( // findViewById(R.id.main), Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL // , 0, 0); // 设置layout在PopupWindow中显示的位置 // break; default: break; } } }
完事~中秋节快乐~对了下面给大家一个批量修改名字的软件~
Demo地址:http://down.51cto.com/data/2241395
批量修改名字:http://down.51cto.com/data/2241396
时间: 2024-10-13 02:16:37