iOS 微信 H5支付 吊起,回調(diào)相關(guān)問(wèn)題

app 中要集成H5微信支付,網(wǎng)上有些資料但是寫的很不完整,結(jié)合自己的開(kāi)發(fā)整理一下。
WKWebView為例

開(kāi)始之前先看H5 頁(yè)面在手機(jī)瀏覽器能不能用參考:https://wxpay.wxutil.com/mch/pay/h5.v2.php

 NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:self.url] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];   
 [self.webView loadRequest:request];

 這個(gè)加載H5發(fā)起支付的地址,不多說(shuō)

//注冊(cè)通知 回調(diào)用,下面說(shuō)
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(payBack) name:@"payReturn" object:nil];
    

核心部分(主要是吊起微信。?;氐紸PP)

- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler
{

   
    NSString *url = navigationAction.request.URL.absoluteString;
    if ([url containsString:@"weixin://wap/pay"]) {
        self.load = NO;
        NSLog(@"-00--%@---%@",navigationAction.request.URL,navigationAction.request.allHTTPHeaderFields);
// 第二步到這 吊起微信支付
        [[UIApplication sharedApplication] openURL:navigationAction.request.URL];
        decisionHandler(WKNavigationActionPolicyCancel);
    }
    else if ([url containsString:@"https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?"] && !self.load) {
  //  發(fā)起微信支付后先到這里 我們要做的是設(shè)置Referer這個(gè)參數(shù),解決回調(diào)到safari 瀏覽器,而不是APP 問(wèn)題。。(借助URL Scheme 喚起APP 相關(guān)知識(shí))
        NSURLRequest *request = navigationAction.request;
        NSMutableURLRequest *newRequest = [[NSMutableURLRequest alloc] init];
        newRequest.allHTTPHeaderFields = request.allHTTPHeaderFields;
#warning scheme 要改
//Referer這個(gè)參數(shù)。value值是在H5開(kāi)發(fā)者中心填寫的一級(jí)域名,不要加 http,記得加://
        [newRequest setValue:@"www.123.com://" forHTTPHeaderField: @"Referer"];
        newRequest.URL = request.URL;
//修改完成之后加載
        [webView loadRequest:newRequest];
        self.load = YES;
        decisionHandler(WKNavigationActionPolicyCancel);
    } else
    {
        // 其他請(qǐng)求正常進(jìn)行
          decisionHandler(WKNavigationActionPolicyAllow);
    }
  
}


關(guān)于不能回調(diào)到APP,多說(shuō)一句,這個(gè)地址有時(shí)候加了redirect_url這個(gè)回調(diào)的網(wǎng)址,會(huì)回調(diào)瀏覽器,,
 https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx20161110163838f231619da20804912345&package=1037687096&redirect_url=https%3A%2F%2Fwww.wechatpay.com.cn

我把newRequest.URL 對(duì)字符串處理,,在load 之前把redirect_url參數(shù)去掉,但是這個(gè)值要記錄到一個(gè)全局變量self.reUrl之中,,回調(diào)到APP中做查詢結(jié)果之用

關(guān)于回調(diào)
一般會(huì)發(fā)生白屏情況

//appdelegate  里面方法,,應(yīng)該懂吧
(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options{
   NSString *urlStr = [NSString stringWithFormat:@"%@",url];
    //BUG修改
    if([urlStr hasPrefix:@"www.123.com://"]){
      
        //發(fā)送通知
        [[NSNotificationCenter  defaultCenter] postNotificationName:@"payReturn" object:nil];
        
        return YES;
    }
    
}


//   H5支付頁(yè)面方法,別混了
-(void)payBack
{
    NSLog(@"支付回來(lái)了----");
// self.reUrl 就是記錄的那個(gè)全局變量,,再次加載,一般做查詢支付是否成功----到此結(jié)束
    NSString *str = [self URLDecodedString:self.reUrl];

    NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:str] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
    
    [self.webView loadRequest:request];
    
}

還有一點(diǎn)


屏幕快照 2019-07-30 下午3.04.51.png

我可以了,,你們看看吧,,有問(wèn)題可以指出來(lái)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 微信H5支付是指商戶在微信客戶端外的移動(dòng)端網(wǎng)頁(yè)展示商品或服務(wù),用戶在商品展示頁(yè)確認(rèn)使用微信支付時(shí),商戶發(fā)起本服務(wù)喚...
    JunChow520閱讀 27,097評(píng)論 0 18
  • 1、設(shè)置URL Schemes 2、在AppDelegate里注冊(cè)微信支付[WXApi registerApp:@...
    仲子閱讀 1,676評(píng)論 2 9
  • 今日推薦 經(jīng)常閱讀博客是個(gè)好習(xí)慣推薦鴻洋CSDN的博客 微信支付相關(guān)文章 詳細(xì)介紹Android開(kāi)發(fā)集成微信支付(...
    MrQ_Android閱讀 6,284評(píng)論 9 52
  • 勇 七子 春天的早晨 你就 站出來(lái) 唱
    七子_868c閱讀 120評(píng)論 0 1
  • 會(huì)在某一個(gè)瞬間,特別想要一個(gè)擁抱。 抱住男友和抱住貓,其實(shí)也沒(méi)有什么區(qū)別吧,都是被治愈的感覺(jué)。
    仍不在閱讀 326評(píng)論 0 0

友情鏈接更多精彩內(nèi)容