android H5(WebView) 拉起微信支付和支付宝支付
一微信支付做法:
在 WebViewClient() 里重写shouldOverrideUrlLoading这个方法 ,注意的问题:网上一堆人说
shouldOverrideUrlLoading(WebView webView, String s) 带两个参数的是android6.0以下调用,可是我小米五 8.0 还是调用这个
建议大家 shouldOverrideUrlLoading(WebView webView, String s) 和shouldOverrideUrlLoading(WebView webView, WebResourceRequest webResourceRequest) 这两个都重写 !!!!!!!!!!!!!
拉起微信支付 首先判断 Url 地址 https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?" 这是微信支付的 我的处理方法
s = url (参数里的)
if (s.startsWith("https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?")) {
isPlayFlag =true;
}
// 如下方案可在非微信内部WebView的H5页面中调出微信支付
if (s.startsWith("weixin://wap/pay?") &&isPlayFlag) {
if(isWxInstall(mContext)){
isPlayFlag =false;
Intent intent =new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse(s));
mContext.startActivity(intent);
return true;
}else {
Toast.makeText(mContext, "您未安装微信~ 请安装微信并支付,祝您生活愉快", Toast.LENGTH_SHORT).show();
webView.goBack();
}
}
这就是完整的 拉起微信支付 值得注意的是 如果没有安装微信 会闪退的 所以我做了判断 是否安装了微信客户端
public boolean isWxInstall(Context context) {
final PackageManager packageManager = context.getPackageManager();
// 获取packagemanager
List pinfo = packageManager.getInstalledPackages(0);
// 获取所有已安装程序的包信息
if (pinfo !=null) {
for (int i =0; i < pinfo.size(); i++) {
String pn = pinfo.get(i).packageName;
if (pn.equals("com.tencent.mm")) {
return true;
}
}
}
return false;
}
嗯,H5拉起微信支付Ok了 经大量测试为问题 下面说一下 拉起支付宝支付
同理 首先判断是否 安装了支付宝客户端
public boolean isAliPayInstalled(Context context) {
Uri uri = Uri.parse("alipays://platformapi/startApp");
Intent intent =new Intent(Intent.ACTION_VIEW, uri);
ComponentName componentName = intent.resolveActivity(context.getPackageManager());
return componentName !=null;
}
阿里这个简单多了
没安装 支付宝的话 强行拉起客户端支付会闪退,判断一下 没有就网页支付
/*此处应添加支付宝是否安装的验证,不然跳转会引发崩溃*/
//唤起支付宝app
if (s.startsWith("alipays://platformapi/startApp?")&& isAliPayInstalled(mContext)) {
if(isAliPayInstalled(mContext)){
Intent intent =new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse(s));
mContext.startActivity(intent);
return true;
}
}
然后这里记录了一下 支付宝支付网页链接
String h5AliPay ="https://mclient.alipay.com/h5Continue.htm?";
String h5AliPaycontiniu ="https://mclient.alipay.com/cashier/mobilepay.htm?";
一个是进入到阿里支付的页面 一个是阿里跳转的页面 也就是h5AliPaycontiniu 这里判断一下是否允许回退