-
分析
次のようにH5通常の決済プロセスがあります
上記の支払いプロセスをアプリに発生よると - >マイクロ手紙 - >支払 - > [完了]をクリックします - >サファリアクセスURLのREDIRECT_URLセット、このプロセスは、ユーザーの経験が少し悪化して実際には、我々が期待しているアプリケーション - >マイクロ手紙 - >支払 - > > URLのAppアクセスREDIRECT_URLの設定 - [完了]をクリックします
上記の分析は非常に明確にされている、と何も、特定の実装については、次の話を処理を傍受することはありません。
-
分析
上記の分析を解決するためのアイデアによると、非常に明確でなければなりません
インターセプト要求
まず、decidePolicyForの傍受文字列を傍受でコールバック要求の支払:https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmwebあなたは次のように処理されるためのリンクが含まれている場合は、isload変数は、コントロールが最初であるかどうかであります再送要求を防ぐ変更要求パラメータなしREDIRECT_URL回
if urlString?.range(of: "https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb") != nil && !self.isload{ if let mUrlStr = urlString{ let array : Array = mUrlStr.components(separatedBy: "redirect_url=") self.redirect_url = array[1] let rs = "\(WXH5SchemeURL)://".urlEncoded() let mNewUrl = array[0] + "redirect_url=\(rs)" let newURLS = URL(string: mNewUrl) var mRequest = URLRequest.init(url: newURLS!, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 60) mRequest.setValue("\(WXH5SchemeURL)://", forHTTPHeaderField: "Referer") webView.load(mRequest) self.isload = true decisionHandler(.cancel) return } } self.isload = false decisionHandler(.allow) } 复制代码
インターセプトweixin :? // WAP /有料マイクロ手紙を開くために
if urlString?.range(of: "weixin://wap/pay?") != nil{ if let mUrlStr = urlString{ let openWX = URL(string: mUrlStr) if (UIApplication.shared.canOpenURL(openWX!)){ if #available(iOS 10.0, *){ UIApplication.shared.open(openWX!, options: [UIApplicationOpenSettingsURLString:false], completionHandler: nil) }else{ UIApplication.shared.openURL(openWX!) } } decisionHandler(.cancel) return } } 复制代码
このステップのない非常に良い説明が傍受することで、あなたは、マイクロチャネルの賃金を開くことができます。
プロジェクトの設定では、リターンのApp後のお支払いのためのスキームをリンク
図に次のように具体的な動作です。
この点は大きな成功を収めている、とあなたはそれがWebViewのは黒と白で返されたときに成功した入金後、今のAppに戻ることができていることがわかります。黒と白のは、実際にWebページが何らかの原因、我々は背景のurl REDIRECT_URL良い事前記録を使用する次のステップを持っていないです。
AppDelegateにurl.schemeリスニングの値
それは記録URL良いREDIRECT_URLの事前通知の通知を開始するには良いxxxx.com xxxx.com WebViewの負荷がある場合はAppDelegateでリスニングurl.scheme値で私たちの前に設定されています
if ([url.scheme rangeOfString:@"quanzidian.net"].length!=0) { [NSNotificationCenter defaultCenter] postNotificationName:@"WX_H5_PAY" object:nil]; return YES; } 复制代码
通知を受信wkWebView
NotificationCenter.default.addObserver(self, selector: #selector(goBackWhitWXPay), name: NSNotification.Name(rawValue: "WX_H5_PAY"), object: nil) 复制代码
リフレッシュWKWebview
@objc func goBackWhitWXPay(){ if !self.redirect_url.isEmpty{ self.request = URLRequest(url: URL(string: self.redirect_url)!) redirect_url = "" } } 复制代码
OCプロジェクトは/スウィフトは、いくつかの場所とあなた自身が矛盾書く真似行うために使用している言語で混合使用しています。
到这里微信H5支付所有的问题就完美解决了 唯一的坑就是在截取请求时,重写redirect_url时注意一定时授权的URL://的协议。
更多详情请访问https://siterzzz.github.io
作者:Siter
链接:https://juejin.im/post/5b45af6ae51d45198e7217fd