评论

wx.login() 获取openid的方法

wx.login() 获取openid的具体程序

官方文档中给出了示例代码:

wx.login({
  success (res) {
    if (res.code) {
      //发起网络请求
      wx.request({
        url: 'https://example.com/onLogin',
        data: {
          code: res.code
        }
      })
    } else {
      console.log('登录失败!' + res.errMsg)
    }
  }
})

能用吗?经反复摸索,终于得到下述用法:

wx.login({
        success: res => {
            if (res.code) {
              let URL='https://api.weixin.qq.com/sns/jscode2session?appid=##################&secret=*****************
                                                         ***************&js_code='+res.code+'&grant_type=authorization_code'
              wx.request({
                url: URL , 
                 success:function(res){ 
                   console.log(res.data)//res.data中有openid
                }
              })
            }  
    } })
注:###......#为小程序ID;***……*为小程序密钥。res.code为临时获得的码。还得注意编译程序时本地设置中勾选“不校验合法域名”

小程序中的坑太多了!官方文档多单不实用!!!
最后一次编辑于  2022-10-29  
点赞 21
收藏
评论

14 个评论

  • 历代星辰监护人
    历代星辰监护人
    2022-10-30

    所有api.weixin.qq.com开头的接口,都得服务端调用。前端调用上线不了,小程序后台不支持配置api.weixin.qq.com开头的服务器域名

    2022-10-30
    赞同 9
    回复 5
    • 四海骄阳
      四海骄阳
      2023-10-19
      应该是这样的;
      2023-10-19
      回复
    • rong
      rong
      2024-04-18
      请问用云函数可以吗?
      2024-04-18
      回复
    • 历代星辰监护人
      历代星辰监护人
      2024-04-19回复rong
      可以的
      2024-04-19
      回复
    • 听风的倾诉
      听风的倾诉
      2024-07-08
      意思前端直接调用微信官方接口获取openid上线不了?
      2024-07-08
      回复
    • 历代星辰监护人
      历代星辰监护人
      2024-07-08回复听风的倾诉
      是的呢,因为纯调用服务端接口获取openId,需要调用api.weixin.qq.com的域名,而这个域名 无法配置服务器域名,没法配置你前端就无法调用,所以不行。但是前端用云函数是可以获取的。
      2024-07-08
      回复
  • sng
    sng
    2024-02-20

    官方有图,比实例代码清晰。是发到开发者服务器,后端自己获取到openid再返回。

    2024-02-20
    赞同 6
    回复 2
    • 昨天、今天
      昨天、今天
      2024-02-20
      开发者服务器是指?
      2024-02-20
      回复
    • 我,秦始皇
      我,秦始皇
      2024-02-23回复昨天、今天
      你的小程序,肯定需要一个后台服务器吧。
      如果小程序的功能完全无需后台服务器交互——确实可以没有,就跟古老的单机PC游戏一样。但那样你是无法获取授权的,不过可以通过getProfielUserinfo获取用户信息保存在手机端。
      获取授权的意思是,你的小程序应用,需要有用户管理系统,后台记录每个前端用户的数据(也就是通过openid映射到某个小程序用户),那样你的小程序运营过程中可以给某些确定的用户发积分/邮件什么的。
      2024-02-23
      1
      回复
  • 何所冬暖与夏凉
    何所冬暖与夏凉
    2022-12-07
    /**
     * TODO 通过 code 获取 OpenID 注册,并记录登录状态
     * @route   /api/wxa/getOpenidByCode/:code
     * @method  POST
     * @param   string $code 通过小程序接口(wx.login)获取到
     * @return  array(user, token)
     */
    public function getOpenidByCode(string $code): array
    {
        /**
         * 调用微信的接口,获取 openid、unionid、session_key
         * https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/user-login/code2Session.html
         * @type array
         */
        [$code, $openid] = WechatUserService::auth($code);
        if ($code === false) return $this->fail($openid);
    
        // 通过openid注册用户,并返回一个 token
        [$user, $token] = $this->store($openid);
        return $this->successful(compact('user', 'token'));
    }
    
    2022-12-07
    赞同 3
    回复
  • 神经蛙
    神经蛙
    2022-10-30

    把appid和secret放在小程序,这不是闹么?你这个用法等于告诉人家你家的门钥匙放在了砖头下面。url和data当然是由服务端告诉你,这文档这么基础都看不懂的话,得从自身找原因了。

    2022-10-30
    赞同 3
    回复 5
    • nono
      nono
      2022-10-30
      这么闹也是没办法,本来用户查询自己的openid天经地意。还要闹出个5分钟有效的code来,逼得人家曲线救国,最后不还是如愿以偿得到了openid
      2022-10-30
      2
      回复
    • shark
      shark
      2022-11-14
      由后台去请求
      2022-11-14
      回复
    • 渔船
      渔船
      2023-02-13回复nono
      不是你这样干的。。openid是内部用的,不该让用户查询
      2023-02-13
      回复
    • 早晚有一天
      早晚有一天
      01-16回复渔船
      你说的这个叫 closeid  不叫openid
      01-16
      回复
    • 早晚有一天
      早晚有一天
      01-16回复nono
      没错.垃圾腾讯   openid 为什么要藏起来
      01-16
      回复
  • 小糯米
    小糯米
    2024-04-19

    我刚刚发现的bug 比你们刺激多了。

    添加page页面的时候必须要操作一次构建NPM,不然就是要报错。说找不到文件

    另外就是源代码没有任何问题,保存一次可能就报错无法生成,再试一次就可以了。再保存一次又报错缺文件。诶,对就是这样反复整,人都搞懵了!


    2024-04-19
    赞同 2
    回复
  • 张三
    张三
    01-01

    为什么不推荐客户端直接调用?

    1. 安全性问题
    • 小程序的 AppSecret 是调用 jscode2session 必须的参数。为了保护 AppSecret,不应该在客户端暴露它,否则会被恶意用户截取,导致你的小程序被攻击。
    • 如果 AppSecret 泄露,攻击者可以伪造请求,窃取用户信息甚至冒充用户。
    1. 数据可信度问题
    • 如果小程序直接请求微信服务器获取 openid,你无法保证数据的来源可信。任何人都可以伪造请求并传递虚假的 code
    • 在后端验证 code 并直接与微信服务器通信,可以确保数据的真实性。
    1. 隐私合规性
    • 用户的 openid 属于个人敏感数据。如果直接在客户端处理,可能违反隐私相关规定,尤其是在敏感场景下。


    01-01
    赞同 1
    回复
  • 何秀楠
    何秀楠
    2024-12-24

    这个链接不对了吗

    我现在获取不到了


    2024-12-24
    赞同
    回复
  • 煜
    2024-01-16

    一个登录获取用户信息的流程,用n个函数+回调,神一般的设计。

    2024-01-16
    赞同
    回复 2
    • 我,秦始皇
      我,秦始皇
      2024-02-23
      你想多了。。。其实这个设计非常合理。
      2024-02-23
      回复
    • 🌱🌱🌱
      🌱🌱🌱
      2024-03-07回复我,秦始皇
      这接口就是你自己设计的吧,合理那也得把文档写清楚,画到ULM图里生怕开发者看清楚了
      2024-03-07
      4
      回复
  • javadev_hzy
    javadev_hzy
    2023-11-01
    wx.login(
    这个可以反复调用吗?    我在登录时没有获取到jscode,在登录后某个页面再调用才会拿到code
    
    2023-11-01
    赞同
    回复
  • Chimi
    Chimi
    2023-04-04

    你确定这样能获取到openid?js_code不是得通过post传参吗?这样获取不到的

    2023-04-04
    赞同
    回复 1
    • nono
      nono
      2023-04-16
      已经在另一篇文章里改了
      2023-04-16
      回复

正在加载...

登录 后发表内容