Android 概括 微信H5支付

Android应用集成微信支付,有常用的APP支付和H5支付2种

  • APP支付:体验好,集成相较H5麻烦点
  • H5支付:无需申请走APP支付的流程(包括应用主体一致等要求)

微信支付,现在总结来看,无非几步

1. 申请开发者账号,获取APP ID, APP Secrct,以及商户支付Key

2. 客户端请求自己服务端,自己服务端通过APP ID等生成客户端请求sign,然后返回给客户端

3. 客户端在组装APP ID,商户支付Key,支付签名sign等请求微信支付SDK

4. 然后在通过支付SDK回调处理各种后续逻辑

具体集成可参考微信开放平台支付SDK

本篇文章记录集成H5支付时一个问题

https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=15_4

提示:商家参数格式有误,请联系商家解决

原因:H5的WebView在调起微信支付时,需要对url进行个性化处理


    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        boolean isHandleByHostApp = true;
        // 微信H5支付核心代码
        try {
            if (url.startsWith("weixin://wap/pay?")) {
                try {
                    Intent intent = new Intent();
                    intent.setAction(Intent.ACTION_VIEW);
                    intent.setData(Uri.parse(url));
                    mWeb.getActivity().startActivity(intent);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return true;
            } else if (url.contains("wx.tenpay.com")) {
                Map<String, String> extraHeaders = new HashMap<>();
                extraHeaders.put("Referer", UrlPools.getHostUrl());
                view.loadUrl(url, extraHeaders);
                return true;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return isHandleByHostApp;
    }

    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    @Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
        boolean isHandleByHostApp = true;
            String url = request.getUrl().toString();
            // 微信H5支付核心代码
            try {
                if (url.startsWith("weixin://wap/pay?")) {
                    try {
                        Intent intent = new Intent();
                        intent.setAction(Intent.ACTION_VIEW);
                        intent.setData(Uri.parse(url));
                        mWeb.getActivity().startActivity(intent);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    return true;
                } else if (url.contains("wx.tenpay.com")) {
                    Map<String, String> extraHeaders = new HashMap<>();
                    extraHeaders.put("Referer", UrlPools.getHostUrl());
                    view.loadUrl(url, extraHeaders);
                    return true;
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
      
        return isHandleByHostApp;
    }

注意,这2个方法都需要个性化判断处理

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

初心一点

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

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

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

打赏作者

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

抵扣说明:

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

余额充值