专业java、php、iOS、C++、网页设计、平面设计、网络营销、游戏开发、前端与移动开发培训机构
获取AccessToken
- 接口文档地址
http://open.weibo.com/wiki/OAuth2/access_token
- 接口地址
https://api.weibo.com/oauth2/access_token
- HTTP 请求方式
POST
- 请求参数
参数 | 描述 |
---|---|
client_id | 申请应用时分配的AppKey |
client_secret | 申请应用时分配的AppSecret |
grant_type | 请求的类型,填写 authorization_code |
code | 调用authorize获得的code值 |
redirect_uri | 回调地址,需需与注册应用里的回调地址一致 |
- 返回数据
返回值字段 | 字段说明 |
---|---|
access_token | 用于调用access_token,接口获取授权后的access token |
expires_in | access_token的生命周期,单位是秒数 |
remind_in | access_token的生命周期(该参数即将废弃,开发者请使用expires_in) |
uid | 当前授权用户的UID |
获取AccessToken后再次加载授权登录界面不需要再输入账号密码,会直接去加载
http://gz.itcast.cn/?code=770d7e59d28a651bbb307fa8c3ba7f40
这个url,加载成功后,我们在这里会直接去获取AccessToken如果需要取消授权看下图
代码实现加载 AccessToken
CZOauthViewController
添加loadAccessToken
方法// MARK: 加载Access Token func loadAccessToken(code: String) { // api地址 let urlString = "https://api.weibo.com/oauth2/access_token" // post 参数 let parameters = [ "client_id": client_id, "client_secret": client_secret, "grant_type": "authorization_code", "code": code, "redirect_uri": redirect_uri ] HMNetworkTool.shared.request(method: HMNetworkMethod.POST, URLString: urlString, parameters: parameters, progress: nil, success: { (_, result) in print("result = \(result)") }) { (_, error) in print("error: \(error)") } }
在获取
code
的时候调用loadAccessToken
方法// 判断后面是否跟有参数 if let query = request.url!.query { let nsQuery = query as NSString let codeString = "code=" // 判断query里面是否包含code=字符串 if nsQuery.hasPrefix(codeString) { let code = nsQuery.substring(from: codeString.characters.count) print("拦截到code = \(code)") loadAccessToken(code: code) } else { //点击取消 close() } }
发现服务器会报错,不支持
text/pain
类型,因为AFN
没有支持,需要手动添加- 在
HMNetworkTool
中增加AFN
响应的序列化器支持text/plain
// 设置响应的序列化器,支持text/plain afnManager.responseSerializer.acceptableContentTypes?.insert("text/plain")
- 在
- 再次运行程序
CZOauthViewController
的loadAccessToken
方法可以打印服务器返回的AccessToken
信息,至此可以获取服务器返回的AccessToken
了