微信是一个在开发中经常会使用到的平台,比如微信登录、授权、支付、分享。今天我们来看看如何在自己的应用里面集成微信授权。
微信oauth2.0授权登录让微信用户使用微信身份安全登录第三方应用或网站,在微信用户授权登录已接入微信oauth2.0的第三方应用后,第三方可以获取到用户的接口调用凭证(access_token),通过access_token可以进行微信开放平台授权关系接口调用,从而可实现获取微信用户基本开放信息和帮助用户实现基础开放功能等。
第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数;
通过code参数加上appid和appsecret等,通过api换取access_token;
通过access_token进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。
3、准备工作
具体的直接看微信开发者文档就可以了,地址如下:ios接入指南
除了微信开发者文档中提到的几点,还有几个地方需要注意
3.1、更改plist文件如下
app transport security setting设置
ios9中新增app transport security(简称ats)特性, 主要使到原来请求的时候用到的http,都转向tls1.2协议进行传输。这也意味着所有的http协议都强制使用了https协议进行传输。需要在info.plist新增一段用于控制ats的配置:
|
1
2
3
4
5
|
<key>nsapptransportsecurity</key>
<dict>
<key>nsallowsarbitraryloads</key>
<true/>
</dict>
|
这样就可以允许http传输了
我们假设在界面上有一个按钮,用户点击该按钮,就会发起微信授权操作。
那么代码如下:
|
1
2
3
4
5
6
7
8
9
|
-(ibaction)sendauthrequest
{
//构造sendauthreq结构体
sendauthreq* req =[[[sendauthreq alloc ] init ] autorelease ];
req.scope = @"snsapi_userinfo" ;
req.state = wxpacket_state ;//用于在onresp中判断是哪个应用向微信发起的授权,这里填写的会在onresp里面被微信返回
//第三方向微信终端发送一个sendauthreq消息结构
[wxapi sendreq:req];
}
|
4.1、参数说明
4.3、返回结果说明
5、微信授权第二步:通过code获取access_token,openid,unionid
获取第一步的code后,请求以下链接获取access_token,openid,unionid:
https://api.weixin.qq.com/sns/oauth2/access_token?
appid=appid&secret=secret&code=code&grant_type=authorization_code
通过上一步拉起微信授权页面,用户点击确认登录,成功之后,就会调用微信代理中的回调函数onresp函数,我们可以在该函数里面获取access_token,openid,unionid
在appdelegate.m文件中实现代码如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
//微信代理方法
- (void)onresp:(baseresp *)resp
{
sendauthresp *aresp = (sendauthresp *)resp;
if(aresp.errcode== 0 && [aresp.state isequaltostring:wxpacket_state])
{
nsstring *code = aresp.code;
[self getweixinopenid:code];
}
}
//通过code获取access_token,openid,unionid
- (void)getweixinopenid:(nsstring *)code{
nsstring *url =[nsstring stringwithformat:@"https://api.weixin.qq.com/sns/oauth2/access_token?appid=%@&secret=%@&code=%@&grant_type=authorization_code",appid,appserect,code];
dispatch_async(dispatch_get_global_queue(dispatch_queue_priority_default, 0), ^{
nsurl *zoneurl = [nsurl urlwithstring:url];
nsstring *zonestr = [nsstring stringwithcontentsofurl:zoneurl encoding:nsutf8stringencoding error:nil];
nsdata *data = [zonestr datausingencoding:nsutf8stringencoding];
dispatch_async(dispatch_get_main_queue(), ^{
if (data){
nsdictionary *dic = [nsjsonserialization jsonobjectwithdata:data options:nsjsonreadingmutablecontainers error:nil];
nsstring *openid = dic[@"openid"];
nsstring *unionid = dic[@"unionid"];
}
});
});
}
|
5.1返回说明:
5.2、刷新access_token有效期
5.2.1、返回说明
6、微信授权第三步:通过access_token获取个人信息
6.1、接口说明
此接口用于获取用户个人信息。开发者可通过openid来获取用户基本信息。特别需要注意的是,如果开发者拥有多个移动应用、网站应用和公众帐号,可通过获取用户基本信息中的unionid来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号,用户的unionid是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。请注意,在用户修改微信头像后,旧的微信头像url将会失效,因此开发者应该自己在获取用户信息后,将头像图片保存下来,避免微信头像url失效后的异常情况。
请求接口
http请求方式: get
请求地址:https://api.weixin.qq.com/sns/userinfo?access_token=access_token&openid=openid
参数和返回数据说明
以上所述是小编给大家介绍的ios实现微信授权登录功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对快网idc网站的支持!
相关文章
- 个人网站服务器域名解析设置指南:从购买到绑定全流程 2025-06-10
- 个人网站搭建:如何挑选具有弹性扩展能力的服务器? 2025-06-10
- 个人服务器网站搭建:如何选择适合自己的建站程序或框架? 2025-06-10
- 64M VPS建站:能否支持高流量网站运行? 2025-06-10
- 64M VPS建站:怎样选择合适的域名和SSL证书? 2025-06-10
- 2025-07-10 怎样使用阿里云的安全工具进行服务器漏洞扫描和修复?
- 2025-07-10 怎样使用命令行工具优化Linux云服务器的Ping性能?
- 2025-07-10 怎样使用Xshell连接华为云服务器,实现高效远程管理?
- 2025-07-10 怎样利用云服务器D盘搭建稳定、高效的网站托管环境?
- 2025-07-10 怎样使用阿里云的安全组功能来增强服务器防火墙的安全性?
快网idc优惠网
QQ交流群
-
2025-05-25 76
-
2025-05-29 68
-
.Net Core中间件之静态文件(StaticFiles)示例详解
2025-05-29 91 -
2025-06-04 43
-
函数中使用require_once问题深入探讨 优雅的配置文件定义方法推荐
2025-05-29 68









