因为项目需求,支付方式添加了微信支付。之前做过银联的支付,所以,感觉不会太难。
使用的SDK为1.7.是13年12月份的,还是手动管理内存。
实际支付的代码不难,就是几个配置,因为项目之前做过微信分享,所以配置这步就省略了。
具体支付代码:
//调起微信支付
PayReq* req = [[[PayReq alloc] init]autorelease];
req.openID = APPI_ID;
req.partnerId = PARTNER_ID;
req.prepayId = prePayid;
req.nonceStr = nonce_str;
req.timeStamp = now;
req.package = package;
req.sign = sign;
[WXApi safeSendReq:req];
不得不吐槽,微信支付的SDK,这里连个代理都没有,所以,你想获取支付后的结果的返回信息,需要去AppDelegate里,添加如下代码,添加微信的代理:
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
return [WXApi handleOpenURL:url delegate:self];
}
然后,再实现这个方法:
-(void) onResp:(BaseResp*)resp
通过这个方法,你就可以获取微信支付后的信息了。但是如果这样,所有的支付代码都在AppDelegate里,不好,至少微信给的例子就是这样。我的方法是添加通知,代码如下:
-(void) onResp:(BaseResp*)resp
{
if ([resp isKindOfClass:[PayResp class]])
{
PayResp *response = (PayResp *)resp;
// NSString *strTitle = [NSString stringWithFormat:@"支付结果"];
// NSString *strMsg = [NSString stringWithFormat:@"errcode:%d", response.errCode];
//
// UIAlertView *alert = [[UIAlertView alloc] initWithTitle:strTitle
// message:strMsg
// delegate:self
// cancelButtonTitle:@"OK"
// otherButtonTitles:nil, nil];
// [alert show];
switch (response.errCode) {
case WXSuccess: {
NSNotification *notification = [NSNotification notificationWithName:ORDER_PAY_NOTIFICATION object:@"success"];
[[NSNotificationCenter defaultCenter] postNotification:notification];
break;
}
default: {
NSNotification *notification = [NSNotification notificationWithName:ORDER_PAY_NOTIFICATION object:@"fail"];
[[NSNotificationCenter defaultCenter] postNotification:notification];
break;
}
}
}
}
然后,在支付那个VC,添加通知
#pragma mark - tabBar隐藏
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
if([WXApi isWXAppInstalled]) // 判断 用户是否安装微信
{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getOrderPayResult:) name:ORDER_PAY_NOTIFICATION object:nil];//监听一个通知
}
}
#pragma mark - tabbar还原
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[[NSNotificationCenter defaultCenter]removeObserver:self];//移除通知
}
相关参数的获取,从我们自己的服务器获取