【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.allow
        decisionHandler(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 = false
                for (idx, item) in (comps.queryItems ?? []).enumerated() {
                    if item.name == "redirect_url" && item.value != wxpaySchemesss {
                        needChangeStr = item.value!.components(separatedBy: "https://")[1]
                        needChange = true
                        comps.queryItems?.remove(at: idx)
                        break
                    }
                 }
                if needChange {
                    comps.queryItems?.append(URLQueryItem(name: "redirect_url", value: wxpayScheme + needChangeStr))
                    wxpaySchemesss += needChangeStr
                    if 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.request
        let url = navigationAction.request.url
        let scheme = url?.scheme

        if scheme == "iosamap" {
            jumpAliPay(url: url!)
        }else if scheme == "weixin"{
            jumpAliPay(url: url!)
        }

        let actionPoilicy = WKNavigationActionPolicy.allow

        if navigationAction.navigationType == WKNavigationType.backForward{
            //self.navigationItem.leftBarButtonItems = [self.backBtn,self.closeBtn]
        }

        decisionHandler(actionPoilicy)
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值