iOS中 最新微信支付/最全的微信支付教程詳解

AsaKQRZ 8年前發布 | 275K 次閱讀 支付 iOS開發 移動開發

親們, 首先讓我們來看一下微信支付的流程吧.

1. 注冊微信開放平臺,創建應用獲取appid,appSecret,申請支付功能,申請成功之后會返回一些參數.

2. 下載微信支付sdk

3. 客戶端請求訂單,后臺與微信后臺交互,返回給客戶端支付參數

4. 調用微信客戶端,由微信客戶端和微信服務器打交道;

5. 客戶端和服務端都會收到支付結果;(前臺消息不可靠,我們需要去后臺驗證,如果后臺沒有收到支付通知,后臺去微信服務器驗證然后將結果返回給客戶端)

 

支付流程圖(大家看一下支付流程).

那么我們現在就開始寫微信支付的demo了.

開發步驟

1:去微信開放平臺注冊應用

https://open.weixin.qq.com/cgi-bin/index?t=home/index&lang=zh_CN&token=2c0fee9c43e1eb8f9febcc7cb73abf598e2d4011


創建移動應用并成功之后會收到騰訊發來的郵件

通過郵件我們能獲得重要的參數:

(1):AppID

(2):微信支付商戶號

(4):前往商戶平臺完成入駐

(4):API秘鑰(自己設置即可,注意一定要32位字母加數字的組合)記得保存好秘鑰,以后要使用

 


有了這些參數后,我們就可以開發自己的項目了.

接下來, 我們就新建一個微信工程吧.

創建好工程以后呢, 我們去微信平臺下載sdk

鏈接: https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5#

 

下載好以后呢, 我們就開始集成SDK了

 



把左邊的SDK拉到工程里面哦.

大家會看到文件夾里面有集成SDK的步驟.

第一步: 在info.plist添加如下代碼

這個大家都很熟練拉

第二步:

添加需要的框架和依賴庫 (ps: 官方文檔沒讓添加libc++.tbd, 這點也是工程報錯的時候發現的...)

 

剩下的事情, 我們只需要按照官方文檔來做就行了, 親們.


我們還回到上個頁面.

 

微信:APPID:wx920fde9f97d60569

 

我們可以先使用這個APPID   (ps: 這是同事的前公司的應用ID)

1、項目設置APPID

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

這個我們按照文檔做一下就可以了.

2、注冊APPID

商戶APP工程中引入微信lib庫和頭文件,調用API前,需要先向微信注冊您的APPID,代碼如下:

[WXApi registerApp:@"wxd930ea5d5a258f4f];

 

3、調起支付

商戶服務器生成支付訂單,先調用【統一下單API】生成預付單,獲取到prepay_id后將參數再次簽名傳輸給APP發起支付。以下是調起微信支付的關鍵代碼:

現在我們只需要在控制器上添加一個button, 名字改成微信支付就可以了

button事件:

 

- (IBAction)weChatPayButtonAction:(id)sender
{
    PayReq *request = [[PayReq alloc] init];
    /** 商家向財付通申請的商家id */
    request.partnerId = @"1220277201";
    /** 預支付訂單 */
    request.prepayId= @"82010380001603250865be9c4c063c30";
    /** 商家根據財付通文檔填寫的數據和簽名 */
    request.package = @"Sign=WXPay";
    /** 隨機串,防重發 */
    request.nonceStr= @"lUu5qloVJV7rrJlr";
    /** 時間戳,防重發 */
    request.timeStamp= 1458893985;
    /** 商家根據微信開放平臺文檔對數據做的簽名 */
    request.sign= @"b640c1a4565b476db096f4d34b8a9e71960b0123";
    /*! @brief 發送請求到微信,等待微信返回onResp
     *
     * 函數調用后,會切換到微信的界面。第三方應用程序等待微信返回onResp。微信在異步處理完成后一定會調用onResp。支持以下類型
     * SendAuthReq、SendMessageToWXReq、PayReq等。
     * @param req 具體的發送請求,在調用函數后,請自己釋放。
     * @return 成功返回YES,失敗返回NO。
     */
    [WXApi sendReq: request];
}

 

4、支付結果回調

按照微信SDKSample,在類實現onResp函數,支付完成后,微信APP會返回到商戶APP并回調onResp函數,開發者需要在該函數中接收通知,判斷返回錯

誤碼,如果支付成功則去后臺查詢支付結果再展示用戶實際支付結果。注意

一定不能以客戶端返回作為用戶支付的結果,應以服務器端的接收的支付通知或查詢API返回的結果為準。

這是最后一步了, 我們在支付頁面支付完成以后呢要知道支付結果, 怎么做呢?

首先, 在AppDelegate.m里面實現該方法

 

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options
{
    /*! @brief 處理微信通過URL啟動App時傳遞的數據
     *
     * 需要在 application:openURL:sourceApplication:annotation:或者application:handleOpenURL中調用。
     * @param url 微信啟動第三方應用時傳遞過來的URL
     * @param delegate  WXApiDelegate對象,用來接收微信觸發的消息。
     * @return 成功返回YES,失敗返回NO。
     */
    return [WXApi handleOpenURL:url delegate:self];
}

 

 

接下來我們需要遵守下協議

 

最后一步, 就等支付結果出來以后回調一個函數了

/*! @brief 發送一個sendReq后,收到微信的回應
 *
 * 收到一個來自微信的處理結果。調用一次sendReq后會收到onResp。
 * 可能收到的處理結果有SendMessageToWXResp、SendAuthResp等。
 * @param resp具體的回應內容,是自動釋放的
 */
- (void)onResp:(BaseResp *)resp
{
    //支付返回結果,實際支付結果需要去微信服務器端查詢
    NSString *strMsg = [NSString stringWithFormat:@"支付結果"];
    switch (resp.errCode) {
        case WXSuccess:
            strMsg = @"支付結果:成功!";
            NSLog(@"支付成功-PaySuccess,retcode = %d", resp.errCode);
            break;
        default:
            strMsg = [NSString stringWithFormat:@"支付結果:失敗!retcode = %d, retstr = %@", resp.errCode,resp.errStr];
            NSLog(@"錯誤,retcode = %d, retstr = %@", resp.errCode,resp.errStr);
            break;
    }
}

 

這樣, 我們就完成了微信支付iOS客戶端的代碼,了解更多請關注博主微博:


Demo下載地址:https://github.com/XiaoHanGe/WeChatPay.git
ps: 大家工作中寫完以后要在真機上測試.
 

來自: http://blog.csdn.net/qq_31810357/article/details/51163567

 本文由用戶 AsaKQRZ 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!