login.需要登录的viewController
#pragma 微信登录
- (void)login {
if ([WXApi isWXAppInstalled]) {
SendAuthReq *req = [[SendAuthReq alloc] init];
req.scope = @"snsapi_userinfo";
req.state = @"123";
AppDelegate *dele = appDele;
dele.wxDelegate = self;
[WXApi sendReq:req];
} else {
// 未安装 隐藏按钮
}
}
#pragma mark - 微信登录回调
-(void)loginSuccessByCode:(NSString *)code{
NSLog(@"code %@",code);
__weak typeof(*&self) weakSelf = self;
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.requestSerializer = [AFJSONRequestSerializer serializer];//请求
manager.responseSerializer = [AFHTTPResponseSerializer serializer];//响应
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/html",@"application/json", @"text/json",@"text/plain", nil, nil];
//通过 appid secret 认证code . 来发送获取 access_token的请求
[manager GET:[NSString stringWithFormat:@"https://api.weixin.qq.com/sns/oauth2/access_token?appid=%@&secret=%@&code=%@&grant_type=authorization_code",Wechat_AppID,Wechat_AppSecret,code] parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];
NSLog(@"dic %@",dic);
/*
access_token 接口调用凭证
expires_in access_token接口调用凭证超时时间,单位(秒)
refresh_token 用户刷新access_token
openid 授权用户唯一标识
scope 用户授权的作用域,使用逗号(,)分隔
unionid 当且仅当该移动应用已获得该用户的userinfo授权时,才会出现该字段
*/
NSString* accessToken=[dic valueForKey:@"access_token"];
NSString* openID=[dic valueForKey:@"openid"];
[weakSelf.pfWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://sjgtest.youthbiger.com//mobile/index.php?act=app_login&app=1&app_userid=%@", openID]]]];
// http://192.168.168.250/sjg.test.com/wap/tmpl/member/login.html
[weakSelf requestUserInfoByToken:accessToken andOpenid:openID];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"error %@",error.localizedFailureReason);
}];
}
-(void)requestUserInfoByToken:(NSString *)token andOpenid:(NSString *)openID{
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.requestSerializer = [AFJSONRequestSerializer serializer];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
[manager GET:[NSString stringWithFormat:@"https://api.weixin.qq.com/sns/userinfo?access_token=%@&openid=%@",token,openID] parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSDictionary *dic = (NSDictionary *)[NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];
NSLog(@"dic ==== %@",dic);
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"个人信息" message:[NSString stringWithFormat:@"%@", dic] delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil, nil];
// [alert show];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"error %ld",(long)error.code);
}];
}
pay.需要支付的viewController
#pragma 微信支付
-(void)pay {
if ([WXApi isWXAppInstalled]) {
//调起微信支付
PayReq* req = [[PayReq alloc] init];
req.openID = Wechat_AppID;
req.partnerId = partnerId;
req.prepayId = prepayId;
req.nonceStr = nonceStr;
req.timeStamp = [timeStamp intValue];
req.package = @"Sign=WXPay";
req.sign = sign;
[WXApi sendReq:req];
} else {
// 未安装
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"未安装" message:nil delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil, nil];
[alert show];
}
}
#endif
// 支付成功处理
- (void)wxPayResult:(NSNotification *)noti {
if ([noti.object isEqualToString:@"success"]) {
[_pfWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"支付成功回调地址"]]];
}
}
APPDelegate.h文件 写一个微信登录的代理方法
@protocol WxDelegate <NSObject>
@required
- (void)loginSuccessByCode:(NSString *)code;
@end
@property (weak, nonatomic) id wxDelegate;
AppDelegate.m
#pragma mark - 微信回调
- (void)onResp:(BaseResp *)resp {
NSLog(@"%d, %d, %@", resp.errCode, resp.type, resp.errStr);
// 登录
if ([resp isKindOfClass:[SendAuthResp class]]) {
if (resp.errCode == 0) {// 成功
if ([_wxDelegate respondsToSelector:@selector(loginSuccessByCode:)]) {
SendAuthResp *resp2 = (SendAuthResp *)resp;
[_wxDelegate loginSuccessByCode:resp2.code];
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"登录成功" message:resp2.code delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil, nil];
[alert show];
}
} else {
// 失败
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"登录失败" message:nil delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil, nil];
[alert show];
}
} else if ([resp isKindOfClass:[PayResp class]]) {
// 支付
if (resp.errCode == 0) {
[[NSNotificationCenter defaultCenter] postNotificationName:WXPayResultKey object:@"success"];
// 支付成功
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"支付成功" message:nil delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil, nil];
[alert show];
} else {
// 支付失败
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"支付失败" message:nil delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil, nil];
[alert show];
}
}
}
This's All.
注:需要的库自行下载(´・_・`)