SpringBoot整合微信小程序登录获取手机号并解密

这篇具有很好参考价值的文章主要介绍了SpringBoot整合微信小程序登录获取手机号并解密。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

SpringBoot+微信小程序

 文章目录:

  • 一、小程序登录获取手机号的流程
  • 二、pom导入所需的依赖包
  • 三、接收微信小程序的参数
  • 四、后端发请求的util工具方法
  • 五、获取手机号的接口
  • 六、请求接口获取的phone_info信息

一、小程序登录获取手机号的流程

1.前端请求getPhoneNumber方法获取code传给后端接口;

2.后端接口通过配置的appid、secretKey请求接口https://api.weixin.qq.com/cgi-bin/token获取access_token参数;


3.后端通过参数code和参数access_token,去请求接口

实例:  https://api.weixin.qq.com/wxa/business/getuserphonenumber来获取手机号。

二、导入依赖

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.4.0</version>
</dependency>

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

三、在yml配置微信小程序id和密钥

wx:
  open:
      app_id: *********
      app_secret: *******************

四、接收参数

@Data
public class WeChatPhone{
    // getPhoneNumber接口返回的code
    private String code;
    // 小程序的appid(一般是在程序中配置,不需要前端传参)
    private String appid;
    // 小程序的secretKey(一般是在程序中配置,不需要前端传参)
    private String secretKey;
}

五、请求接口获取的phone_info信息

@Data
public class WeChatPhoneInfo {
    // 用户绑定的手机号(国外手机号会有区号)
    private String phoneNumber;
    // 没有区号的手机号
    private String purePhoneNumber;
    // 区号
    private String countryCode;
    // 数据水印
    private String watermark;
}

六、后端发请求的util工具方法

/**
 * 请求微信接口服务,获取小程序全局唯一后台接口调用凭据(access_token)
 * https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/access-token/auth.getAccessToken.html
 *
 * @param appid
 * @param secretKey
 * @return
 */
public static JSONObject getAccessToken(String appid, String secretKey) {
    String result = null;
    try {
        String baseUrl = "https://api.weixin.qq.com/cgi-bin/token";
        HashMap<String, Object> requestParam = new HashMap<>();
        // 小程序 appId
        requestParam.put("grant_type", "client_credential");
        // 小程序唯一凭证id
        requestParam.put("appid", appid);
        // 小程序 appSecret(小程序的唯一凭证密钥)
        requestParam.put("secret", secretKey);
        // 发送GET请求读取调用微信接口获取openid用户唯一标识
        result = HttpUtil.get(baseUrl, requestParam);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return JSONUtil.parseObj(result);
}

/**
 * 请求微信接口服务,用code换取用户手机号(每个code只能使用一次,code的有效期为5min)
 * https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/phonenumber/phonenumber.getPhoneNumber.html
 *
 * @param code
 * @param accessToken
 * @return
 */
public static JSONObject getPhoneNumber(String code, String accessToken) {
    String result = null;
    try {
        // 接口调用凭证:accessToken
        String baseUrl = "https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=" + accessToken;
        HashMap<String, Object> requestParam = new HashMap<>();
        // 手机号调用凭证
        requestParam.put("code", code);
        // 发送post请求读取调用微信接口获取openid用户唯一标识
        String jsonStr = JSONUtil.toJsonStr(requestParam);
        HttpResponse response = HttpRequest.post(baseUrl)
                .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 (Exception e) {
        e.printStackTrace();
    }
        return JSONUtil.parseObj(result);
}

七、获取手机号的接口

@RestController
@RequestMapping("/login")
public class WeChatUserLoginController {
    
    /**
     * 用前端请求接口获取的code换取用户手机号
     * 前端需要请求的接口:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/getPhoneNumber.html
     * @param weChatPhone
     * @return
     */
    @PostMapping("/phone")
    public String getPhone(@RequestBody WeChatPhone weChatPhone){
        /*设置Appid和SecretKey*/
        weChatPhone.setAppid(ConstantPropertiesUtil.WX_OPEN_APP_ID);
        weChatPhone.setSecretKey(ConstantPropertiesUtil.WX_OPEN_APP_SECRET);
        // 1.请求微信接口服务,获取accessToken
        JSONObject accessTokenJson = WeChatUtil.getAccessToken(weChatPhone.getAppid(), weChatPhone.getSecretKey());
        String accessToken = accessTokenJson.get("access_token",String.class);
        // 2.请求微信接口服务,获取用户手机号信息
        JSONObject phoneNumberJson = WeChatUtil.getPhoneNumber(weChatPhone.getCode(), accessToken);
        WeChatPhoneInfo phoneInfo = phoneNumberJson.get("phone_info", WeChatPhoneInfo.class);
        System.out.println(phoneInfo);
        return phoneInfo.getPurePhoneNumber();
    }

总结:

如果有不足的地方,希望大家积极指正,谢谢!!!

觉得帖子写的不错并能解决你的问题的话 点个赞加关注吧文章来源地址https://www.toymoban.com/news/detail-492065.html

到了这里,关于SpringBoot整合微信小程序登录获取手机号并解密的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【微信小程序】如何获取用户手机号授权登录

    目前该接口针对非个人开发者,且完成了认证的小程序开放(不包含海外主体),也就是说只针对企业认证小程序开放。若用户举报较多或被发现在不必要场景下使用,微信有权永久回收该小程序的该接口权限。 在使用该接口时,用户可使用微信绑定手机号进行授权,也添加

    2024年02月16日
    浏览(53)
  • 微信小程序:授权登录获取手机号及获取基本信息等

    微信文档 1)需要将 button 组件 open-type 的值设置为 getPhoneNumber,当用户点击并同意之后,通过 getphonenumber 事件获取回调信息; 2)将 getphonenumber 事件回调中的动态令牌code传到开发者后台,并在开发者后台调用微信后台提供的 phonenumber.getPhoneNumber 接口,消费code来换取用户手机

    2024年02月06日
    浏览(38)
  • 微信小程序中如何获取用户手机号授权登录

    随着微信小程序的普及,许多应用程序需要用户登录才能提供更好的服务。而获取用户手机号码是验证用户身份和确保账户安全的重要步骤之一。因此,在本文中,我们将介绍如何在微信小程序中实现手机号授权登录。 首先,在小程序后台开发设置中勾选“获取手机号”选项

    2024年02月11日
    浏览(80)
  • uniapp微信小程序授权登录并获取手机号

    新版:前端要授权两次,一次获取用户信息授权码code,另外一次获取用户手机授权码code,全部传给后端。后端通过用户信息授权码获取openid,通过手机授权码获取手机号码。老版:前端传给后端授权码code和用户手机授权回调 里的iv和encryptedData给后端,后端通过code获取ope

    2024年02月11日
    浏览(69)
  • Taro:微信小程序通过获取手机号实现一键登录

            本文介绍如果通过微信小程序的getPhoneNumber方法获取用户微信绑定的手机号并自动注册登录。 1、按钮类型 openType 指定 \\\"getPhoneNumber\\\"   2、@getphonenumber必须全部小写 code:手机号获取凭证:动态令牌。可通过动态令牌换取用户手机号。         后台根据前端传入

    2024年02月16日
    浏览(38)
  • 微信小程序 - 实现手机号登录--授权并获取手机号保存至本地

    微信官方文档 | 获取手机号 这是服务端的  这是我们前端获取手机号需要给接口传递的两个参数    注意: 参数一: 获取access_token需要用到小程序密钥,这个需要从 服务端获取 ,也就是需要请求后端接口获取access_token,千万不要将小程序密钥写在前端代码中, 必须 要从服

    2024年02月03日
    浏览(44)
  • 微信小程序授权登录(含获取基本信息及绑定的手机号)

    1、授权获取微信个人信息 2、调用 wx.login() 获取临时登录凭证code 3、用code调用接口换取用户唯一标识openId、用户在微信开放平台账号下的唯一标识unionId和会话密钥session_key (1)前端获取 注意点 :正常开发中不会通过这种方法获取,会通过后台获取调用微信公众平台接口获

    2024年02月09日
    浏览(38)
  • .NET6使用微信小程序授权登录,获取手机号

    1.在appsettings配置你的小程序配置信息 2.请求接口时先获取Access_token 3.授权时获取手机号 4.微信接口要求必须使用Post请求方法 //小程序官方文档 https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/user-info/phone-number/getPhoneNumber.html

    2024年02月13日
    浏览(36)
  • 基于uniapp+java实现微信小程序无感登录,授权手机号登录,获取昵称头像,获取定位信息

    使用uniapp开发微信小程序,避免不了微信登录。但自动微信2022年升级了api版本后,不再允许返回昵称和头像信息,所以才出现无感登录或授权手机号登录。实现方式大同小异。 java后端所需maven 前端实现代码: 由于使用uni.login并不需要用户授权,所以能做到无感登录。 后端

    2024年02月16日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包