微信小程序获取openid的两种方式

这篇文章是关于获取openid的两种方式,自己在学着用微信小程序来写一个小东西玩

首先我们要到小程序官网获取到自己的appid和Appsecret 如图

第一种:直接在微信小程序中获取,不需要通过后台

 // 登录

    wx.login({

      success: res => {

        // 发送 res.code 到后台换取 openId, sessionKey, unionId

        const code = res.code;

        // 设置appid

        const appId = "。。。。。";

        // const appid = res.appid;

        //设置secret

        const secret = "。。。。。";

 

        wx.request({

          url: 'https://api.weixin.qq.com/sns/jscode2session?appid=' + appId 

                                                            + '&secret=' + secret 

                                                            + '&js_code=' + code 

                                                            + '&grant_type=authorization_code',

          data: {},

          header: {

            'content-type': 'json'

          },

          success: function (res) {

          

            const openId = res.data.openid; //返回openid

          }

        })

      }

    })

第一种就这样了

 

第二种:通过后台发送来获取openid

微信小程序传code过去

public class WeiXinGetOpenid {
    @Value("${wx.app.secret}")
    private String secret;

    @Value("${wx.app.appid}")
    private String appid;

    private String grant_type = "authorization_code";

    /**
     * 获取openid
     * @param code 微信小程序前台发送code
     * @return
     */
    public Map getOpenid(String code) {
        Map resultMap = new HashMap();
        try {
            //拼接接口需要的参数
            String params = "appid=" + appid + "&secret=" + secret + "&js_code=" + code + "&grant_type" + grant_type;
            //小程序获取openid的APi
            String url = "https://api.weixin.qq.com/sns/jscode2session";
            String s = HttpUtil.sendPost(url, params);
            JSONObject object = JSON.parseObject(s);
            System.out.println("返回结果====="+object);
            resultMap.put("data", object.get("openid"));
            resultMap.put("code","200");
            resultMap.put("msg","success");

        } catch (Exception e) {
            resultMap.put("code","201");
            resultMap.put("msg","fail");
        }
        return resultMap;
    }
}

第二种主要看返回的object的数据,有可能报错,我这里没有处理,

像这种的 {"errcode":40029,"errmsg":"invalid code, hints: [ req_id: XhNBdzXBe-es50oa ]"}

应该是code有问题。

 

自己太菜了,如果看不懂的话就去找大佬写的看看。

 

 

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,可以得知获取微信小程序用户手机号的方法有两种,分别是新版和老版。下面分别介绍这两种方法: 1. 新版获取用户手机号的方法: 前端需要授权两次,一次获取用户信息授权码code,另外一次获取用户手机授权码code,全部传给后端。后端通过用户信息授权码获取openid,通过手机授权码获取手机号码。具体步骤如下: - 前端调用wx.login()方法获取用户信息授权码code和用户手机授权回调里的iv和encryptedData。 - 前端调用wx.getPhoneNumber()方法获取用户手机号授权码code。 - 前端将获取到的code和iv、encryptedData一起传给后端。 - 后端通过用户信息授权码code获取openid,通过手机授权码获取手机号码。 - 后端将获取到的手机号码进行绑定用户,然后通过登录验证返回给前端登录凭证token。 2. 老版获取用户手机号的方法: 前端需要传给后端授权码code和用户手机授权回调里的iv和encryptedData。后端通过code获取openid和sessionKey,然后用sessionKey和iv解密encryptedData获取手机号。最后通过手机号进行绑定用户,然后通过登录验证返回给前端登录凭证token。具体步骤如下: - 前端调用wx.login()方法获取用户信息授权码code和用户手机授权回调里的iv和encryptedData。 - 前端将获取到的code和iv、encryptedData一起传给后端。 - 后端通过code获取openid和sessionKey。 - 后端用sessionKey和iv解密encryptedData获取手机号。 - 后端将获取到的手机号码进行绑定用户,然后通过登录验证返回给前端登录凭证token。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值