springboot 微信小程序获取用户手机号 最新方式

springboot 微信小程序获取用户手机号

直接开整!!!
现在有两种方式获取微信用户的手机号

第一种

这种方式比较旧了,也能获取到手机号,但不建议使用。
1.前端调用wx.login()(官方的方法,直接在代码中调用就可以)方法,把得到的code传给后端,后端在通过这个code和appid,secret获取sessionkey和openid。ps:这里需要把获取到的sessionkey和openid存入redis,sessionkey之后会用到,他是解密出手机号的钥匙。
2.前端在调用 getPhoneNumber ()方法(这个也是官方的方法),会得到如下数据
springboot 微信小程序获取用户手机号 最新方式_第1张图片
这时在把encryptedData和iv传给后端,后端在处理这两个参数和上一步得到的sessionkey,解密出用户的手机号。

第二种

这是目前最新的获取方式。
前端调用getPhoneNumber () ,这时只需要把得到数据中的code传给后端,后端通过appid和secret访问https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}获取刷新token,然后再携带这个刷新token和前端传给的code调用https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token={0}就可以获取用户的手机号了,不需解密操作。这两种方式都可以获取用户的手机号,但第一种有点麻烦,还需要解密。毕竟是有新的而且是更简洁的方式,还是用新的方式比较好,旧的之后不知道会不会被官方弃用。

完整代码

两种方式我都写了,这里只提供第二种方式的完整代码供大家参考

这里需要fastjson和hutool两个依赖,放入pom文件中下载即可

<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.72</version>
        </dependency>
<dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.6.5</version>
        </dependency>

appid和secret放在yml文件中
springboot 微信小程序获取用户手机号 最新方式_第2张图片

代码:

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

    @Value("${weixin.secret}")
    private String secret;

public Object getPhoneNumber(String code) {

        String result = null;
        try {
            String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}";
            String replaceUrl = url.replace("{0}", appid).replace("{1}", secret);
            String res = HttpUtil.get(replaceUrl);
            JSONObject json_token = JSON.parseObject(res);
            String access_token = json_token.getString("access_token");

            String urlTwo = "https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token={0}";
            String replaceUrlTwo = urlTwo.replace("{0}",access_token);
            HashMap<String, Object> requestParam = new HashMap<>();
            // 手机号调用凭证
            requestParam.put("code", code);
            String jsonStr = JSON.toJSONString(requestParam);
            HttpResponse response = HttpRequest.post(replaceUrlTwo)
                    .header(Header.CONTENT_ENCODING, "UTF-8")
                    // 发送json数据需要设置contentType
                    .header(Header.CONTENT_TYPE, "application/x-www-form-urlencoded")
                    .body(jsonStr)
                    .execute();
            if (response.getStatus() == HttpStatus.HTTP_OK) {
                result = response.body();
            }
        } catch (HttpException e) {
            e.printStackTrace();
        }
        return JSONObject.parseObject(result).get("phone_info");
    }

结果

springboot 微信小程序获取用户手机号 最新方式_第3张图片
个人码云有一些demo

你可能感兴趣的:(后端,springboot,微信小程序,spring,boot,小程序)