相关文章:WebView启动支付宝客户端支付失败的解决办法


好长时间没有写博客了,感觉自己颓废了不少,这也取决于移动端逐渐趋于稳定的原因,随着自己公司业务的不断扩大,还是会遇到种种问题,最近手上一个需要是app内H5进行微信支付,所以就着手搞一搞。

一、微信之前是不支持外部H5使用微信支付的,那个时候我提出了一个解决方案,就是通过webview和js交互拿到统一下单的返回参数,使用微信SDK进行支付,达到了外部浏览器或者app也能调起微信支付,可能是因为小程序出现的原因吧,现在微信支付已经开放出了H5支付的场景,但是微信的目的是在浏览器中直接进行微信支付,所以手机浏览器对微信H5支付支持的是很好的,但是他的文档说不建议在app中使用,有可能是会涉及到支付安全方面的问题吧,但是不建议不代表着不能做,那咱们就来试一下吧。

二、支付流程

对于微信支付,其实移动端不需要做的太多,只是单纯的用webview直接加载给定的url即可,需要调用微信支付的时候处理一下。下面看代码:

public class MainActivity extends AppCompatActivity {//h5的url链接(替换成正式的url)private String url = "http://xxx.com/toHuaFeiH5.do?type=huafei";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);WebView webView = ((WebView) findViewById(R.id.webview));webView.getSettings().setJavaScriptEnabled(true);webView.loadUrl(url);webView.setWebViewClient(new MyWebviewClient());}/*** 重写WebViewClient*/private class MyWebviewClient extends WebViewClient {@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {view.loadUrl(url);return false;}}
}

运行结果:

什么鬼!参数错误!怎么可能!明明在浏览器上运行的灰常的完美,但是为什么在app上不行呢?

其实我心里已经找到了解决方案了,就是在文档上,因为我知道如果微信的东西拿过来就能用,那他就不是微信了,自古微信的文档坑害了多少的有为青年。

仔细看微信开发文档,发现微信写出了几种错误的情况,文档传送门,其中有一种情况就是我们所遇到的情况


不清楚referer的,请自行百度,知道了哪里的问题就修改一下吧,贴代码:

public class MainActivity extends AppCompatActivity {//h5的url链接(替换成正式的url)  private String url = "http://xxx.com/toHuaFeiH5.do?type=huafei";//定义支付域名(替换成公司申请H5的域名即可) private String realm = "http://xxx.com"; @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);WebView webView = ((WebView) findViewById(R.id.webview));webView.getSettings().setJavaScriptEnabled(true);webView.loadUrl(url);webView.setWebViewClient(new MyWebviewClient());}/*** 重写WebViewClient*/private class MyWebviewClient extends WebViewClient {@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {//微信H5支付核心代码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", realm);view.loadUrl(url, extraHeaders);}return true;}//处理https请求@Overridepublic void onReceivedSslError(WebView view, SslErrorHandler handler, android.net.http.SslError error) {handler.proceed();}}
}

再来看结果:

这样,微信H5是可以正常的走支付的流程了


三、支付回调

至于回调的问题可根据文档设置,最简单不过,文档原文:

正常流程用户支付完成后会返回至发起支付的页面,如需返回至指定页面,则可以在MWEB_URL后拼接上redirect_url参数,来指定回调页面。
如,您希望用户支付完成后跳转至https://www.wechatpay.com.cn,则可以做如下处理:
    假设您通过统一下单接口获到的MWEB_URL= https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx20161110163838f231619da20804912345&package=1037687096 
则拼接后的地址为MWEB_URL= https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx20161110163838f231619da20804912345&package=1037687096&redirect_url=https%3A%2F%2Fwww.wechatpay.com.cn

注意:
  1.需对redirect_url进行urlencode处理
  2.由于设置redirect_url后,回跳指定页面的操作可能发生在:

    (1)微信支付中间页调起微信收银台后超过5秒 

    (2)用户点击“取消支付“或支付完成后点“完成”按钮。因此无法保证页面回跳时,支付流程已结束,所以商户设置的redirect_url地址不能自动执行查单操作,应让用户去点击按钮触发查单操作。


到此你就可以轻松玩转app内调用微信H5支付了。本人职场小白,如有说的不对的地方,希望大神能指正出来,大家共同学习!

WebView调用微信H5支付相关推荐

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

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

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

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

  3. fastadmin 微信H5支付返回格式

    记录:使用 fastadmin 的epay插件进行调用微信H5支付时,默认情况下 返回格式化的跳转页面html代码.但前端若使用vue或uni-app来编写就不适用了. 直接返回支付跳转地址. \ad ...

  4. Android 微信h5支付

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

  5. 记录下关于微信h5支付那点事儿(百分之80拷贝官方)

    LZ-Says:困意上来,感觉简直痛不欲生~ 生亦何欢~!!! 前言 这俩天在玩微信的H5支付,不得不说,腾讯出品,Enmmm,懂就好... 原想着这是一件很easy的东西,WebView加载一个地址 ...

  6. h5支付不能打开支付宝 ios_iOS 解决微信h5支付,支付宝h5支付无法直接返回APP的问题...

    由于公司的业务需要,为了节省申请开通微信支付的时间和人力,公司决定使用微信h5支付.这样即节省了时间,同时以后所有的APP都能使用h5支付,既方便又快捷. 但是真正做的时候问题来了,当你支付成功之后或 ...

  7. 微信H5支付原生支持

    版权申明:未经允许请勿转载.转载前请先联系作者(hello@yeshen.org) 微信H5支付原生支持 最近有个报错,就是微信支付没办法调用起微信.然后支付中断了.网页端的小伙伴给了一个测试地址 h ...

  8. 微信无法连接支付服务器,App接入微信H5支付常见错误及原因

    在App上接入微信H5支付一般都会遇到一些错误.本文讨论了这些错误的解决方案和背后的原因,希望能让读者能少踩些坑. 错误可以分为两类:一是H5支付域名设置错误,二是URL Scheme跳转App错误. ...

  9. Android 应用内微信 H5 支付

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

最新文章

  1. oracle 表列 自增,ORACLE表建立自增列
  2. [置顶] 决策树绘图(二)
  3. 安装Synchronization service (Project Server 2007) 时出现 MSMQ 错误的解决
  4. bugfree-工具
  5. 求两条轨迹间的hausdorff距离_自动控制原理 | 根轨迹法
  6. CSS3 线性渐变背景的过渡效果
  7. Python爬虫urllib库的使用
  8. Java基础---学Java怎么能不了解多线程---Lambda表达式
  9. 抽象编程语言(APL)是什么?
  10. 单片机课程设计——《基于AT89S52单片机和DS1302时钟芯片的电子时钟(可蓝牙校准)》...
  11. SSM之Mybatis框架初步
  12. 相近字符串的匹配--编辑距离问题
  13. 【Notification】屏蔽特定应用的通知提示
  14. psd导出jpg太大_【设计】PSD导出JPG文件非常大解决办法
  15. Hutool操作数据库的基本封装
  16. 工业相机快门类型:卷帘快门和全局快门——哪个最好?
  17. 主成分分析(PCA)的一种理解和推导
  18. 小程序、容器、SCF、直播加速…最全面的云端架构技术揭秘
  19. python if用法
  20. 神奇葩! 史上最牛的博士论文答辩

热门文章

  1. 如鹏java学习进程 将输入的正整数相加,ok结尾
  2. 学生使用计算机中怎么关机,学生用计算器咋关机
  3. Cache的映像方法
  4. MSP430 G2553 单片机 口袋板 日历 时钟 闹钟 万年历 电子时钟 秒表显示
  5. c语言实现10个数由小到大排序(插入排序法)
  6. yolov5 继续训练
  7. [转载]拥抱Jini:从Starter Kit 2.0开始(第一部分)
  8. 用Python画小猪佩奇
  9. f16_Automated Trading strategy_Kelly Criterion投资比_Vectorized Backtest_drawndown_value-at-risk_socket
  10. NeRF与GAN的交融(一)——NeRF论文阅读