• Taro:微信小程序通过获取手机号实现一键登录


            本文介绍如果通过微信小程序的getPhoneNumber方法获取用户微信绑定的手机号并自动注册登录。

    1、前端获取手机号

    1. <template>
    2. <nut-button size="large" block color="#1890FF" :loading="loading" openType="getPhoneNumber" @getphonenumber="wxLogin">微信一键登录nut-button>
    3. template>

    1、按钮类型 openType 指定 "getPhoneNumber"  

    2、@getphonenumber必须全部小写

    1. // 微信一键登录事件
    2. async function wxLogin(e) {
    3. loading.value = true;
    4. try {
    5. const result = await wxNumberLogin({
    6. appid: getAppId(), // 微信小程序APPID
    7. code: e?.detail?.code,
    8. openId: openId.value, // 微信小程序openID
    9. });
    10. if (isRespondSuccess(result)){
    11. const from_url = Taro.getCurrentInstance().router?.params["from_url"];
    12. if (from_url && (from_url !== 'undefined')){
    13. Taro.reLaunch({url: from_url});
    14. } else {
    15. Taro.switchTab({url: `${ROUTER_ENUM.PAGE_HOME}`});
    16. }
    17. }
    18. } finally {
    19. loading.value = false;
    20. }
    21. }

    code:手机号获取凭证:动态令牌。可通过动态令牌换取用户手机号。

    2、后台自动注册账号

            后台根据前端传入的code获取手机号并自动将手机号注册为账号。

    1. public CommonResult getPhoneNumberRegister(String code, String appid, RegisterParams params) {
    2. String urlGetPhoneNumber = WxPlatformConstants.CODE_GET_PHONENUMBER
    3. .replaceFirst("ACCESS_TOKEN", getAuthAccessToken(appid));
    4. Map map = new HashMap<>();
    5. map.put("code", code);
    6. String result = HttpUtil.doPostUseJsonParams(urlGetPhoneNumber, map, HttpCharset.UTF8);
    7. log.info("getPhoneNumber_result:" + result);
    8. JSONObject object = JSON.parseObject(result);
    9. JSONObject phoneObject = object.getJSONObject("phone_info");
    10. String phone = phoneObject.getString("phoneNumber");
    11. params.setMobile(phone);
    12. return sysUserService.register(params, false); // 不需要校验验证码
    13. }

    1、 常量参数CODE_GET_PHONENUMBER :

    CODE_GET_PHONENUMBER = "https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=ACCESS_TOKEN";

    2、微信返回的参数:

    1. {
    2. "errcode":0,
    3. "errmsg":"ok",
    4. "phone_info": {
    5. "phoneNumber":"xxxxxx",
    6. "purePhoneNumber": "xxxxxx",
    7. "countryCode": 86,
    8. "watermark": {
    9. "timestamp": 1637744274,
    10. "appid": "xxxx"
    11. }
    12. }
    13. }


     新时代农民工

  • 相关阅读:
    短链平台设计
    C++面经之继承|菱形继承和虚拟继承|一些关于继承的笔试面试题
    使用Node.js开发一个文件上传功能
    高压放大器在3D打印中的应用
    认识 https 以及 https的通信流程
    揭秘B站,程序员穿女装敲代码,效率更高是真的吗?
    open3d-点云读写和显示
    隐马尔科夫模型的简单实现
    用57000字讲解完2022年Java岗面试最常问的100道题,太肝了
    从json中获取嵌套对象值(Oracle中的json_value和MySQL中的JSON_EXTRACT) 以及Oracle和MySQL处理日期语法的不同
  • 原文地址:https://blog.csdn.net/sg_knight/article/details/126901115