专业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")
      
  • 再次运行程序 CZOauthViewControllerloadAccessToken 方法可以打印服务器返回的 AccessToken 信息,至此可以获取服务器返回的 AccessToken

results matching ""

    No results matching ""