小程序——获取openid

本文详细介绍了如何通过小程序前端获取临时code,并将其传递给后台,后台再利用AppId和AppSecret调用微信接口获取用户的openid。过程中涉及小程序的公网配置、wx.login接口、wx.request的使用,以及后台对接微信接口的步骤。同时列举了可能出现的错误代码及解决方案,帮助开发者解决微信登录授权的问题。

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

将临时code传给后台,后台通过AppId及AppSecret向微信提供的接口获取openid
1.在小程序官网对自己传值的公网进行配置
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里将自己的访问的公网地址进行配置
2.前端传临时code

// 获取临时code
    wx.login({
      success: res => {
        res.code//res.code就是临时code
      }
    })
//传值给后端
wx.request({
      method: 'POST',
      url: app.globalData.anti_link+'/user/getcode',//自己的后台接口,前面那串是我的后台的前缀
      data: { code:res.code },
      header: {
        'content-type': 'application/x-www-form-urlencoded' 
      },
      success: res => {}})

3.后台接受数据进行处理
主要是请求以下这个接口,AppId和AppSecret将自己的对应填上
https://api.weixin.qq.com/sns/jscode2session?appid={AppId}&secret={AppSecret}&js_code={code}&grant_type=authorization_code
4.调用微信接口时经常遇到的错误代码
(1)40163:临时code只能请求一次上面这个接口,不可重复使用
(2)40029 :code无效
(3)0:成功
(4)-1:系统繁忙,此时请开发者稍候再试
(5)45011:频率限制,每个用户每分钟100次
注:还有一种云开发模式,笔者未尝试过,暂不讨论

### 微信小程序开发中获取用户 OpenID 的方法 #### 使用 `wx.login` 接口获取 Code 通过调用微信提供的 `wx.login` API 来获取临时登录凭证(code),这是后续换取用户唯一标识(OpenID)所必需的第一步。 ```javascript wx.login({ success: function(res) { const code = res.code; console.log('Login code:', code); } }); ``` 此操作完成后,开发者可以利用该 code 向自建服务器发起请求来交换用户的 OpenID 和 session_key[^1]。 #### 构建安全的后端服务处理逻辑 为了避免敏感信息如 appid 和 secret 泄露,在实际项目部署前应采用更安全的方式——即借助云函数或自有服务器实现。下面展示的是基于 PHP 实现的服务端代码片段: ```php <?php $code = $_POST['code']; $appid = '你的appid'; $secret = "你的secret"; $url = "https://api.weixin.qq.com/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=authorization_code"; $url = sprintf($url, $appid, $secret, $code); // 发送HTTP GET 请求并解析JSON响应体 $str = file_get_contents($url); $jsonObj = json_decode($str); $dataArr = get_object_vars($jsonObj); echo $dataArr['openid']; // 输出得到的 openid echo $dataArr['session_key']; // 输出得到的 session_key ?> ``` 这段脚本负责接收从前端传来的 code 参数,并向微信官方接口发送 HTTPS 请求以获取对应的 OpenID 和 Session Key[^3]。 #### 封装网络请求工具简化流程 为了提高代码可读性和维护性,建议创建一个通用的 HTTP 客户端辅助类来进行跨域资源访问。例如,可以在 utils 文件夹下新建名为 request.js 的模块用于封装 wx.request 调用: ```javascript function request(params) { return new Promise((resolve, reject) => { wx.request({ ...params, success: (res) => resolve(res), fail: (err) => reject(err) }); }); } export { request }; ``` 这样做的好处是可以让业务层专注于核心功能而无需关心底层通信细节[^4]。 #### 集成与测试 最后一步就是将上述各个部分结合起来形成完整的解决方案。前端收集到 login() 返回的结果后将其传递给后台;而后台则执行必要的验证过程并将最终结果反馈给客户端应用。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值