導航:首頁 > 文件教程 > ios微信網頁支付介面開發教程

ios微信網頁支付介面開發教程

發布時間:2023-03-19 03:00:21

微信H5支付介面開發,安卓調用不了,蘋果可以正常調用

1、微信平台申請
申請入口:登錄微信商戶平台-->產品中心-->我的產品-->支付產品-->H5支付

2、填寫參數
在微信支付平台成功申請到微信 H5 支付後,可以通過工單或 IM(標准版及以上版本)填寫渠道參數。

② 如何在IOS的safari瀏覽器調起微信支付

在瀏覽器中調起微信支付,一般情況下,是在後台接入微信支付的介面,然後當用戶需要支付的時候,在前台顯示一個支付的二維碼,用戶使用微信支付的掃一掃功能,掃描該二維碼,獲取相應的支付信息,使用手機進行支付

③ iOS-APP實現微信H5支付總結

1、發起下單請求( 調用統一下單介面 )註:交易類型trade_type=MWEB

2、統一下單介面返回支付相關參數給商戶後台,如支付跳轉url(參數名「mweb_url」),商戶通過mweb_url調起微信支付中間頁。如: https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=&package=600759311&redirect_url=http%3a%2f%2www..com

3、中間頁進行H5許可權的校驗,安全性檢查( 具體錯誤見微信官方文檔 )

4、如果許可權校驗成功,微信支付中間頁會發起支付請求。請求完畢跳到回調頁面(由redirect_url決定)。APP需要在webView中監聽這個請求,打開微信進行支付。如: weixin://wap/pay?prepayid%&package=2965581453&noncestr=1545905512&sign=

5、微信支付完畢跳回APP。

HTTP Referer是header的一部分,當瀏覽器向web伺服器發起請求的時,一般會帶上Referer,告訴伺服器我是從哪個頁面鏈接過來。微信中間頁會對Referer進行校驗,非安全域名將不能正常載入。
redirect_url是微信中間頁喚起微信支付之後,頁面重定向的地址。中間頁喚起微信支付後會跳轉到指定的redirect_url。並且微信APP在支付完成時,也是通過redirect_url回調結果,redirect_url一般是一個頁面地址,所以微信支付完成會打開Safari瀏覽器。本文通過修改redirect_url,實現微信支付完畢跳回當前APP。

需要將微信H5支付的安全域名配置成scheme,微信支付完成會通過這個scheme跳轉回APP。

再shouldStartLoadWithRequest:方法裡面攔截微信中間頁(以「 https://wx.tenpay.com 」開頭鬧戚侍的請求),截取redirect_url,如果redirect_url已經被替換成scheme不攔截,如果沒有被替換,攔截請求,保存當前的redirect_url。創建一個新的微信中間頁請求,將redirect_url替換成「安全域名://」(微信支付完畢會通過openURL打開當前APP,如果不替換redirect_url,微信支付完畢會打開Safari瀏覽器。)。設置「Referer」為安全域名(微信會校驗Referer,不是安全域名會載入失敗),重新load請求。

微信中間頁載入成功後,會收到一個打開微信的請求,用openURL:打開這個url實現跳轉到微信支付。

微信中間頁跳轉到微信時液吵,會將頁面從定向到仔毀redirect_url,由於redirect_url被我們修改為scheme,所以需要攔截這個非法的scheme請求,替換成記錄下的redirect_url。

以UIWebView為例

還有一篇文章講的是H5支付封裝,H5支付不僅可以在網頁上使用,原生也可以調用。具體內容見: iOS-H5支付(微信、支付寶)原生封裝

④ 微信網頁支付應該怎麼調用微信介面

1、申請微信支付。

程序認證以後,可以在小程序後台,微信支付菜單欄,申請微信支付。

填寫企業信息和對公賬戶,微信譽跡支付會打一筆隨機金額到對公賬戶,輸入金額完成驗證後,在線簽署遷移,即完成了微信支付的申請流程。

微信支付申請完,會發送微信支付商戶號,商戶平台用戶名密碼等信息到注冊者郵箱。

2、配置小程序密鑰。

小程序後台設置頁,點擊生成,管伍洞理員驗證二維碼後,會隨機生成AppSecret。

請妥善保管好Appsecret,不要明文存儲於伺服器,AppSecret用於和微信伺服器交互。

比如獲取用戶的openid介面就需要用到.

3、設置密鑰和下載證書

用申請微信支付獲得的用戶名和密碼,登錄商戶平台(pay.weixin.qq),在賬戶中心,API安全中下載證書和設置密鑰。

密鑰是32位,設置以後需要妥善保管,因為無法查看密鑰,所有微信支付相關的介面都會使用這個密鑰加密。

4、配置HTTPS伺服器小程序的前端是使用微信提供的框架開發,但是後台依然是開發者自己的伺服器。

小程序發起的是HTTPS請求,意味著小程序開發者必須配置HTTPS伺服器。

配置HTTPS伺服器之前,先要獲取證書,證書可以向相關機構購買,騰訊雲目前可以向用戶提供免費的證書。

5、微信支付流程

微信支付有多種支付方式,包括刷卡支付,公眾號支付,掃碼支付,APP支付,所有微信支付的介面都可以到官方找到。

小程序是在微信里調起支付的,其實是公眾號支付,關於公眾號支付的詳細文檔可以這里找到: bbs51/f-37-1/。

所有公眾號支付相關的鏈接都可以在此鏈接找到,開發者首先需要大概了解這些介面。

6、小程序調起微信支付,用的是小程序微信支付介面wx.requestPayment,該介面的詳細描述可以查看小程序的微信支付API。

這個介面中的package和timeStamp參數是從開發者的第三方伺服器返回的,package是第三方伺服器從統一下單介面回復中獲得。

介面中其他的參數,appId,noceStr,signType以及paySign則由小程序這邊存儲或慶橘並者計算而得。

⑤ iOS H5調用微信(支付寶)支付與回調

利用WKWebView載入網頁,在app中處理H5頁面調用微信支付 ------ 實現WKNavigationDelegate協議

該方法是決定H5頁面是否允許跳轉的

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

    WKNavigationActionPolicy  actionPolicy =WKNavigationActionPolicyAllow;//允許

    NSString*urlScheme = navigationAction.request.URL.scheme;

    NSString*urlString = navigationAction.request.URL.absoluteString;

    NSString *wxPre = @"https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb";

    NSURLRequest*request = navigationAction.request;

    NSLog(@"urlScheme:%@",urlScheme);

    NSLog(@"urlStr:%@",urlString);

    if([urlString containsString:@"weixin://wap/pay?"]) {

         actionPolicy =;//不唯則允許跳轉

         NSURL*url = [NSURLURLWithString:urlString];

             if([[]respondsToSelector:@selector(openURL:options:completionHandler:)]){

            if(@available(iOS10.0, *)) {

                [[UIApplication sharedApplication] openURL:url options:@{: @NO} completionHandler:^(BOOL success) {

                }];

            }else{

                // Fallback on earlier versions

                [[]openURL:url];

            }

        }else{

       碼謹     [[UIApplication sharedApplication]openURL:url];

        }

    }

    decisionHandler(actionPolicy);//這句是必須加上的,不然會異常

}

很多小夥伴兒都遇到回跳的問題,點擊「完成」或「取消」跳到了Safari卻跳不回APP。

 2.1、配置URL Types   添加schemes:www.xxxx.com

2.2、配置 Referer

 [requestsetValue:@"www.suxiangshidai.com://" forHTTPHeaderField:@"Referer"];

2.3、伺服器回調的URL中一定要寫成  www.suxiangshidai.com:// , 如果一定要拼接,可以讓後台區分一下,如指模棚果是iOS 前面一定要寫成 www.suxiangshidai.com:// ,不然跳不回APP。

注意:www.xxxx.com 此域名一定是H5授權的域名,如果是二級域名,可以寫成:aaa.xxxx.com

一般支付完 不管完成與否都要調一下回調地址來刷新支付頁面的,但問題是iOS的回調地址中一定要寫成 www.xxxx.com:// 這樣的格式才能跳回來,但是調回來後沒有執行回調地址,頁面又刷新不了,或者跳回來後是個空白頁,這又產生了一個新的問題。當點擊微信支付頁上的「完成」或「取消」返回APP時,會調用 AppDelegate 中的 openURL: 方法

-(BOOL)application:(UIApplication*)app openURL:(NSURL*)url options:(NSDictionary *)options{ 

  // url.scheme 就是 www.suxiangshidai.com,你只需要在這做一個判斷,如果是 www.suxiangshidai.com 你就給外部發一個通知,那外部接收到這個通知,刷新界面就行了。

//刷新地址也就是支付完的回調地址,後台可以把回調地址拼接在 www.xxxx.com:// 後面,例如:www.xxxx.com://http://www..com 。 那麼 url 就是 www.xxxx.com:// http://www..com ,你向外部發通知時把 url 作為參數傳出去即可 

    if ([url.scheme containsString:@"www.suxiangshidai.com"]) {

        [[NSNotificationCenter defaultCenter] postNotificationName:@"weChatPayHandle" object:nil userInfo:@{@"url":url}];

    }

    return YES;

}

//微信支付後刷新主界面 (處理通知的方法 )

-(void)refreshOrderData:(NSNotification*)notifi{

    NSDictionary*dic = notifi.userInfo;

    NSString*url = [NSStringstringWithFormat:@"%@",dic[@"url"]];

    NSRange range = [url rangeOfString:@"www.suxiangshidai.com://"];

    NSString*lastUrl = [urlsubstringFromIndex:range.length];

    NSLog(@"%@",lastUrl);

    [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:lastUrl]]];

}

解決h5的支付寶支付問題 可以提供兩種解決辦法

 第一種 調用支付寶網頁支付 

(問題 支付成功後回調到了游覽器,無法返回APP,解決如下)

//以WKWebView為例  

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

    WKNavigationActionPolicy  actionPolicy =WKNavigationActionPolicyAllow;//允許

    NSString*urlScheme = navigationAction.request.URL.scheme;

    NSString*urlString = navigationAction.request.URL.absoluteString;

    NSString *wxPre = @"https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb";

    NSURLRequest*request = navigationAction.request;

    NSLog(@"urlScheme:%@",urlScheme);

    NSLog(@"urlStr:%@",urlString);

    //  先判斷一下,找到需要跳轉的再做處理

    if([urlSchemeisEqualToString:@"alipay"]) {

         //  1.以?號來切割字元串

        NSArray* urlBaseArr = [:@"?"];

        NSString* urlBaseStr = urlBaseArr.firstObject;

        NSString* urlNeedDecode = urlBaseArr.lastObject;

        //  2.將截取以後的Str,做一下URLDecode,方便我們處理數據

       //  NSMutableString * afterDecodeStr = [NSMutableString stringWithString:[self URLDecodedString:urlNeedDecode]];

        NSString*afterDecodeStr =WebURLDecodedString(urlNeedDecode);

        //  3.替換裡面的默認Scheme為自己的Scheme

        NSString* afterHandleStr = [:@"alipays"withString:@"QEQuickEnjoyment"];

       //  4.然後把處理後的,和最開始切割的做下拼接,就得到了最終的字元串

        NSString* finalStr = [NSStringstringWithFormat:@"%@?%@",urlBaseStr,WebURLEncode(afterHandleStr)];

        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

            //  判斷一下,是否安裝了支付寶APP(也就是看看能不能打開這個URL)

            if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:finalStr]]) {

                [[UIApplication sharedApplication] openURL:[NSURL URLWithString:finalStr]];

            }

        });

        //  2.這里告訴頁面不走了 -_-

        decisionHandler();

        return;

    }

  decisionHandler(actionPolicy);//這句是必須加上的,不然會異常

}

// OC 做URLEncode的方法

staticinlineNSString* WebURLEncode(NSString* str){

    NSString*charactersToEscape =@"#[]@!$'()*+,;\"<>%{}|^~`";

    NSCharacterSet*allowedCharacters = [[:charactersToEscape]invertedSet];

    NSString *encodedUrl = [[str description] :allowedCharacters];

    return encodedUrl; }

staticinlineNSString*WebURLDecodedString(NSString* str)

{  return [str ]; }

這樣h5處理支付寶就可以了

但是如果想在支付寶成功後app處理事件 處理如下:

回到Appdelegate的代理方法

-(BOOL)application:(UIApplication*)app openURL:(NSURL*)url options:(NSDictionary *)options{// 判斷一下這個host,safepay就是支付寶的if([url.host isEqualToString:@"safepay"]) {// 拿到這個鏈接的數據,數據大概是這樣的/*

        mushRoomBox://safepay/?%7B%22memo%22:%7B%22result%22:%22%7B%5C%22alipay_trade_wap_pay_response%5C%22:%7B%5C%22code%5C%22:%5C%2210000%5C%22,%5C%22msg%5C%22:%5C%22Success%5C%22,%5C%22app_id%5C%22:%5C%222017020505522491%5C%22,%5C%22auth_app_id%5C%22:%5C%222017020505522491%5C%22,%5C%22charset%5C%22:%5C%22GBK%5C%22,%5C%22timestamp%5C%22:%5C%222018-11-09%2011:43:06%5C%22,%5C%22out_trade_no%5C%22:%5C%222018100001_simple_%5C%22,%5C%22total_amount%5C%22:%5C%220.01%5C%22,%5C%22trade_no%5C%22:%5C%%5C%22,%5C%22seller_id%5C%22:%5C%222088221175674834%5C%22%7D,%5C%22sign%5C%22:%5C%22T6jn7QSsvjjG%5C/%5C/%5C/QHc++1TZnraDfm0I%5C/OwAnA5iCTOhq%5C/fkm%5C/i0vLk17W8s+LjcOUT%5C/zB6K6gN+fyCefm8FOJ+8g4GUAreuZDcW0MuGE1OOmaxDrXg==%5C%22,%5C%22sign_type%5C%22:%5C%22RSA2%5C%22%7D%22,%22ResultStatus%22:%229000%22,%22memo%22:%22%22%7D,%22requestType%22:%22safepay%22%7D

        *///  然後,一樣的套路方法

NSString* urlNeedjsonStr = url.absoluteString;

NSArray* afterComStr = [urlNeedJsonStr componentsSeparatedByString:@"?"];/

/  這個decode方法,在上面找哈NSString* lastStr = [self WebURLDecodedString:afterComStr.lastObject];//  這個lastStr,其實是一個jsonStr,轉一下,就看到了數據

NSDictionary* dict = [self dictionaryWithJsonString:lastStr];//  dict的結構差不多是這樣/*

          "memo": {

                  "result":"訂單相關信息,如訂單號,支付金額等等";

                  "ResultStatus":"9000";

          },

          ******

        *///  和支付寶SDK的返回結果一次,這個ResultStatus,就是我們要的數據//  9000 :支付成功//  8000 :訂單處理中//  4000 :訂單支付失敗//  6001 :用戶中途取消//  6002 :網路連接出錯//  這里的話,就可以根據狀態,去處理自己的業務了}returnYES;}

-  (NSDictionary*)dictionaryWithJsonString:(NSString*)jsonString{

  if(jsonString ==nil) {

   return nil; 

   }

NSData*jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];

NSError*err;NSDictionary*dic = [:jsonData                                                        options::&err];

if(err)   

 {NSLog(@"json解析失敗:%@",err);

return nil;    

}return dic;

}

接支付寶提供的SDK,schemeStr參數傳入自己APP的URLScheme即可。 具體的  手機網站支付轉Native支付

1.1、掉起支付寶APP

1.2、支付完成後,支付寶APP要返回到我們的APP裡面來

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

    BOOL isIntercepted = [[AlipaySDK defaultService] payInterceptorWithUrl:[navigationAction.request.URL absoluteString] fromScheme:@"WRWarehouseHasRice" callback:^(NSDictionary *result) {

        // 處理支付結果

        NSLog(@"%@", result);

        // isProcessUrlPay 代表 支付寶已經處理該URL

        if([result[@"isProcessUrlPay"]boolValue]) {

            // returnUrl 代表 第三方App需要跳轉的成功頁URL

            NSString*urlStr = result[@"returnUrl"];

        }

    }];

    if(isIntercepted) {

             decisionHandler(); 

     return; 

   }

           decisionHandler(WKNavigationActionPolicyAllow);

}

⑥ iOS如何在WebView頁面調起微信支付並可以返回App

iOS可以不集成微信支付SDK,通過WebView頁面調起微信支付頁面,具體配置流程如下:

    1、需要在Xcode工程Targets中配置白名單,確保能夠順利跳轉到微信

    2、在Xcode工程Targets中配置URL Types,設置的URL Schemes為微信支付商戶平台申請的域名,羨廳從歷察而可以讓微信識別回到調起支付的的App

3、在WKWebView的代理方法中,攔截微信支付的鏈接,配置支付授權域名,即Refer欄位

注意:如果有多個host域名,可以服務端配置下發。

4、經過這三個步驟後,可以調起微信支付,並且取消支付或完成支付時,可以回到App;接下來的問題是頁面如何刷新的問題,一般有兩種處理方案:

 (1)調起微信支付的同時在WebView頁面彈出一個提示框,回來後可以讓用戶點擊已完成支付或遇到問題,然後頁面刷新

(2)在AppDelegate中,,監聽迴流到App的域名是否是微信支付的回調,通過通知的肢派茄形式刷新WebView頁面

一般項目使用方案一的較多,可以減少多餘的判斷處理邏輯,刷新邏輯放在WebView頁面處理,我們在項目中也是使用的這種方案。

⑦ iOSAPP端接入微信支付流程

商戶在微信開放平台申請開發APP應用後,微信開放平台會生成APP的唯一標識APPID。在Xcode中打開項目,設置項目屬性中的URL Schemes為您的APPID。如圖所示。

2.導入微信支付SDK

將官方demo中的這個文件夾拷貝到項目里

在APPdelegate里設置APPID

導入依賴庫

項首薯目中點擊支付的按鈕寫上如下方法

別忘了導入頭文件和遵循代理和注冊代理  

info.plist里添加如下欄位LSApplicationQueriesSchemes,為Array類型,然後在裡面添加兩個小選項,分別為weixin和wechat

注意!!!下面這三處  一定要對應上  少一不可

如果不回調州敏,APPdelegate里寫上這個

//被廢棄的方法如下

- (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)url {

    return  [WXApi handleOpenURL:url delegate:[WXApiManager sharedManager]];

}

- (BOOL)application:(UIApplication*)application openURL:(NSURL*)url sourceApplication:(NSString*)sourceApplication annotation:(id)annotation {

    return [WXApi handleOpenURL:url delegate:[WXApiManager sharedManager]];

}

//替換的新方法

- (BOOL)application:(UIApplication*)app openURL:(NSURL*)url options:(NSDictionary*)options {

    return [WXApi handleOpenURL:url delegate:[WXApiManager sharedManager]];

}

//調起微信支付

    PayReq* req  = [[PayReq alloc] init];

    req.partnerId = @"1220277201";

    req.prepayId  = @"";

    req.nonceStr  = @"83DB7tk21akNRSFs";

    req.timeStamp = 1458027344;

    req.package  = @"Sign=WXPay";

    req.sign      = @"";

    [WXApi sendReq:req];

// 獲取當前時間

    time_t now;

 者跡者   time(&now);

    // 時間戳

    //NSString *timestamp = [NSString stringWithFormat:@"%ld", now];

    // 隨機字元串

    //NSString *nonceStr = [[self md5:timestamp] uppercaseString];

    //訂單id

    NSString *prepayid =  _prepayid;

    PayReq *request = [[PayReq alloc] init];

    /** 商家向財付通申請的商家id */

    request.partnerId = WXPartnerid;

    /** 預支付訂單 */

    request.prepayId= prepayid;

    /** 商家根據財付通文檔填寫的數據和簽名 */

    request.package = @"Sign=WXPay";

    /** 隨機串,防重發 */

    request.nonceStr= _noncestr;

    /** 時間戳,防重發 */

    request.timeStamp = [_timestamp intValue];

    /** 商家根據微信開放平台文檔對數據做的簽名 */

    request.sign= _sign;

    /*! @brief 發送請求到微信,等待微信返回onResp

     *

     * 函數調用後,會切換到微信的界面。第三方應用程序等待微信返回onResp。微信在非同步處理完成後一定會調用onResp。支持以下類型

     * SendAuthReq、SendMessageToWXReq、PayReq等。

     * @param req 具體的發送請求,在調用函數後,請自己釋放。

     * @return 成功返回YES,失敗返回NO。

     */

    [WXApi sendReq: request];

⑧ Cocos creator ios開發—微信支付(三)

目錄: Cocos creator ios開發-接入微信SDK系列文章

這是官方文檔: app微信支付開發文檔

第一步、
先接入微信SDK,請參考 Cocos creator ios開發—接入微信SDK

第二步、拿旁拿
在Xcode的Info的設置項中,URL Types 的URL Schemes填寫APPID
在AppController.h中添加消搭介面:

app啟動時,注冊APPID,在AppController.mm中的didFinishLaunchingWithOptions方法中調用

第三步、
向oc發啟悶送支付信息

第四步、
oc收到支付信息,發起支付

閱讀全文

與ios微信網頁支付介面開發教程相關的資料

熱點內容
maya粒子表達式教程 瀏覽:84
抖音小視頻如何掛app 瀏覽:283
cad怎麼設置替補文件 瀏覽:790
win10啟動文件是空的 瀏覽:397
jk網站有哪些 瀏覽:134
學編程和3d哪個更好 瀏覽:932
win10移動硬碟文件無法打開 瀏覽:385
文件名是亂碼還刪不掉 瀏覽:643
蘋果鍵盤怎麼打開任務管理器 瀏覽:437
手機桌面文件名字大全 瀏覽:334
tplink默認無線密碼是多少 瀏覽:33
ipaddgm文件 瀏覽:99
lua語言編程用哪個平台 瀏覽:272
政采雲如何導出pdf投標文件 瀏覽:529
php獲取postjson數據 瀏覽:551
javatimetask 瀏覽:16
編程的話要什麼證件 瀏覽:94
錢脈通微信多開 瀏覽:878
中學生學編程哪個培訓機構好 瀏覽:852
榮耀路由TV設置文件共享錯誤 瀏覽:525

友情鏈接