小程序
小游戏
企业微信
微信支付
扫描小程序码分享
https://developers.weixin.qq.com/doc/oplatform/Mobile_App/WeChat_Login/Development_Guide.html
微信登录:
通过 code 获取 access_token 时报错, 错误信息如下:
errcode=40163, errmsg=code been used, hints: [ req_id: XXXXXX ]
2 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
上代码,脑补太难了
static func getWeixinTokenRequest(_ code: String,
successHandler: @escaping (_ model: WeixinInfoModel?) -> Void,
failureHandler: @escaping () -> Void) {
let appid = ThirdPartyKey.WXApiID
let secret = ThirdPartyKey.WXApiSecret
let url = "\(UserUrl.wx_access_token)?appid=\(appid)&secret=\(secret)&code=\(code)&grant_type=authorization_code"
let request = Alamofire.Session.default.request(url, method: .get, parameters: nil, encoding: JSONEncoding.default)
request.responseJSON { (response) in
switch(response.result) {
case .success:
guard let dic = response.value as? [String: Any],
dic["errcode"] == nil else { // 没有报错
BaseSVProgressHUD.setContainerView(nil)
BaseSVProgressHUD.showText("该应用未获得微信登录的权限")
return
}
guard let openid = dic["openid"] as? String,
let accessToken = dic["access_token"] as? String,
let _ = dic["refresh_token"] as? String else {
print("获取微信 access_token: \(dic), code: \(code)")
//获取用户信息
getWeixinUserInfoRequest(accessToken,
openid: openid,
successHandler: { model in
successHandler(model)
}, failureHandler: {
failureHandler()
})
case .failure(let error):
SVProgressHUD.showError(withStatus: "请求超时")
print(error)
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
上代码,脑补太难了
static func getWeixinTokenRequest(_ code: String,
successHandler: @escaping (_ model: WeixinInfoModel?) -> Void,
failureHandler: @escaping () -> Void) {
let appid = ThirdPartyKey.WXApiID
let secret = ThirdPartyKey.WXApiSecret
let url = "\(UserUrl.wx_access_token)?appid=\(appid)&secret=\(secret)&code=\(code)&grant_type=authorization_code"
let request = Alamofire.Session.default.request(url, method: .get, parameters: nil, encoding: JSONEncoding.default)
request.responseJSON { (response) in
switch(response.result) {
case .success:
guard let dic = response.value as? [String: Any],
dic["errcode"] == nil else { // 没有报错
BaseSVProgressHUD.setContainerView(nil)
BaseSVProgressHUD.showText("该应用未获得微信登录的权限")
return
}
guard let openid = dic["openid"] as? String,
let accessToken = dic["access_token"] as? String,
let _ = dic["refresh_token"] as? String else {
return
}
print("获取微信 access_token: \(dic), code: \(code)")
//获取用户信息
getWeixinUserInfoRequest(accessToken,
openid: openid,
successHandler: { model in
successHandler(model)
}, failureHandler: {
failureHandler()
})
case .failure(let error):
SVProgressHUD.showError(withStatus: "请求超时")
failureHandler()
print(error)
}
}
}
(lldb) po response.value
▿ Optional<Any>
▿ some : 2 elements
▿ 0 : 2 elements
- key : errcode
- value : 40163
▿ 1 : 2 elements
- key : errmsg
- value : code been used, hints: [ req_id: mENC_EMre-dR5faA ]
2. 这个不是每次调起微信就会返回一个不一样的吗, 为什么还要2小时刷新一次?