iOS開(kāi)發(fā)微信SDK的集成(分享、支付)

在我們的App中是很經(jīng)常的會(huì)用到微信的兩個(gè)功能荸镊,1就是分享咽斧,2就是支付(通常會(huì)和支付寶、銀聯(lián)支付放在一起使用),通常接入這種三方的東西躬存,對(duì)于移動(dòng)端來(lái)說(shuō)张惹,過(guò)程都比較簡(jiǎn)單,但是對(duì)于后臺(tái)來(lái)說(shuō)岭洲,一般也不是說(shuō)難宛逗,就是步驟多,配置的東西比移動(dòng)端多(像比如支付過(guò)程), 廢話不多說(shuō)盾剩,由于我這里的分享只需要做微信的分享雷激,所以過(guò)程比較簡(jiǎn)單,配置什么的就不多說(shuō)了告私,自己去看微信支付的UML流程圖和微信SDK的配置流程屎暇,對(duì)于iOS端的代碼如下:
首先在工程里面配置白名單:


white list.png

AppDelegate里面初始化微信SDK:

    [WXApi registerApp:kWeChatID];

支付or分享代碼:

[ShareView shareViewWithCompleteHandel:^(NSInteger index) {
                WXMediaMessage * message = [WXMediaMessage message];
                message.title = [NSString stringWithFormat:@"%@[%@k-%@k]",rel[@"job_name"],rel[@"salary_min"],rel[@"salary_max"]];
                message.description = [NSString stringWithFormat:@"入職快,加薪快,還能賺外快\n%@",rel[@"com_name"]];
                [message setThumbImage:image];
                WXWebpageObject * webpageObject = [WXWebpageObject object];
                webpageObject.webpageUrl = urlString;
                message.mediaObject = webpageObject;
                SendMessageToWXReq * req = [[SendMessageToWXReq alloc] init];
                req.bText = NO;
                req.message  = message;
                req.scene =  index == 0 ? WXSceneSession :index == 1 ? WXSceneTimeline:WXSceneFavorite;
                [WXApi sendReq:req];
            }];

// 支付,note:這里的repsonse是后臺(tái)生成的支付參數(shù)驻粟,下訂單是請(qǐng)求自己的服務(wù)端拿到這些參數(shù):
if ([responese isKindOfClass:[NSDictionary class]]) {
                NSDictionary *payParams = (NSDictionary *)responese;
                PayReq * req            = [[PayReq alloc] init];
                req.partnerId           = payParams[@"partnerid"];
                req.prepayId            = payParams[@"prepayid"];
                req.nonceStr            = payParams[@"noncestr"];
                req.timeStamp           = [payParams[@"timestamp"] intValue];
                req.package             = payParams[@"package"];
                req.sign                = payParams[@"sign"];
                [WXApi sendReq:req];
            }

支付or分享結(jié)果的回調(diào):

// MARK: -  處理三方回調(diào)
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary*)options {
    //判斷是微信還是支付寶操作
    if ([url.absoluteString rangeOfString:kWeChatID].location != NSNotFound){
        return  [WXApi handleOpenURL:url delegate:self];
    } else {
        if ([url.host isEqualToString:@"safepay"]) {
            //支付寶支付回調(diào)自己App的結(jié)果
            [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
                NSLog(@"result = %@",resultDic);
            }];
        }
        return YES;
    }
}

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
    if ([url.absoluteString rangeOfString:kWeChatID].location != NSNotFound) {
        return [WXApi handleOpenURL:url delegate:self];
    } else if ([url.host isEqualToString:@"safepay"]) {
        [[AlipaySDK defaultService] processAuthResult:url standbyCallback:^(NSDictionary *resultDic) {
            NSLog(@"result = %@",resultDic);
        }];
    }
    return YES;
}

// MARK: - WXApiDelegate
- (void)onResp:(BaseResp *)resp {
    if ([resp isKindOfClass:[PayResp class]]){
        //支付
        PayResp *response = (PayResp*)resp;
        switch(response.errCode){
                case 0:
                //服務(wù)器端查詢支付通知或查詢API返回的結(jié)果再提示成功
                [[NSNotificationCenter defaultCenter] postNotificationName:kWeChatPaySucessNotificationName object:self userInfo:@{@"PayResp":resp}];
                [_window.rootViewController alertWithTitle:@"支付成功!" complete:nil];
                break;
                case -1:
                case -2: {
                    [_window.rootViewController alertWithTitle:@"支付失敗!" complete:nil];
                }
                break;
            default:
                NSLog(@"支付失敗根悼,retcode=%d",resp.errCode);
                break;
        }
    } else if ([resp isKindOfClass:[SendMessageToWXResp class]]) {
        //分享
        SendMessageToWXResp *sendMessageRes = (SendMessageToWXResp *)resp;
        if (sendMessageRes.errCode == 0 ) {
            [_window.rootViewController alertWithTitle:@"分享成功!" complete:nil];
        } else if (sendMessageRes.errCode == WXErrCodeUserCancel) {
            [_window.rootViewController alertWithTitle:@"您取消了分享!" complete:nil];
        } else {
            [_window.rootViewController alertWithTitle:@"分享失敗!" complete:nil];
        }
    }
}

- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation {
    if ([url.host isEqualToString:@"safepay"]) {
        //跳轉(zhuǎn)支付寶錢包進(jìn)行支付,處理支付結(jié)果
        [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
            NSLog(@"result = %@",resultDic);
        }];
    }
    return YES;
}

集成起來(lái)比較簡(jiǎn)單蜀撑,由于這里的支付請(qǐng)求加密參數(shù)是放在后臺(tái)進(jìn)行的(也理論上是后臺(tái)做比較安全挤巡,為了防止反編譯,一般是后臺(tái)做)App端做的事情相對(duì)來(lái)來(lái)說(shuō)還是比較少的酷麦。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末矿卑,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子沃饶,更是在濱河造成了極大的恐慌粪摘,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绍坝,死亡現(xiàn)場(chǎng)離奇詭異徘意,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)轩褐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門椎咧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事勤讽◇” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵脚牍,是天一觀的道長(zhǎng)向臀。 經(jīng)常有香客問(wèn)我,道長(zhǎng)诸狭,這世上最難降的妖魔是什么券膀? 我笑而不...
    開(kāi)封第一講書人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮驯遇,結(jié)果婚禮上芹彬,老公的妹妹穿的比我還像新娘。我一直安慰自己叉庐,他們只是感情好舒帮,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著陡叠,像睡著了一般玩郊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上枉阵,一...
    開(kāi)封第一講書人閱讀 49,760評(píng)論 1 289
  • 那天译红,我揣著相機(jī)與錄音,去河邊找鬼岭妖。 笑死,一個(gè)胖子當(dāng)著我的面吹牛反璃,可吹牛的內(nèi)容都是我干的昵慌。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼淮蜈,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼斋攀!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起梧田,我...
    開(kāi)封第一講書人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤淳蔼,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后裁眯,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體鹉梨,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年穿稳,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了存皂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖旦袋,靈堂內(nèi)的尸體忽然破棺而出骤菠,到底是詐尸還是另有隱情,我是刑警寧澤疤孕,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布商乎,位于F島的核電站,受9級(jí)特大地震影響祭阀,放射性物質(zhì)發(fā)生泄漏鹉戚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一柬讨、第九天 我趴在偏房一處隱蔽的房頂上張望崩瓤。 院中可真熱鬧,春花似錦踩官、人聲如沸却桶。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)颖系。三九已至,卻和暖如春辩越,著一層夾襖步出監(jiān)牢的瞬間嘁扼,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工黔攒, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留趁啸,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓督惰,卻偏偏與公主長(zhǎng)得像不傅,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子赏胚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

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