一般情况下,要实现应用内支付接入 App 支付 SDK 即可满足业务需求,不过考虑到对于一些类似游戏中心的场景,更多是需要支持 H5 支付。相对微信来说,支付宝的对接简单完善很多,所以本篇文章主要说说接入微信 H5 支付的流程和一些问题。

申请流程

按照微信支付官网 H5 支付说明 ,目前是没有直接申请接入 H5 支付的入口,只能在微信商户平台中去另行开通。然鹅~微信商户平台账户也不支持直接注册申请,只能先注册微信开放平台后接入微信 App 支付后才会有商户账号分配。

1. 注册微信开放平台账户

2. 申请开放平台开发者认证

3. 创建一个应用提交申核

需要应用相关资质,主要是为了开通支付功能。

4. 为应用申请微信 App 支付,开通微信支付功能

开通成功后会自动分配微信商户平台账户

5. 登录商户平台申请开通 H5 支付

这里只是简单介绍下申请流程的主要环节,具体操作起来有多麻烦我也不想去体会。

应用内接入

说到这里可能有些人想笑了,既然叫 H5 支付那不是应该跟应用本身没多大关系才对,不就是一个支付链接跳转而已吗。

话是这么说没错,但是具体操作起来还是有些坑需要去踩。由于微信 H5 支付本身就是浏览器网页支付场景下的产物,所以微信官方并不推荐在应用中使用 H5 支付。

跟浏览器不一样,在 WebView 中我们还需要自己处理一些问题。比如为了实现调起微信支付,需要对支付链接进行拦截后才能进行处理,下面就来看看这个流程。

 WebViewClient webViewClient = new WebViewClient() {@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {// 判断 url 的 scheme 进行相应的处理if (url.startsWith("weixin://")){ try{startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));return true;}catch (Exception e) {//防止crash (如果手机上没有安装处理某个 scheme 开头的 url 的APP, 会导致crash)AlertDialog.Builder builder;builder = new AlertDialog.Builder(mActivity);builder.setTitle("支付中心").setMessage("该手机没有安装微信客户端,请安装微信后重新完成支付,或换用支付宝进行支付").setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialogInterface, int i) {dialogInterface.dismiss();}}).create().show();return true;}}else if (url.startsWith("alipays://") || url.startsWith("alipay")){ // ------  对alipays:相关的scheme处理 -------try{mActivity.startActivity(new Intent("android.intent.action.VIEW", Uri.parse(url)));return true;}catch (Exception e) {// 启动支付宝失败,换成网页支付mPayWebView.loadUrl(url);return true;}}if (!(url.startsWith("http") || url.startsWith("https"))) {return true;}view.loadUrl(url, map);return true;}
}
复制代码

你以为这样就完了是吧,然鹅并没有,实际开发中很大机率会出现微信提示商家参数格式有误,请联系商家解决的问题,而且更尴尬的是:这个问题并不会 iOS 中出现,也不会 Android 浏览器中出现,偏偏就是在应用的 WebView 中出现了。

查看官方文档出错问题介绍,说是当前调起 H5支付的 referer 为空导致,WTF? 难道 Android WebView 打开一个链接的 referer 不知指向当前页面的域名?都说实践是检验真理的唯一标准,抓包看看好像还真的是,很好,再一次感觉到了 Android 系统咖喱味代码。

没办法,这锅也不能甩给微信,只能按照文档说的解决方法自己来背。然而这文档说的也是不明不白的,只是说域名设置要一致,废话不多说,直接动手更简单,下面给出示例代码(已自行检验过,真实可用的)

直接在原有的代码基础上进行更改

 WebViewClient webViewClient = new WebViewClient() {@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {...if (!(url.startsWith("http") || url.startsWith("https"))) {return true;}// 比如我们申请时填写的是经常用来测试网络连通性的 http://www.baidu.comHashMap<String, String> map = new HashMap<String, String>();// 指定申请微信 H5 支付时填写的域名,map.put("Referer", "http://www.baidu.com");view.loadUrl(url, map);return true;}
}
复制代码

Over...

转载于:https://juejin.im/post/5a3522fbf265da430a50a71d

Android 应用内微信 H5 支付相关推荐

  1. Android中使用微信H5支付时支付结果刷新问题

    目录 前言: 1.查找资料: 2.解决问题的思路: a.核心逻辑就是截取回调地址,截图如下: b.设置isWxPay为true c.用户支付取消.失败.成功返回App时刷新界面: 3.通过以上几步解决 ...

  2. php根据浏览器调用支付_Android通过外部浏览器调用微信H5支付,Android+PHP详解

    看了好多关于讲解微信H5支付开发的文章,大多数都是通过微信内部浏览器来调用支付接口(其实就是公众号支付),可能是因为H5支付接口刚开放不久吧. 微信官方体验链接:http://wxpay.wxutil ...

  3. Android 微信h5支付

    一.需求背景 H5现在承载着很多的需求活动,要想在h5界面中做支付可以使用js调用原生的支付也可以使用Android webview做支付.微信H5支付官网 二.接入微信H5支付流程 1.用户在商户侧 ...

  4. uniapp app内使用微信H5支付

    最近app项目中使用到了微信H5支付,新建webview页面直接跳转链接出现以下页面 查看文档后发现可能是缺少referer, orderbuyNow() {wxpay(this.formData). ...

  5. h5唤醒微信支付PHP,app内嵌微信h5支付,支付服务唤起支付处理

    app内发起支付,报错net::ERR_UNKNOWN_URL_SCHEME 出错原因:在调微信 H5 支付https://wx.tenpay.com/cgi-bin/mmpayweb-bin/che ...

  6. 【第二十篇】C#微信H5支付 非微信内浏览器H5支付 浏览器微信支付

    微信开发者文档 微信H5支付官方文档   请阅读清楚  最起码把所有参数看一遍 这个地方也可以看看 微信案例 http://wxpay.wxutil.com/mch/pay/h5.v2.php,请在微 ...

  7. app端内h5页面使用微信h5支付

    app端内h5页面使用微信h5支付 app端内h5页面使用微信h5支付 一.起初使用的方法 二.解决方法 三.最后 app端内h5页面使用微信h5支付 一.起初使用的方法 在对接支付宝支付的时候,我是 ...

  8. WebView调用微信H5支付

    相关文章:WebView启动支付宝客户端支付失败的解决办法 好长时间没有写博客了,感觉自己颓废了不少,这也取决于移动端逐渐趋于稳定的原因,随着自己公司业务的不断扩大,还是会遇到种种问题,最近手上一个需 ...

  9. app 访问h5 如何截取_微信H5支付申请相关问题

    之前的文章「微信支付申请相关问题」里说过微信公众号和 APP 申请微信支付,今天来说下微信 H5 支付的申请. 背景介绍 H5 支付是指商户在微信客户端外的移动端网页展示商品或服务,用户在前述页面确认 ...

最新文章

  1. python中.whl文件下载,pandas
  2. Python爬虫QQ说说并分析朋友状况
  3. 血泪总结!5000字产品需求写作方法论
  4. 小程序 富文本自适应屏幕_自适应文本:跨屏幕尺寸构建可读文本
  5. SubSonic中的字段付值--MakeOld Update
  6. Jensen不等式的证明
  7. 中国移动MM如何解决盗版问题
  8. 给CSDN上原创文章添加版权声明(干货)
  9. ls 命令显示的total是什么意思
  10. python 程序员专属情话_拿来就能用!Python 每天定时发送一句情话 | 原力计划
  11. 拒绝访问硬盘拒绝访问的找回方法
  12. 写的不错的家庭关系的文章,转自天涯。《2》
  13. 描述性统计分析 | 直方图
  14. 使用openCV进行边缘检测、二值化、轮廓、轮廓检测、BGR、灰度图、二值化,专栏:各种openCV实践的案例
  15. 按键android手机排行榜,【直板全键盘手机推荐】直板键盘手机排行榜
  16. 创业实践案例课程答案
  17. 使用filter()方法进行数据过滤
  18. 用HTML写一个汽车租赁系统
  19. DataGrid列自定义显示(模板)
  20. 如何解决IDM弹窗的错误问题

热门文章

  1. c语言实现去除字符串首尾空格
  2. 刷新存储器的容量单位是什么_GD25Q80CSIG|相变存储器是什么,具备什么特点?
  3. java数据集成是什么_数据集成 - BlueDavy之技术Blog - BlogJava
  4. jquery图片延迟加载 lazy-src
  5. Unix awk使用手册
  6. WebSocket-java实现
  7. 实验四 恶意代码技术
  8. VisualStudio.gitignore git 忽略
  9. 模仿写一个小型网站框架
  10. 华为上机试题:最高分是多少