抽個(gè)時(shí)間總結(jié)一下微信支付;
需要和微信申請(qǐng)APPID然后審核 (300塊大洋)
首先從官網(wǎng)上下載一個(gè)demo[網(wǎng)址](https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=1417694084&token=1b41037aa554145bdb95b7430eb139850a46b1d7&lang=zh_CN);
如果你用模擬器運(yùn)行這個(gè)demo是看不到什么效果的,要用真機(jī)調(diào)試;
-
根據(jù)demo中的示例,將支付代碼提取出來(lái);

在AppDelegate中注冊(cè)
在-(BOOL)application:didFinishLaunchingWithOptions:launchOptions中注冊(cè):
[WXApi registerApp:@"wxb4ba3c02aa476ea1" withDescription:nil];
配置應(yīng)用間跳轉(zhuǎn)的URL:

點(diǎn)擊支付
NSString *res = [WXplay jumpToBizPay];
if( ![@"" isEqual:res] ){
UIAlertView *alter = [[UIAlertView alloc] initWithTitle:@"支付失敗" message:res delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alter show];
[alter release];
}

WXplay.m
+ (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自帶解析類(lèi)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]autorelease];
req.partnerId = [dict objectForKey:@"partnerid"]; // 商戶(hù)號(hào)
req.prepayId = [dict objectForKey:@"prepayid"];// 預(yù)支付交易會(huì)話(huà)ID
req.nonceStr = [dict objectForKey:@"noncestr"];//隨機(jī)字符串
req.timeStamp = stamp.intValue; //時(shí)間戳
req.package = [dict objectForKey:@"package"];//Sign=WXPay
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ò)誤";
}
}

WXApiManager 需要遵守 WXApiDelegate

實(shí)現(xiàn)單例:
+(instancetype)sharedManager {
static dispatch_once_t onceToken;
static WXApiManager *instance;
dispatch_once(&onceToken, ^{
instance = [[WXApiManager alloc] init];
});
return instance;
}
WXApiDelegate代理方法的實(shí)現(xiàn)
- 實(shí)現(xiàn)onResp方法、完成支付后,微信app會(huì)返回到商家app頁(yè)面,并且回調(diào)onResp函數(shù),開(kāi)發(fā)者需要在該方法中接收通知,判斷返回碼,如果支付成功則去后臺(tái)查詢(xún)支付結(jié)果再展示給用戶(hù)實(shí)際支付結(jié)果
-(void)onResp:(BaseResp *)resp {
if([resp isKindOfClass:[PayResp class]]){
//支付返回結(jié)果,實(shí)際支付結(jié)果需要去微信服務(wù)器端查詢(xún)
NSString *strMsg,*strTitle = [NSString stringWithFormat:@"支付結(jié)果"];
switch (resp.errCode) {
case WXSuccess:
// 在此顯示支付結(jié)果數(shù)據(jù)(從服務(wù)器獲?。? 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;
}
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:strTitle message:strMsg delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
[alert show];
[alert release];
}
}





