【Swift】微信H5支付 返回 app的问题

iOS 微信支付H5 支付成功、取消 返回app

  • 支付场景
    • 主要核心的思路
      • 核心代码

支付场景

H5发起微信支付->支付成功、支付取消->返回app

主要核心的思路

iOS返回的自己的App主要利用的是URL Schemes,不说了上干货

核心代码

app中是利用WKWebView为例:

// 本界面的全局变量
// 这里要和你自己的URL Schemes统一var wxpaySchemesss = "ios.aa.com://"var needChangeStr = ""
/// WKWebVewdelegate
func webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse, decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void) {let actionPoilicy = WKNavigationResponsePolicy.allowdecisionHandler(actionPoilicy)}func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {let wxpayScheme = "ios.aa.com://"let curUrl = navigationAction.request.url!;if curUrl.absoluteString.hasPrefix(wxpayScheme) {let urlarr = curUrl.absoluteString.components(separatedBy: wxpayScheme)let urlOrdersuccess = "https://" + urlarr[1]let req = URLRequest(url: URL(string: urlOrdersuccess)!)decisionHandler(WKNavigationActionPolicy.cancel)webView.load(req)return}// 去除原有的URL回调地址,换成自己的配置if curUrl.absoluteString.hasPrefix("https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb") {if var comps = URLComponents(string: curUrl.absoluteString) {var needChange = falsefor (idx, item) in (comps.queryItems ?? []).enumerated() {if item.name == "redirect_url" && item.value != wxpaySchemesss {needChangeStr = item.value!.components(separatedBy: "https://")[1]needChange = truecomps.queryItems?.remove(at: idx)break}}if needChange {comps.queryItems?.append(URLQueryItem(name: "redirect_url", value: wxpayScheme + needChangeStr))wxpaySchemesss += needChangeStrif let finalUrl = comps.url {// 给请求头加上Referer字段let mRequest = NSMutableURLRequest(url: finalUrl)mRequest.setValue(wxpayScheme, forHTTPHeaderField: "Referer")decisionHandler(WKNavigationActionPolicy.cancel)webView.load(mRequest as URLRequest)return}}}}let dds = navigationAction.requestlet url = navigationAction.request.urllet scheme = url?.schemeif scheme == "iosamap" {jumpAliPay(url: url!)}else if scheme == "weixin"{jumpAliPay(url: url!)}let actionPoilicy = WKNavigationActionPolicy.allowif navigationAction.navigationType == WKNavigationType.backForward{//self.navigationItem.leftBarButtonItems = [self.backBtn,self.closeBtn]}decisionHandler(actionPoilicy)}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部