1.微信接口文档地址
https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/user-info/phone-number/getPhoneNumber.html
2.请求地址
POST https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=ACCESS_TOKEN
3.返回值实体
@Data
@Schema(description = "微信获取用户手机号信息参数")
public class WechatPhoneInfoVO {
@Schema(description = "错误码")
private int errcode;
@Schema(description = "错误信息")
private String errmsg;
@Schema(description = "用户手机号信息")
private PhoneInfo phoneInfo;
// Getter 和 Setter 方法
public int getErrcode() {
return errcode;
}
public void setErrcode(int errcode) {
this.errcode = errcode;
}
public String getErrmsg() {
return errmsg;
}
public void setErrmsg(String errmsg) {
this.errmsg = errmsg;
}
public PhoneInfo getPhoneInfo() {
return phoneInfo;
}
public void setPhoneInfo(PhoneInfo phoneInfo) {
this.phoneInfo = phoneInfo;
}
public class PhoneInfo {
@Schema(description = "用户绑定的手机号(国外手机号会有区号)")
private String phoneNumber;
@Schema(description = "没有区号的手机号")
private String purePhoneNumber;
@Schema(description = "区号")
private int countryCode;
@Schema(description = "数据水印")
private Watermark watermark;
// Getter 和 Setter 方法
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
public String getPurePhoneNumber() {
return purePhoneNumber;
}
public void setPurePhoneNumber(String purePhoneNumber) {
this.purePhoneNumber = purePhoneNumber;
}
public int getCountryCode() {
return countryCode;
}
public void setCountryCode(int countryCode) {
this.countryCode = countryCode;
}
public Watermark getWatermark() {
return watermark;
}
public void setWatermark(Watermark watermark) {
this.watermark = watermark;
}
public class Watermark {
@Schema(description = "用户获取手机号操作的时间戳")
private long timestamp;
@Schema(description = "小程序appid")
private String appid;
// Getter 和 Setter 方法
public long getTimestamp() {
return timestamp;
}
public void setTimestamp(long timestamp) {
this.timestamp = timestamp;
}
public String getAppid() {
return appid;
}
public void setAppid(String appid) {
this.appid = appid;
}
}
}
}
4.请求微信
/**
* 获取手机号
*
* @param access_token 网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同
* @param codeParam 用户的唯一标识
*/
@POST("wxa/business/getuserphonenumber")
WechatPhoneInfoVO getPhoneNumber(@Query("access_token") String access_token, @Body WechatCodeParam codeParam);
注:@RetrofitClient(baseUrl = “${wechat.baseUrl}”)相关查看主页微信相关文档
5.调用接口
@Service
public class WechatServiceImpl implements WechatService {
private static final Logger LOGGER = LoggerFactory.getLogger(WechatServiceImpl.class);
private static final long MAX_SIZE = 1024 * 1024 * 2;
@Resource
private WechatBasicsManager wechatBasicsManager;
@Resource
private WechatManager wechatManager;
@Override
public WechatPhoneInfoVO getPhoneNumber(String code) {
// 参数校验
if (StringUtils.isBlank(code)) {
throw new BaseRuntimeException("code不能为空");
}
// step1: 获取accessToken
String accessToken = wechatManager.getAccessToken();
// step2: 判断accessToken是否为空
if (StringUtils.isBlank(accessToken)) {
throw new BaseRuntimeException("获取微信AccessToken失败,accessToken为空");
}
// step3: 获取手机号信息
WechatPhoneInfoVO phoneNumber = null;
try {
WechatCodeParam wechatCodeParam = new WechatCodeParam();
wechatCodeParam.setCode(code);
phoneNumber = wechatBasicsManager.getPhoneNumber(accessToken, wechatCodeParam);
} catch (Exception e) {
LOGGER.error("获取微信手机号信息失败", e);
throw new BaseRuntimeException("获取微信手机号信息失败,请稍后重试");
}
return phoneNumber;
}
}