当前位置:   article > 正文

微信小程序获取手机号(Java后端)_java微信小程序获取用户手机号

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

最近在做小程序后端的时候,需要拿到手机号进行角色校验,小白也是第一次获取小程序的手机号,所以功能完毕后总结一下本次操作咯。

根据微信小程序官方文档:获取手机号 | 微信开放文档

调用的接口是getPhoneNumber

 请求参数

 从伤处请求参数来看,我们要获取手机号,先得拿到该接口所需参数access_token

下面看看如何拿到access_token?

看看文档

文档只有一点点啊,根本看不出来如何请求,后来看了网上的一些教程,才知道获取access_token又需要调一个接口

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s

参数:微信小程序的appIdappSecret

先根据appId,appSecret调用接口获取到access_token

//通过appid和secret来获取token
String tokenUrl = String.format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s", appId, appSecret);
String accessToken = String.valueOf(JSON.parseObject(HttpUtil.get(tokenUrl)).get("access_token"));

然后再根据access_token,和前端生成的code来获取用户手机号就OK了。

 

//通过token和code来获取用户手机号
String url = "https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=" + accessToken + "&code=" + code;

Map<String, String> paramMap = new HashMap<>();
paramMap.put("code", code);
HttpHeaders headers = new HttpHeaders();
HttpEntity<Map<String, String>> httpEntity = new HttpEntity<>(paramMap, headers);
ResponseEntity<Object> response = restTemplate.postForEntity(url, httpEntity, Object.class);
String body = String.valueOf(response.getBody());// 解析JSON字符串
log.info(body);
// 定义一个正则表达式来匹配 phoneNumber
Pattern pattern = Pattern.compile("phoneNumber=(\\d+)");
Matcher matcher = pattern.matcher(body);
if (matcher.find()) {
    String phoneNumber = matcher.group(1); // 获取括号中的数字
    log.info("phoneNumber:" + phoneNumber);
    return AjaxResult.success(phoneNumber);
} else {
    return AjaxResult.error("手机号获取失败!");
}

注意:前端生成的code5分钟就过期了

下面附上完整的接口代码吧!!!!!!!!

由于这个controller里还有其他接口,所以这里把包和代码分开了。大概有个参考!

  1. import cn.hutool.http.HttpUtil;
  2. import com.alibaba.fastjson.JSON;
  3. import com.cvit.applet.Enum.AppletConstants;
  4. import com.cvit.applet.domain.StorageAccount;
  5. import com.cvit.applet.mapper.AccountMapper;
  6. import com.cvit.framework.core.domain.AjaxResult;
  7. import com.cvit.framework.utils.StringUtils;
  8. import io.swagger.annotations.Api;
  9. import io.swagger.annotations.ApiOperation;
  10. import lombok.extern.slf4j.Slf4j;
  11. import org.springframework.beans.factory.annotation.Autowired;
  12. import org.springframework.beans.factory.annotation.Value;
  13. import org.springframework.http.HttpEntity;
  14. import org.springframework.http.HttpHeaders;
  15. import org.springframework.http.ResponseEntity;
  16. import org.springframework.web.bind.annotation.*;
  17. import org.springframework.web.client.RestTemplate;
  18. import javax.annotation.Resource;
  19. import java.util.HashMap;
  20. import java.util.Map;
  21. import java.util.regex.Matcher;
  22. import java.util.regex.Pattern;

接口代码: 

  1. @Value("${weixin.appId}")
  2. private String appId;
  3. @Value("${weixin.appSecret}")
  4. private String appSecret;
  5. @Autowired
  6. private RestTemplate restTemplate;
  7. @PostMapping("/login")
  8. public AjaxResult login(String code) {
  9. if (StringUtils.isEmpty(code)) {
  10. return AjaxResult.error("手机号获取凭证不能为空!");
  11. }
  12. //通过appid和secret来获取token
  13. String tokenUrl = String.format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s", appId, appSecret);
  14. String accessToken = String.valueOf(JSON.parseObject(HttpUtil.get(tokenUrl)).get("access_token"));
  15. log.info(accessToken);
  16. //通过token和code来获取用户手机号
  17. String url = "https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=" + accessToken + "&code=" + code;
  18. Map<String, String> paramMap = new HashMap<>();
  19. paramMap.put("code", code);
  20. HttpHeaders headers = new HttpHeaders();
  21. HttpEntity<Map<String, String>> httpEntity = new HttpEntity<>(paramMap, headers);
  22. ResponseEntity<Object> response = restTemplate.postForEntity(url, httpEntity, Object.class);
  23. String body = String.valueOf(response.getBody());// 解析JSON字符串
  24. log.info(body);
  25. // 定义一个正则表达式来匹配 phoneNumber
  26. Pattern pattern = Pattern.compile("phoneNumber=(\\d+)");
  27. Matcher matcher = pattern.matcher(body);
  28. if (matcher.find()) {
  29. String phoneNumber = matcher.group(1); // 获取括号中的数字
  30. log.info("phoneNumber:" + phoneNumber);
  31. return AjaxResult.success(phoneNumber);
  32. } else {
  33. return AjaxResult.error("手机号获取失败!");
  34. }
  35. }

 

好了,大概可能估计也许就这些了,有想法的老师请多指点。。。。。。。。

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/368237
推荐阅读
相关标签
  

闽ICP备14008679号