微信小程序电话号码授权

前端:

文档:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/getPhoneNumber.html

uniapp调用的时候,要将bind用@替换

html 复制代码
<button open-type="getPhoneNumber" @getphonenumber="getPhoneNumber"></button>
js 复制代码
function getPhoneNumber(e){
  console.log(e.detail.code)  // 动态令牌
  console.log(e.detail.errMsg) // 回调信息(成功失败都会返回)
  console.log(e.detail.errno)  // 错误码(失败时返回)

  if (e.detail.code){
    User.getUserTelNumber(e.detail.code).then(res=>{
      // 授权成功
      setTimeout(()=>{
        uni.navigateBack({
          delta:1 //返回的页面层级,1为返回上一个页面
        })
      },1000)
    }).catch((err)=>{
      console.log(err,"errrrrrr")
    })
  }else{
    // 拒绝授权
    toast("拒绝授权","error")
    setTimeout(()=>{
      uni.navigateBack({
        delta:1 //返回的页面层级,1为返回上一个页面
      })
    },1000)
  }

}

java:

文档:https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/user-info/phone-number/getPhoneNumber.html

掉这个获取电话号码,需要先获取access_token

https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/mp-access-token/getAccessToken.html

获取token,有效期是两小时,需要缓存,

java 复制代码
    @GetMapping("/getTelNumber")
    @LoginRequired
    @ApiOperation(value = "getTelNumber",notes = "getTelNumber")
    public RespBean getTelNumber(String code){

        userService.getWechatTelNumber(code);

        return RespBean.ok("授权成功");

    }
java 复制代码
    /**
     * 获取微信的 accessToken,, 需要缓存起来,,, 两小时过期
     * @return
     */
    public String getAccessToken(){

        String tokenUrl = String.format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s", wechatPayConfig.getAppId(), wechatPayConfig.getAppSecret());
        Map map = restTemplate.getForObject(tokenUrl, Map.class);
        String accessToken = (String) map.get("access_token");

        System.out.println("accessToken = " + accessToken);
        return accessToken;
    }
java 复制代码
    public void getWechatTelNumber(String code) {
        try {
            String accessToken= globalMap.get("access_token");
            if (accessToken == null){
                 accessToken = getAccessToken();
                globalMap.put("access_token",accessToken);
            }


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

            Map<String, String> map = new HashMap<>();
            map.put("code",code);

            Object obj = restTemplate.postForObject(url, map, Object.class);
            System.out.println("obj = " + obj);

            Map<String,Object> resultMap = (Map<String,Object>) obj;

            Map<String,Object> phoneInfo = (Map<String, Object>) resultMap.get("phone_info");

            System.out.println("phoneInfo = " + phoneInfo);

            String phoneNumber = (String) phoneInfo.get("phoneNumber");

            // 将number更新到user表
            User user = SecurityContextHolder.getUser();
            user.setTel(phoneNumber);
            this.updateById(user);
        } catch (RestClientException e) {
            throw new ServiceException(e.getMessage());
        }


    }

因为授权手机号,必须要通过点击按钮,,用户授权,不能够直接调api,,必须要按钮,,可以将按钮展示为一个授权页面,,跳过去授权,,成功之后跳回

引用:https://blog.csdn.net/qq_46940224/article/details/136865901

https://blog.csdn.net/weixin_41698051/article/details/97777993

相关推荐
万岳科技系统开发10 小时前
校园跑腿外卖搭建助力高校周边商家拓展线上业务
大数据·人工智能·小程序
微三云 - 廖会灵 (私域系统开发)17 小时前
消费返物业费平台搭建:美家时代商业模式拆解与系统开发选型指南
小程序·系统架构
greenbbLV19 小时前
中小公司积分商城选型:SaaS与私有化方案对比解析
大数据·前端·小程序
2501_915909062 天前
iOS 应用反调试技详解术 检测调试器的原理与防护实践
android·ios·小程序·https·uni-app·iphone·webview
00后程序员张2 天前
iOS加固技术路线全面解析:Bitcode模式、源码模式与汇编模式对比及爱加密优势
android·汇编·ios·小程序·uni-app·cocoa·iphone
海纳百川·纳海川2 天前
租房行业数字化:换个思路解决“老问题”
大数据·微信小程序·小程序
上海云盾-小余3 天前
CC 高频请求 + DDoS 流量攻击实战防御:全链路 WAF 流量清洗部署完整流程
网络·爬虫·安全·小程序·ddos
2501_916008893 天前
iOS IPA文件反编译与打包操作方法,拆包分析防护和加固打包
android·macos·ios·小程序·uni-app·cocoa·iphone
2301_810313183 天前
海外教育APP定制发展现状与开发选型核心要点解析
小程序·团队开发·软件需求
2501_915921433 天前
iOS手游安全反外挂解决方案:基于Xcode的加固混淆特色详解
android·安全·ios·小程序·uni-app·iphone·xcode