关于在Android中实现H5支付备注

前言:之前都是做的原生支付,最近有接入h5支付的需求,没办法,既然有这个需求那就研究一波呗。

文档介绍:

1、支付宝H5支付https://docs.open.alipay.com/399/106844/

文件下载好后解压 然后找到 H5PayDemoActivity.java这个类里面就是支付宝的H5支付。

下面贴出,WebViewClient 主要核心代码。

private class MyWebViewClient extends WebViewClient {

		@Override
		public boolean shouldOverrideUrlLoading(final WebView view, String url) {
			if (!(url.startsWith("http") || url.startsWith("https"))) {
				return true;
			}

			/**
			 * 推荐采用的新的二合一接口(payInterceptorWithUrl),只需调用一次
			 */
			final PayTask task = new PayTask(H5PayDemoActivity.this);
			boolean isIntercepted = task.payInterceptorWithUrl(url, true, new H5PayCallback() {
				@Override
				public void onPayResult(final H5PayResultModel result) {
					final String url=result.getReturnUrl();
					if(!TextUtils.isEmpty(url)){
						H5PayDemoActivity.this.runOnUiThread(new Runnable() {
							@Override
							public void run() {
								view.loadUrl(url);
							}
						});
					}
				}
			});

			/**
			 * 判断是否成功拦截
			 * 若成功拦截,则无需继续加载该URL;否则继续加载
			 */
			if(!isIntercepted)
				view.loadUrl(url);
			return true;
		}
	}

到此支付宝H5支付算基本完成了,具体需要可以参考支付宝的demo。

2、微信H5支付:https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=15_1

微信H5支付需要申请授权的,不过一般很小公司很难申请下来,建议还是改用原生支付。

下面贴出,WebViewClient 主要核心代码。

 if (url.startsWith("weixin://wap/pay?")) {
       Intent intent = new Intent();
       intent.setAction(Intent.ACTION_VIEW);
       intent.setData(Uri.parse(url));
       startActivity(intent);
       return true;
 } else {
       Map<String, String> extraHeaders = new HashMap<>();
       extraHeaders.put("Referer", "商户申请H5时提交的授权域名");
       view.loadUrl(url, extraHeaders);
       return true;
 }

如果没有设置下面的Referer 会报“商家参数格式有误”的

到此微信H5支付算基本完成了。

集成支付宝H5和微信H5支付时遇到的坑:

1、调用微信H5支付,出现白屏。

我是先做的支付宝的H5支付,配置好WebViewClient 主要核心代码,一次就测试成功了,但是在调微信H5支付的时候,出现白屏的情况,这个很让我头疼,后来我单独把微信H5支付切出,程序竟然能调起来,那么问题来了,说明支付宝的程序对微信的有影响,然后就重新看支付宝官方提供的代码,发现了问题所在,见下图:

支付宝官方提供的demo里竟然拦截了除“http”和“https”以外的其他链接。( 不知道是不是故意的 ( ̄3 ̄)a  )

处理办法:

 if (!(url.startsWith("http") || url.startsWith("https"))) {
        if (!url.startsWith("weixin://wap/pay?")) {
             return true;
        }
 }

2、调用微信H5支付,支付成功后或取消支付的时候出现白屏。

可以通过一种模拟返回的操作来实现:就是执行webview的goBack方法

到此,支付宝H5支付和微信H5支付都成功了,再此记录一下,防止以后再次接入掉坑里去了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

等风起了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值