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
觉得帖子写的不错并能解决你的问题的话 点个赞加关注吧文章来源地址https://www.toymoban.com/news/detail-492065.html
到了这里,关于SpringBoot整合微信小程序登录获取手机号并解密的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!