iOS開發--微信支付

1、準備工作

  • 在開始使用微信支付之前,有一些東西是開發者必須要知道的。打開鏈接【微信支付】APP支付開發者文檔然后可以看到下面的頁面,這個就是微信支付商戶平臺的開發文檔,很多東西是可以查閱和了解的,在開發使用微信SDK支付功能的時候,遇到了問題也可以到這找找相關須知信息:
  • 然后,還要告訴讀者,點擊這個開發文檔中的" 支付賬戶>支付賬戶 ",然后滾動當前頁面到最下面可以看到關于APPID:


    注意:這個APPID是開發中使用微信支付必須要用的東西,而這個APPID也只有商戶通過在該微信支付平臺注冊,花個300元,填寫很多相關重要信息,還要上傳營業執照等必要手續,才能獲取的APPID。而商業app應用程序,在客戶使用app微信消費,程序會根據這個唯一的APPID,查找到商戶,然后把消費者的金額數傳遞到商戶的賬戶里。


    對于開發者,微信支付平臺提供了測試的Demo,也在Demo源碼中提供了有用的用于測試代碼的APPID。這樣開發者就除去了花個300元買個APPID的必要性。

2、下載官方SDK和Demo

  • 新建一個普通的工程,下載SDK和Demo并完成微信支付。
  • 在新建的工程里,我們把下載的SDK拖進去,下載的SDK文件中有五個文件,read_me.txt建議保留,方便以后查看這個SDK是哪一個版本:


  • 打開read_me.txt文件,其實里面就是講了最近幾個版本的更新中解決的問題,以及使用該SDK的注意事項,紅色框框起來的部分在后面的操作中都會用上。


  • 按照read_me.txt做一下必須要做的流程:



  • App Transport Security Settings是XCode7以后就需要開發中手動添加設置的,因為iOS9默認限制了http協議的訪問。
  • LSApplicationQueriesSchemes是可以將要使用的URL Schemes列為白名單,這樣當前應用可以使用微信的相關能力(分享、收藏、支付、登錄等)。
  • 最后還有一個操作,將微信支付要用到的APPID設置為URL Schemes(wxb4ba3c02aa476ea1)。


3、詳細代碼

  • 打開微信支付平臺的Demo程序,可以在它的AppDelegate的源碼中找到測試用的APPID:


  • 回到自己建立的工程中,寫下了微信支付的流程:


  • 到微信SDK的頭文件中查看一下,發現只提供了兩個注冊方法,注釋也寫的很清楚:


  • 然后我們導入這個頭文件之后,直接根據已經有的APPID進行注冊:


  • 再直接看支付部分,直接看看微信官方提供給我們的Demo:




    找到了Demo中完整的可以直接用的這部分發起微信支付的源碼:



    將這段直接拷貝到我的工程中,注意Demo源碼使用了autorelease,可以手動去掉,類方法可以換成實例方法,根據你的實際項目開發需求。
 + (NSString *)jumpToBizPay {
    NSString *urlString   = @"http://wxpay.weixin.qq.com/pub_v2/app/app_pay.php?plat=ios";
    //解析服務端返回json數據
    NSError *error;
    //加載一個NSURL對象
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString]];
    //將請求的url數據放到NSData對象中
    NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    if ( response != nil) {
        NSMutableDictionary *dict = NULL;
        //IOS5自帶解析類NSJSONSerialization從response中解析出數據放到字典中
        dict = [NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableLeaves error:&error];
        
        NSLog(@"url:%@",urlString);
        if(dict != nil){
            NSMutableString *retcode = [dict objectForKey:@"retcode"];
            if (retcode.intValue == 0){
                NSMutableString *stamp  = [dict objectForKey:@"timestamp"];
                
                //調起微信支付
                PayReq* req             = [[PayReq alloc] init];
                req.partnerId           = [dict objectForKey:@"partnerid"];
                req.prepayId            = [dict objectForKey:@"prepayid"];
                req.nonceStr            = [dict objectForKey:@"noncestr"];
                req.timeStamp           = stamp.intValue;
                req.package             = [dict objectForKey:@"package"];
                req.sign                = [dict objectForKey:@"sign"];
                [WXApi sendReq:req];
                //日志輸出
                NSLog(@"appid=%@\npartid=%@\nprepayid=%@\nnoncestr=%@\ntimestamp=%ld\npackage=%@\nsign=%@",[dict objectForKey:@"appid"],req.partnerId,req.prepayId,req.nonceStr,(long)req.timeStamp,req.package,req.sign );
                return @"";
            }else{
                return [dict objectForKey:@"retmsg"];
            }
        }else{
            return @"服務器返回錯誤,未獲取到json對象";
        }
    }else{
        return @"服務器返回錯誤";
    }
}
  • 進一步,我們在微信的SDK源碼頭文件中,可以找到兩個很有用的方法



    將其運用在我的工程中


  • 最后還需要做的就是,處理返回微信支付返回信息,使用了微信知否功能,不管是支付成功和失敗,甚至還是用戶自己取消支付,都會需要返回當前應用,并返回相關的信息。這就需要用到微信SDK的處理返回信息的代理協議和代理方法了:

    在微信SDK的頭文件中,我們可以找到protocol協議:

    看看官方Demo中看看它是如何使用的:


    而我們只需要使用下面紅色框框起來的部分代碼,直接拷貝拿來使用:

    回到我的工程中,直接粘貼在里面用:

    那么這里面的返回信息中主要就有兩個東西:resp.errCode錯誤碼 和 resp.errStr錯誤原因,這兩個東西在實際開發中經常遇到,所以也是面試會問到的一個細節。
    接著你可以通過點進連接:https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=8_5 可以在官方開發文檔中找到:

    然后,根據實際開發需求,我們可能還需要回傳微信app的相關信息:
    在當前AppDelegate.m文件添加一個代理方法:

4、真機測試

  • 到這里,就完成了整個微信支付的使用流程,下面可以用你的真機進行測試了。


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 前言:下面介紹微信支付的開發流程的細節,圖文并茂,你可以按照我的隨筆流程過一遍代碼。包你也學會了微信支付。而且支付...
    SmileFans閱讀 1,646評論 7 18
  • 首先你需要申請微信支付,申請相關支付參考:申請資料填寫界面預覽 申請到微信支付相關以后,下面這些東西對我們很重要。...
    愛吃魚的小灰閱讀 3,073評論 5 6
  • 一、微信集成 1、準備工作 ①、進入微信開放平臺,申請開發者賬號 ②、打開“管理中心”,“創建...
    EKven閱讀 689評論 0 1
  • 遇到的問題 之前iOS端APP可以正常支付,這幾天突然無法支付,提示“商戶傳入的appid參數不正確,請聯系商戶處...
    天霸動霸_tua閱讀 4,539評論 0 1
  • 先下載微信SDK,如果集成了友盟分享里的微信,那就不用下載,也不用配置環境,因為配置友盟分享的時候已經把微信支付的...
    夜涼聽風雨閱讀 5,953評論 1 16