1.iOS微信支付解析
2.向微信注册appid
在AppDelegate.m中 即
- (BOOL)application:(UIApplication )application didFinishLaunchingWithOptions:(NSDictionary )launchOptions {
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
//5AUC为百度地图的appkey
//启动BaiduMapManager
self.mapManager = [[BMKMapManager alloc] init];
BOOL ret = [self.mapManager start:@"地图appkey" generalDelegate:self];
if (!ret) {
NSLog(@"百度地图开启");
}
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
GifViewViewController *rootC = [[GifViewViewController alloc] init];
UINavigationController *naVC = [[UINavigationController alloc] initWithRootViewController:rootC];
self.window.rootViewController = naVC;
//向微信注册(微信支付使用)
[WXApi registerApp:@"微信appid" withDescription:nil];
}
3. 在下面函数
-(BOOL)application:(UIApplication )application openURL:(NSURL )url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
BOOL result = [UMSocialSnsService handleOpenURL:url];
if (result == FALSE) {
//友盟调用其他SDK,例如支付宝SDK、微信支付等(没用友盟写在result外面就可以了)
//微信支付函数
[WXApi handleOpenURL:url delegate:self];
}
return result;
}
4.在下面函数(微信代理函数) 获取支付结果
//微信跳转支付后获取的支付信息
-(void)onResp:(BaseResp *)resp{
NSString *strTitle;
if ([resp isKindOfClass:[SendMessageToWXResp class]]) {
strTitle = [NSString stringWithFormat:@"发送媒体消息结果"];
}
if ([resp isKindOfClass:[PayResp class]]) {
strTitle = [NSString stringWithFormat:@"支付结果"];
switch (resp.errCode) {
case WXSuccess:
{
[[NSNotificationCenter defaultCenter] postNotificationName:kOrderCompleteNotification object:nil];
[SVProgressHUD showErrorWithStatus:@"您已支付成功"];
NSLog(@"支付结果: 成功!");
}
break;
case WXErrCodeCommon:
{ //签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等
[SVProgressHUD showErrorWithStatus:@"支付结果: 失败!"];
NSLog(@"支付结果: 失败!");
}
break;
case WXErrCodeUserCancel:
{ //用户点击取消并返回
NSLog(@"点击取消");
[SVProgressHUD showErrorWithStatus:@"取消支付成功"];
}
break;
case WXErrCodeSentFail:
{ //发送失败
NSLog(@"发送失败");
[SVProgressHUD showErrorWithStatus:@"发送失败"];
}
break;
case WXErrCodeUnsupport:
{ //微信不支持
NSLog(@"微信不支持");
[SVProgressHUD showErrorWithStatus:@"微信不支持"];
}
break;
case WXErrCodeAuthDeny:
{ //授权失败
NSLog(@"授权失败");
[SVProgressHUD showErrorWithStatus:@"授权失败"];
}
break;
default:
break;
}
//------------------------
}
}
5.应用微信支付界面要从服务器获取 信息例如签名、微信分配商户号、时间戳等
-(void)toWeiXin:(NSMutableDictionary *)dictionary
{
//以下参数可能是在后台获取
//微信订单完成通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(wxOrderComplete:)name:kOrderCompleteNotification object:nil];
//调起微信支付
PayReq* req = [[PayReq alloc] init];
req.partnerId = [dictionary objectForKey:@"partnerid"]; //微信支付分配商户号
req.prepayId = [dictionary objectForKey:@"prepayid"]; //微信返回的支付交易会话ID
req.nonceStr = [dictionary objectForKey:@"noncestr"]; //随机字符串
req.timeStamp = [[dictionary objectForKey:@"timestamp"] intValue]; //时间戳
req.package = [dictionary objectForKey:@"package"]; //暂填写固定值Sign=WXPay
req.sign = [dictionary objectForKey:@"sign"]; //签名
NSLog(@"dictionary %@",dictionary);
[WXApi sendReq:req];
}
6.注意要点
因为微信的官方群文档不是很让人理解 所以服务器做这些参数数据有点坑,所以重点还是在后台 前段不是太多麻烦事
也可以自己生成订单号之类的,不过需要我们自己做些事情,这里我们就不多说了,可下载一些demo参考