iOS H5微信支付

20190501.jpeg

最近袍暴,app嵌入了一個(gè)H5模塊填帽,H5里面加入了微信支付的功能执泰。在發(fā)起微信支付的時(shí)候是通過(guò)weixin://的協(xié)議方式的,在UIWebView中可以正常調(diào)起微信發(fā)起支付嗡善,但支付成功會(huì)跳轉(zhuǎn)Safari瀏覽器然后加載支付成功頁(yè)面辑莫,WKWebView不能識(shí)別這種協(xié)議,不會(huì)跳轉(zhuǎn)微信罩引。

攔截H5微信支付請(qǐng)求

  1. 配置 URL Schemes各吨,用于跳回App

    在info.plist中添加一個(gè)URL Schemes,用于在微信支付完成返回app蜒程。


    WeChateafef43a2d42634f63759992120f9f25.png
  1. 攔截支付請(qǐng)求绅你,設(shè)置返回Url并保存支付成功頁(yè)面

    在WKWebView的 WKNavigationDelegate代理方法中攔截支付請(qǐng)求

    let request = navigationAction.request
    let scheme = request.url?.scheme
    let absoluteString = request.url?.absoluteString.removingPercentEncoding
    DPrint(absoluteString)
    // 設(shè)置返回Url:在Info.plist中設(shè)置的URL Schemes
    let appScheme = ""
    let redirect_url = "redirect_url=zxl.\(appScheme)://"
    // 判斷是否是微信支付請(qǐng)求
    let hasPrefix = absoluteString?.hasPrefix("https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb")
    let hasSuffix = absoluteString?.hasSuffix(redirect_url)
    if hasPrefix! && hasSuffix == false {
        decisionHandler(.cancel)
        var requestUrl = absoluteString
        let range = requestUrl?.range(of: "&redirect_url=")
        if (range != nil) {
            let subRange = (range?.lowerBound)!..<(requestUrl?.endIndex)!
            // 保存支付成功頁(yè)面路徑伺帘,支付成功后加載
            WeiXinPayRedirectURL = "https://hlht.echargenet.com/perhlhth5/#/views/rechargeSuccess"
            requestUrl?.removeSubrange(subRange)
        }
        requestUrl = requestUrl! + "&" + redirect_url
        
        // 重新發(fā)送請(qǐng)求
        let newRequest = NSMutableURLRequest(url: URL(string: requestUrl!)!, cachePolicy: NSURLRequest.CachePolicy.useProtocolCachePolicy, timeoutInterval: TIMEOUT)
        newRequest.allHTTPHeaderFields = request.allHTTPHeaderFields
        webView.load(newRequest as URLRequest)
        return;
    }
  1. 跳轉(zhuǎn)微信發(fā)起支付
if scheme == "weixin" {
     decisionHandler(.cancel)
     if UIApplication.shared.canOpenURL(request.url!) {
            UIApplication.shared.open(request.url!, options: [UIApplication.OpenExternalURLOptionsKey.init(rawValue: "hello") : "world"]) { (isT) in
            DPrint((isT ? "成功" : "失敗"))
        }
    }
}

監(jiān)聽(tīng)支付完成并加載支付成功頁(yè)面

在AppDelegate中監(jiān)聽(tīng)微信的支付成功回調(diào),發(fā)送通知(也可以通過(guò)其他方式)忌锯。

NotificationCenter.default.post(name: NSNotification.Name(rawValue: WebViewWXPaySuccess), object: "")

監(jiān)聽(tīng)微信支付成功

/// 微信支付成功
///
/// - Parameter notification: 通知
@objc func webViewWXPaySuccess(_ notification:Notification) {
    DispatchQueue.global().async {
        DispatchQueue.main.async {
           let request = NSMutableURLRequest(url: URL(string: self.WeiXinPayRedirectURL)!)
            request.httpMethod = "GET"
            request.setValue("zxl.**://", forHTTPHeaderField: "Referer")
            self.webView.load(request as URLRequest)
         }
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末伪嫁,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子偶垮,更是在濱河造成了極大的恐慌张咳,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件似舵,死亡現(xiàn)場(chǎng)離奇詭異脚猾,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)砚哗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén)龙助,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人蛛芥,你說(shuō)我怎么就攤上這事提鸟。” “怎么了仅淑?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵称勋,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我涯竟,道長(zhǎng)赡鲜,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任庐船,我火速辦了婚禮银酬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘醉鳖。我一直安慰自己捡硅,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布盗棵。 她就那樣靜靜地躺著,像睡著了一般北发。 火紅的嫁衣襯著肌膚如雪纹因。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,760評(píng)論 1 289
  • 那天琳拨,我揣著相機(jī)與錄音瞭恰,去河邊找鬼。 笑死狱庇,一個(gè)胖子當(dāng)著我的面吹牛惊畏,可吹牛的內(nèi)容都是我干的恶耽。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼颜启,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼偷俭!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起缰盏,我...
    開(kāi)封第一講書(shū)人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤涌萤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后口猜,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體负溪,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年济炎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了川抡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡须尚,死狀恐怖崖堤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情恨闪,我是刑警寧澤倘感,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站咙咽,受9級(jí)特大地震影響老玛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜钧敞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一蜡豹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧溉苛,春花似錦镜廉、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至寂玲,卻和暖如春塔插,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背拓哟。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工想许, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓流纹,卻偏偏與公主長(zhǎng)得像糜烹,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子漱凝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348