XZ_iOS 之WKWebView H5吊起微信客户端支付并返回APP
我们使用的是WKWebView,在下面方法做的一系列的操作
func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!)
1、全部代码
/// 准备加载func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {let url = webView.url!.absoluteStringprint("====>\(url)")var valueStr = “m.r***n.com://"if NetworkManager.commonUrl.contains("api.") {valueStr = "api.r***n.com://"}// 从微信回来会自动调用加载redirect_urlif url == valueStr {return}var finalStr = ""if url.hasPrefix("https://wx.tenpay.com/") && redirect_url.length == 0 {let absoluteString = webView.url?.absoluteStringif (absoluteString?.contains("https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?"))! {// 保存并替换redirect_urlif let strArray = absoluteString?.components(separatedBy: "&") {for i in 0..<strArray.count {if !strArray[i].contains("redirect_url") {if finalStr == "" {finalStr = "\(strArray[i])"}else {finalStr = "\(finalStr)&\(strArray[i])"}}}}finalStr += "&redirect_url=\(valueStr)"print("finalStr:", finalStr)redirect_url = (absoluteString?.components(separatedBy: "=").last)!.removingPercentEncoding!}// 设置 Referervar request:URLRequest = NSURLRequest.init(url: URL.init(string: finalStr)!) as URLRequestrequest.httpMethod = "Get"request.setValue(valueStr, forHTTPHeaderField: "Referer")webView.load(request)}if url.hasPrefix("weixin://wap/pay") {print("-------需要打开的url:", url)let urlUrl = URL.init(string: url)let canOpen = UIApplication.shared.canOpenURL(urlUrl!)if canOpen {UIApplication.shared.openURL(urlUrl!)}else {showMessage(msg: "未安装相关应用"}// 刷新当前页面let request: URLRequest = NSURLRequest.init(url: URL.init(string: redirect_url)!) as URLRequestwebView.load(request)redirect_url = ""}}
2、H5吊起微信客户端支付
1>m.r***n.com/api.r***n.com为你们公司在微信后台注册的一级域名,因为我们有正式环境和测试环境,所以对于这个值我做了判断。
2>微信支付,中间会调用两个关键的url
URL1: https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx***&package=***&redirect_url=***
URL2: weixin://wap/pay?prepayid%3D***&package=***&noncestr=***&sign=***
把URL1修改为如下:
https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx***&package=***&redirect_url=api.r***n.com://
注意:如果你的url中有redirect_url,需要将值替换成 “一级域名:// ”,如果没有需要添加这个参数,因为微信支付成功会默认调用redirect_url,如果这个值是http...的回调地址,就会打开Safari。
3>拦截到"weixin://wap/pay"",则手动吊起微信APP,判断是否可以吊起,如果掉不起,则提示未安装该应用;
4>需要在改方法前面添加一步判断,如果当前的url是“一级域名:// ”,则直接返回就可以了,因为在吊起微信的时候,我们手动加载了完成页面。
// 从微信回来会自动调用加载redirect_url
if url == valueStr {return
}
5>我们手动加载的完成页面如下图,点击返回,跳转我的订单页面。
3、支付成功/失败,返回Safari的问题解决
1>在request中添加 Referer 参数
// 设置 Referer
var request:URLRequest = NSURLRequest.init(url: URL.init(string: finalStr)!) as URLRequest
request.httpMethod = "Get"
request.setValue(valueStr, forHTTPHeaderField: "Referer")
webView.load(request)
2>替换 redirect_url 的值为 “一级域名:// ”
我们的URL1中有回调地址,我把这个回调地址进行了保存,吊起微信的时候,手动在当前页面加载回调地址,从微信支付成功或者失败都显示回调地址地址页面,如果不进行保存,当前页面也会自动加载回调地址,不过当前的回调地址已被修改为“一级域名:// ”,再次返回到当前页面时,会出现空白页面的情况。这时把回调地址也置空。
// 刷新当前页面let request: URLRequest = NSURLRequest.init(url: URL.init(string: redirect_url)!) as URLRequestwebView.load(request)redirect_url = ""
3>在 URL Types 中添加一级域名,微信回调APP的时候使用
XZ_iOS 之WKWebView H5吊起微信客户端支付并返回APP相关推荐
- uniapp中唤醒支付宝,微信进行支付并返回app
支付分为前端发起支付,和后端发起支付两种方式 1.在前端发起支付,uniapp给我们提供好了,可以使用的api接口. uni.requestPayment({provider: 'alipay',or ...
- H5脱离微信通过调起微信客户端支付
H5脱离微信通过调起微信客户端支付 https://pay.weixin.qq.com/wiki/doc/api/wap.php?chapter=15_1 目前已上线支付案例,商户可进行实际体验: ◆ ...
- iOS H5原生WKWebView调起支付宝客户端支付方案
iOS H5原生WKWebView调起支付宝客户端支付方案 问题描述: 安卓直接WebView加载上面的URL直接可完成跳转支付宝弹出支付界面: iOS WKWebView加载这个URL,只是单纯加载 ...
- ios支付宝支付失败不回调_iOS支付宝H5支付无法返回APP解决方案
本文只讨论你已经成功实现客户端->支付宝支付流程,仅仅是支付完成后无法返回自己的APP的问题. 如果你的支付流程是客户端->Safari->支付宝不在本文讨论范围之类. iOS支付宝 ...
- iOS H5 调用微信、支付宝支付无法返回app 解决方案
最新项目中遇到H5页面中调用微信.支付宝客户端支付的需求,虽然这并不是推荐的做法,但是需求确实存在...加载h5页面点击支付调起需要支付的客户端(微信或者支付宝). 微信支付解决方案: 1.首先要设置 ...
- php h5支付没有返回app中,很多人都不知道的监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法...
在实际的应用中,我们常常需要实现在移动app和浏览器中点击返回.后退.上一页等按钮实现自己的关闭页面.调整到指定页面或执行一些其它操作的 需求,那在代码中怎样监听当点击微信.支付宝.百度糯米.百度钱包 ...
- 微信境外支付php_PHP实现 APP端微信支付功能
前面已经写了手机APP支付宝支付,今天再把手机APP微信支付补上,前期的准备工作在这里就不多说了,可以参考微信支付开发文档,一定要仔细阅读开发文档,可以让你少踩点坑:准备工作完成后就是配置参数,调用统 ...
- h5支付不能打开支付宝 ios_iOS WKWebview中无法调起支付宝/微信客户端支付问题的解决方法...
这两个的解决思路都是要在下面这个方法中先拦截相应的url,再单独处理 - (void)webView:(WKWebView *)webView decidePolicyForNavigationAct ...
- h5 微信支付 php,用h5做出微信的支付过程的实现步骤
这次给大家实现的案例是用户在微信里打开网页的时候,也可以调用微信支付来完成下单功能.当然,微信官网的,开发文档也有很详细的介绍,但是今天我们来教大家怎样手动做出支付接口的开发. 以提交问题流程为例描述 ...
最新文章
- eclipse java调用c 代码吗_linux下通过eclipse开发用java调用c程序的方法
- 在WIN7系统的笔记本上建立WIFI热点
- 从C语言到C++的进阶之一些C基础上的增强用法(篇五)
- datagridview列 值提取_Pandas中的缺失值处理
- 小学计算机课教学工作总结,小学六年级信息技术教学工作总结
- python--图像轮廓findContours
- 材料之kube-dns.yaml
- apktool+dex2jar+xjad反编译android程序
- container-coding-codec
- dnf虚拟机安装的解决方法
- 《Nature》论文插图复刻第3期—面积图(Part2-100)
- python爬取阳光问政
- 这就是我不建议去外包公司开发的原因?
- 计算机组装拆卸 心得,学习组装电脑的心得体会怎么写?
- jwplayer +ffmpeg+red5 实现摄像头的直播
- 亚马逊秒杀活动怎么报名?站斧浏览器亚马逊站内促销
- 【Linux 驱动】第七章 时间 延迟及延缓操作
- Verilog HDL可综合描述(高质量Verilog书写)
- 计算机专业本科上线分数,计算机专业对口大学分数线本科
- 自然语言处理(NLP) vs 自然语言理解(NLU)
热门文章
- Hyperledger Fabric 1.4.6 多机器集群部署
- i7-10710U和i7-8665U 哪个好
- linux使用wget镜像一个网站
- 仿个人税务 app html5_注意,你下载的可能是个假的个税App
- 智能车电磁传感器检测原理
- [推荐]GOOGLE搜索从入门到精通v3.0
- 解决echarts5中国地图只显示南海问题,及china.js china.json下载
- Sketch 浅谈(一)
- HP Probook 4321s 网卡无法识别问题的解决
- 如何快速查找网线-寻线仪