1桶雀,參考微信支付APP開(kāi)發(fā)者文檔:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5
(1)下載微信支付sdk,拖入工程唬复,添加framework
(2)項(xiàng)目設(shè)置APPID
商戶在微信開(kāi)放平臺(tái)申請(qǐng)開(kāi)發(fā)APP應(yīng)用后矗积,微信開(kāi)放平臺(tái)會(huì)生成APP的唯一標(biāo)識(shí)APPID。在Xcode中打開(kāi)項(xiàng)目敞咧,設(shè)置項(xiàng)目屬性中的URL Schemes為您的APPID棘捣。如圖8.7標(biāo)紅位置所示。
(3)注冊(cè)APPID
商戶APP工程中引入微信lib庫(kù)和頭文件休建,調(diào)用API前柱锹,需要先向微信注冊(cè)您的APPID,代碼如下:
[WXApi registerApp:@"wxd930ea5d5a258f4f" withDescription:@"demo 2.0"];
(4)商戶服務(wù)器生成支付訂單丰包,先調(diào)用【統(tǒng)一下單API】生成預(yù)付單禁熏,獲取到prepay_id后將參數(shù)再次簽名傳輸給APP發(fā)起支付。以下是調(diào)起微信支付的關(guān)鍵代碼:
PayReq *request = [[[PayReq alloc] init] autorelease];
request.partnerId = @"10000100";
request.prepayId= @"1101000000140415649af9fc314aa427";
request.package = @"Sign=WXPay";
request.nonceStr= @"a462b76e7436e98e0ed6e13c64b4fd1c";
request.timeStamp= @"1397527777";
request.sign= @"582282D72DD2B03AD892830965F428CB16E7A256";
[WXApi sendReq:request];
(5)支付結(jié)果回調(diào)邑彪,在AppDelegate.m
-(void) onResp:(BaseResp*)resp
{
//這里判斷回調(diào)信息是否為 支付
if([resp isKindOfClass:[PayResp class]]){
switch (resp.errCode) {
case WXSuccess:
//如果支付成功的話瞧毙,全局發(fā)送一個(gè)通知,支付成功
[[NSNotificationCenter defaultCenter] postNotificationName:@"weixin_pay_result" object:[NSString stringWithFormat:@"%d" , resp.errCode]];
NSLog(@"支付成功-PaySuccess寄症,retcode = %d", resp.errCode);
break;
default:
//如果支付失敗的話宙彪,全局發(fā)送一個(gè)通知,支付失敗
[[NSNotificationCenter defaultCenter] postNotificationName:@"weixin_pay_result" object:[NSString stringWithFormat:@"%d" , resp.errCode]];
NSLog(@"錯(cuò)誤有巧,retcode = %d, retstr = %@", resp.errCode,resp.errStr);
break;
}
}
}
(6)發(fā)現(xiàn)支付成功但是未收到微信返回的支付結(jié)果數(shù)據(jù)释漆,檢查添加如下方法:
-(BOOL)application:(UIApplication*)app openURL:(NSURL*)url options:(NSDictionary*)options
{
return? [WXApi handleOpenURL:url delegate:self];
}
成功!@河D型肌示姿!
可根據(jù)支付結(jié)果進(jìn)行判斷,做頁(yè)面跳轉(zhuǎn)逊笆,相應(yīng)支付結(jié)果頁(yè)面栈戳。在AppDelegate.m無(wú)法進(jìn)行控制器跳轉(zhuǎn),方法:
在調(diào)起微信支付的控制器觸發(fā)方法里添加監(jiān)聽(tīng):
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(weChatPayResultNoti:) name:@"weixin_pay_result" object:nil];
以及監(jiān)聽(tīng)事件
//監(jiān)聽(tīng)事件
-(void)weChatPayResultNoti:(NSNotification *)noti{
NSLog(@"%@",noti);
if ([[noti object] isEqualToString:@"0"]) {
NSLog(@"微信支付成功啦啦啦阿拉");
//再此進(jìn)行頁(yè)面跳轉(zhuǎn)难裆;
}else{
NSLog(@"微信支付失敗啦啦啦阿拉");
}
//上邊添加了監(jiān)聽(tīng)子檀,這里記得移除
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"wxpayresult" object:nil];
}
在方法-(void) onResp:(BaseResp*)resp中發(fā)送全局通知。