IOS 微信获取accesstoken 40029

本文介绍了解决微信授权过程中遇到的40029错误——非法code的问题。通过在请求URL中添加参数&connect_redirect=1来避免重定向导致的code参数丢失,确保能够成功获取accesstoken。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

微信授权根据code获取accesstoken时报40029 不合法的code 在浏览器中是可以获取到token的  因为在客户端

@"https://api.weixin.qq.com/sns/oauth2/access_token?appid=%@&secret=%@&code=%@&grant_type=authorization_code"请求时重定向了,第二次的时候code参数差了导致  添加&connect_redirect=1 后正常获取access token

@"https://api.weixin.qq.com/sns/oauth2/access_token?appid=%@&secret=%@&code=%@&grant_type=authorization_code&connect_redirect=1"

### 实现微信和QQ第三方授权登录集成 #### 微信授权登录集成 为了实现微信授权登录,需要遵循OAuth2.0协议标准构建的微信OAuth2.0授权登录系统。在此之前,在微信开放平台注册开发者账号并拥有一个已审核通过的应用程序是必要的前提条件,并确保获得了对应的AppID和AppSecret[^2]。 一旦准备就绪,可以开始接入流程: 1. **下载iOS微信SDK** 如果尚未集成微信支付,则需前往微信开放平台下载最新的iOS SDK,并将其集成到项目中。如果之前集成了微信支付SDK,那么微信登录功能已经被包含在内,且使用的AppID和AppSecret相同。 2. **配置回调URL** 需要在微信公众平台上设置好合法域名以及回调地址,以便于用户完成身份验证后能够返回应用程序继续后续操作。 3. **发起请求获取Code** 使用`WXApi.sendAuthReq:`方法发送认证请求给微信服务器,等待用户的确认动作。当用户同意授权之后,会重定向回设定好的回调链接携带code参数作为响应的一部分。 4. **交换Access Token** 利用上一步得到的临时票据(即code),向指定接口提交POST请求以换取access_token和其他相关信息,如openid等。对于微信而言,此过程可以直接从API调用的结果里同时拿到accesstoken 和 openid[^4]。 ```objc // Objective-C 示例代码片段用于处理接收到的 code 并请求 access token NSString *urlString = [NSString stringWithFormat:@"https://api.weixin.qq.com/sns/oauth2/access_token?appid=%@&secret=%@&code=%@&grant_type=authorization_code", appid, secret, receivedCode]; NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString]]; NSURLSessionDataTask *task = [[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { // 解析 JSON 数据... }]; [task resume]; ``` #### QQ授权登录集成 对于QQ授权登录来说,主要步骤如下所示: 1. **引导用户访问授权页面** 将用户导向至官方提供的授权网址`https://graph.qq.com/oauth2.0/authorize`,附带必要参数如client_id、redirect_uri、scope等信息,让用户授予权限。 2. **接收Authorization Code** 用户批准后会被重定向前往预先定义过的回调路径,并附加授权码(code),此时应该捕获该值供下一步骤使用。 3. **利用Code换取AccessToken** 不同于微信的是,这里需要用上述获得的code再次发出HTTP GET请求至特定端点(`https://graph.qq.com/oauth2.0/token`)来取得实际可用的accessToken。值得注意的是这个阶段仅能获取token而无法立即得知用户的唯一标识符(openid)。 4. **查询OpenID及其他资料** 成功获取accessToken以后,还需要额外执行一次API调用来检索目标账户的具体详情,特别是openId字段,它代表了每个独立用户的全局唯一识别码。 ```javascript // JavaScript (Node.js) 示例代码展示如何根据 accessToken 获取 OpenID 及更多信息 const axios = require('axios'); async function getQqUserInfo(accessToken) { try { const response = await axios.get( `https://graph.qq.com/oauth2.0/me?access_token=${accessToken}` ); let result = qs.parse(response.data.match(/callback\((.*)\)/)[1]); console.log(result); if (!result.client_id || !result.openid) throw new Error('Invalid Response'); return { clientId: result.client_id, openId: result.openid }; } catch (err) { console.error(err.message); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值