iOS微信支付簡(jiǎn)單粗暴篇

啥也不說(shuō)了茅逮,直接進(jìn)主題:
首先去這個(gè)網(wǎng)頁(yè) https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419319164&lang=zh_CN 下載微信支付需要的SDK,倒入進(jìn)自己的工程中。

微信支付SDK.png

添加依賴庫(kù):


A9362E87-CD04-4DD0-9947-6D72A3F88662.png

修改兩配置:


3BE0696E-C53B-4BB0-ACC6-F594A0F49D23.png
5B7F4099-89C9-4EF1-85A0-BF836476F8C6.png

這里需要在info里面配置兩個(gè)東西宣渗,一個(gè)白名單一個(gè)就是http請(qǐng)求網(wǎng)絡(luò)允許

B9BBAEF1-5757-46EA-A813-8A24876C990F.png

OK胰挑,開(kāi)始敲代碼:
在AppDelegate.h里面:


8B83AD9F-5AD6-41BC-8D4A-2F82013FA6C2.png

在AppDelegate.m中寫(xiě)下面的代碼:

   #import "AppDelegate.h"
   #import "WXApiManager.h"
   // 微信開(kāi)放平臺(tái)申請(qǐng)得到的 appid, 需要同時(shí)添加在 URL schema
   NSString * const WXAppId = @"wxd930ea5d5a258f4f";
   @interface AppDelegate ()
   @end
   @implementation AppDelegate
   - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
       [WXApi registerApp:WXAppId];
       return YES;
   }
   #pragma mark - 微信支付回調(diào)
   - (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]];
   }
   // NOTE: 9.0以后使用新API接口
    - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options
   {
       return [WXApi handleOpenURL:url delegate:[WXApiManager sharedManager]];
   }

Demo整體這么多file注意對(duì)應(yīng):


4BAD73D2-194E-4260-A7AA-BF5150197A90.png

下面是WXApiManager.h

   #import <Foundation/Foundation.h>
   #import "WXApi.h"

   @interface WXApiManager : NSObject<WXApiDelegate>

   + (instancetype)sharedManager;

   @end

WXApiManager.m文件:

   #import "WXApiManager.h"
   @implementation WXApiManager
   #pragma mark - 單例
   +(instancetype)sharedManager {
       static dispatch_once_t onceToken;
       static WXApiManager *instance;
       dispatch_once(&onceToken, ^{
           instance = [[WXApiManager alloc] init];
       });
       return instance;
   }

   #pragma mark - WXApiDelegate

   - (void)onResp:(BaseResp *)resp
   {
if([resp isKindOfClass:[PayResp class]]){
    
    //支付返回結(jié)果夕冲,實(shí)際支付結(jié)果需要去微信服務(wù)器端查詢
    NSString *strMsg;

    switch (resp.errCode) {
        case WXSuccess:
            strMsg = @"支付結(jié)果:成功!";
            NSLog(@"支付成功-PaySuccess语卤,retcode = %d", resp.errCode);
            break;
            
        default:
            strMsg = [NSString stringWithFormat:@"支付結(jié)果:失敗!retcode = %d, retstr = %@", resp.errCode,resp.errStr];
            NSLog(@"錯(cuò)誤粹舵,retcode = %d, retstr = %@", resp.errCode,resp.errStr);
            break;
           }
       }
   }
   @end

在ViewController.m文件中寫(xiě)上以下的代碼就搞定了:

   #import "ViewController.h"
   #import "WXApi.h"

   @interface ViewController ()

   @end

   @implementation ViewController

   - (void)viewDidLoad {
       [super viewDidLoad];
   //    [self bizPay];
   }
   //模擬
   - (IBAction)wxPayClick:(id)sender {
       [self easyPay];
   }

   //模擬支付訂單
   - (void)easyPay{
   //    NSDictionary *dict = @{@"appid":@"wx75b78ead0e64a547",@"attach":@"支付測(cè)試",@"body":@"APP支付測(cè)試",@"mch_id":@"10000100",@"nonce_str":@"1add1a30ac87aa2db72f57a2375d8fec",@"notify_url":@"http://wxpay.wxutil.com/pub_v2/pay/notify.v2.php",@"out_trade_no":@"1415659990",@"spbill_create_ip":@"14.23.150.211",@"total_fee":@"0.1",@"trade_type":@"APP",@"sign":@"0CB01533B8C1EF103065174F50BCA001"};
   //    NSMutableString *stamp  = [dict objectForKey:@"timestamp"];

//調(diào)起微信支付
PayReq* req             = [[PayReq alloc] init];
req.partnerId           = @"1900000109";
req.prepayId            = @"WX1217752501201407033233368018";
req.nonceStr            = @"5K8264ILTKCH16CQ2502SI8ZNMTM67VS";
req.timeStamp           = 1412000000;
req.package             = @"Sign=WXPay";
req.sign                = @"9A0A8659F005D6984697E2CA0A9CF3B7";
[WXApi sendReq:req];
   }
   //真實(shí)生成訂單走這個(gè)方法
   - (void)bizPay {
       NSString *res = [self jumpToBizPay];
       if( ![@"" isEqual:res] ){
           UIAlertView *alter = [[UIAlertView alloc] initWithTitle:@"支付失敗" message:res delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
    
    [alter show];
}

   }
   -(NSString *)jumpToBizPay {
//============================================================
// V3&V4支付流程實(shí)現(xiàn)
// 注意:參數(shù)配置請(qǐng)查看服務(wù)器端Demo
// 更新時(shí)間:2015年11月20日
//============================================================
NSString *urlString   = @"http://wxpay.weixin.qq.com/pub_v2/app/app_pay.php?plat=ios";
//解析服務(wù)端返回json數(shù)據(jù)
NSError *error;
//加載一個(gè)NSURL對(duì)象
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString]];
//將請(qǐng)求的url數(shù)據(jù)放到NSData對(duì)象中
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
if ( response != nil) {
    
    NSMutableDictionary *dict = NULL;
    //IOS5自帶解析類NSJSONSerialization從response中解析出數(shù)據(jù)放到字典中
    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"];
            
            
            //調(diào)起微信支付
            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 @"服務(wù)器返回錯(cuò)誤钮孵,未獲取到j(luò)son對(duì)象";
    }
}else{
    return @"服務(wù)器返回錯(cuò)誤";
   }
 }
 - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
  }
 @end

基本上到這里,你的應(yīng)用跳轉(zhuǎn)微信支付是沒(méi)有問(wèn)題的了眼滤,我們移動(dòng)端做的事情就這么多的巴席,剩下的拋給后臺(tái)弄吧,如果他不會(huì)诅需,就說(shuō)他菜漾唉,別傻傻的把支付生成訂單這么牛逼的事情放在我們移動(dòng)端,會(huì)出問(wèn)題的诱担。切記切記毡证!
GitHub下載地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蔫仙,隨后出現(xiàn)的幾起案子料睛,更是在濱河造成了極大的恐慌,老刑警劉巖摇邦,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件恤煞,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡施籍,警方通過(guò)查閱死者的電腦和手機(jī)居扒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)丑慎,“玉大人喜喂,你說(shuō)我怎么就攤上這事「土眩” “怎么了玉吁?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)腻异。 經(jīng)常有香客問(wèn)我进副,道長(zhǎng),這世上最難降的妖魔是什么悔常? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任影斑,我火速辦了婚禮,結(jié)果婚禮上机打,老公的妹妹穿的比我還像新娘矫户。我一直安慰自己,他們只是感情好姐帚,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布吏垮。 她就那樣靜靜地躺著障涯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪膳汪。 梳的紋絲不亂的頭發(fā)上唯蝶,一...
    開(kāi)封第一講書(shū)人閱讀 51,708評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音遗嗽,去河邊找鬼粘我。 笑死,一個(gè)胖子當(dāng)著我的面吹牛痹换,可吹牛的內(nèi)容都是我干的征字。 我是一名探鬼主播,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼娇豫,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼匙姜!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起冯痢,我...
    開(kāi)封第一講書(shū)人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤氮昧,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后浦楣,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體袖肥,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年振劳,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了椎组。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡历恐,死狀恐怖寸癌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情弱贼,我是刑警寧澤灵份,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站哮洽,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏弦聂。R本人自食惡果不足惜鸟辅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望莺葫。 院中可真熱鬧匪凉,春花似錦、人聲如沸捺檬。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至聂受,卻和暖如春蒿秦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蛋济。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工棍鳖, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人碗旅。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓渡处,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親祟辟。 傳聞我的和親對(duì)象是個(gè)殘疾皇子医瘫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容