開發(fā)準(zhǔn)備
1.首先新建項(xiàng)目,然后去官網(wǎng)下載最新的開發(fā)包:
https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=11_1
找到對(duì)應(yīng)的SDK包下載
2.得到SDKExport
文件夾拖入項(xiàng)目工程
環(huán)境的的配置
添加一些文件
微信SDK中所添加的文件也是更新的要關(guān)注更新的文檔.
微信支付的流程
流程為: 1.客戶端告知公司后臺(tái)支付->2.公司后臺(tái)生成訂單給微信服務(wù)器->3,微信服務(wù)器生成一個(gè)字符串返回后臺(tái)->4.后臺(tái)簽名后把必要的字段給客戶端->5.客戶端把數(shù)據(jù)放到SDK的支付類中調(diào)用方法->6.微信SDK請(qǐng)求微信后臺(tái)->7,8 支付成功后給客戶端發(fā)消息,給后臺(tái)發(fā)消息.
正式開發(fā)
//============================================================
// 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 ;
這段代碼截取微信支付Demo ,模擬了一個(gè)從"http://wxpay.weixin.qq.com/pub_v2/app/app_pay.php?plat=ios
地址網(wǎng)絡(luò)請(qǐng)求后得到的數(shù)據(jù),我們?nèi)绻麑懘a把以下代碼粘貼過去就好.
//調(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];
//日志輸出
[WXApi sendReq:req]
調(diào)起微信支付,上面req.XX 都是把從服務(wù)器獲得的字段值賦值過去就好,詳細(xì)的說明點(diǎn)進(jìn)PayReq
就有.
然后記得在AppDelegate
添加:
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation {
// 微信回調(diào)
[WXApi handleOpenURL:url delegate:self];
return YES
}
- (void)onResp:(BaseResp *)resp {
NSLog(@"這個(gè)沒調(diào)用?");
if ([resp isKindOfClass:[PayResp class]]) {
PayResp *response = (PayResp *)resp;
switch (response.errCode) {
case WXSuccess:
//服務(wù)器端查詢支付通知或查詢API返回的結(jié)果再提示成功
NSLog(@"微信 支付成功");
[[NSNotificationCenter defaultCenter]postNotificationName:@"ok" object:nil];
break;
default:
//NSString *strMsg =[NSString stringWithFormat:@"支付結(jié)果:失數障肌怨咪!retcode = %d, retstr = %@", resources.errCode,response.errStr];
NSLog(@"錯(cuò)誤胳岂,retcode = %d, retstr = %@", resp.errCode,resp.errStr);
break;
}
}
}
這里要注意:以下response.errCode
在微信集成中很多公司遇到的問題都是這個(gè)code
一直不對(duì),都是跳到微信立刻跳回來并且報(bào)錯(cuò)誤碼記得是2
這個(gè)問題最大的可能就是后臺(tái)簽名的時(shí)候大小寫問題,我記得是我們后臺(tái)在把簽名的字段設(shè)置為全小寫時(shí)就成功,切記出現(xiàn)問題后讓后臺(tái)這么試試.
最后注意:
添加好.
如果用swift版和OC版無太大區(qū)別,只是要注意一下因?yàn)樵趕wift版的開發(fā)環(huán)境下SDK中文件會(huì)缺少頭文件,要手動(dòng)導(dǎo)入一下,其他只是把OC代碼寫成swift代碼并無區(qū)別.
如有問題請(qǐng)留言...