WebView调用微信H5支付
相关文章: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支付相关推荐
- php根据浏览器调用支付_Android通过外部浏览器调用微信H5支付,Android+PHP详解
看了好多关于讲解微信H5支付开发的文章,大多数都是通过微信内部浏览器来调用支付接口(其实就是公众号支付),可能是因为H5支付接口刚开放不久吧. 微信官方体验链接:http://wxpay.wxutil ...
- Android中使用微信H5支付时支付结果刷新问题
目录 前言: 1.查找资料: 2.解决问题的思路: a.核心逻辑就是截取回调地址,截图如下: b.设置isWxPay为true c.用户支付取消.失败.成功返回App时刷新界面: 3.通过以上几步解决 ...
- fastadmin 微信H5支付返回格式
记录:使用 fastadmin 的epay插件进行调用微信H5支付时,默认情况下 返回格式化的跳转页面html代码.但前端若使用vue或uni-app来编写就不适用了. 直接返回支付跳转地址. \ad ...
- Android 微信h5支付
一.需求背景 H5现在承载着很多的需求活动,要想在h5界面中做支付可以使用js调用原生的支付也可以使用Android webview做支付.微信H5支付官网 二.接入微信H5支付流程 1.用户在商户侧 ...
- 记录下关于微信h5支付那点事儿(百分之80拷贝官方)
LZ-Says:困意上来,感觉简直痛不欲生~ 生亦何欢~!!! 前言 这俩天在玩微信的H5支付,不得不说,腾讯出品,Enmmm,懂就好... 原想着这是一件很easy的东西,WebView加载一个地址 ...
- h5支付不能打开支付宝 ios_iOS 解决微信h5支付,支付宝h5支付无法直接返回APP的问题...
由于公司的业务需要,为了节省申请开通微信支付的时间和人力,公司决定使用微信h5支付.这样即节省了时间,同时以后所有的APP都能使用h5支付,既方便又快捷. 但是真正做的时候问题来了,当你支付成功之后或 ...
- 微信H5支付原生支持
版权申明:未经允许请勿转载.转载前请先联系作者(hello@yeshen.org) 微信H5支付原生支持 最近有个报错,就是微信支付没办法调用起微信.然后支付中断了.网页端的小伙伴给了一个测试地址 h ...
- 微信无法连接支付服务器,App接入微信H5支付常见错误及原因
在App上接入微信H5支付一般都会遇到一些错误.本文讨论了这些错误的解决方案和背后的原因,希望能让读者能少踩些坑. 错误可以分为两类:一是H5支付域名设置错误,二是URL Scheme跳转App错误. ...
- Android 应用内微信 H5 支付
一般情况下,要实现应用内支付接入 App 支付 SDK 即可满足业务需求,不过考虑到对于一些类似游戏中心的场景,更多是需要支持 H5 支付.相对微信来说,支付宝的对接简单完善很多,所以本篇文章主要说说 ...
最新文章
- oracle 表列 自增,ORACLE表建立自增列
- [置顶] 决策树绘图(二)
- 安装Synchronization service (Project Server 2007) 时出现 MSMQ 错误的解决
- bugfree-工具
- 求两条轨迹间的hausdorff距离_自动控制原理 | 根轨迹法
- CSS3 线性渐变背景的过渡效果
- Python爬虫urllib库的使用
- Java基础---学Java怎么能不了解多线程---Lambda表达式
- 抽象编程语言(APL)是什么?
- 单片机课程设计——《基于AT89S52单片机和DS1302时钟芯片的电子时钟(可蓝牙校准)》...
- SSM之Mybatis框架初步
- 相近字符串的匹配--编辑距离问题
- 【Notification】屏蔽特定应用的通知提示
- psd导出jpg太大_【设计】PSD导出JPG文件非常大解决办法
- Hutool操作数据库的基本封装
- 工业相机快门类型:卷帘快门和全局快门——哪个最好?
- 主成分分析(PCA)的一种理解和推导
- 小程序、容器、SCF、直播加速…最全面的云端架构技术揭秘
- python if用法
- 神奇葩! 史上最牛的博士论文答辩
热门文章
- 如鹏java学习进程 将输入的正整数相加,ok结尾
- 学生使用计算机中怎么关机,学生用计算器咋关机
- Cache的映像方法
- MSP430 G2553 单片机 口袋板 日历 时钟 闹钟 万年历 电子时钟 秒表显示
- c语言实现10个数由小到大排序(插入排序法)
- yolov5 继续训练
- [转载]拥抱Jini:从Starter Kit 2.0开始(第一部分)
- 用Python画小猪佩奇
- f16_Automated Trading strategy_Kelly Criterion投资比_Vectorized Backtest_drawndown_value-at-risk_socket
- NeRF与GAN的交融(一)——NeRF论文阅读