微信-java获取用户手机号

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;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值