这回要讲讲了,招行的支付比较蛋疼,一种是用来测试(他们开发人员说测试用的- -!坑死了~),另一种是上线的,测试是桥接,上线的是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