uniapp小程序获取用户电话

获取用户电话只开放给小程序,微信网页端授权并没有这个选项。

getuserphonenumber 参数需要access_token,和code。此code并非wx.login的code,而是点击button按钮获取电话 得到微信返回的code。

1.获取AcToken

 data() {
    return { phoneCode: '', acToken: '' };
  },
 onLoad(options) {
    this.getAcToken();
  },
  getAcToken() {
      uni.request({
        url: 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=小程序APPID&secret=小程序APPSECRET',
        method: 'GET',
        success: (res) => {
          console.log('getAcToken', res.data.access_token);
          this.acToken = res.data.access_token;
        },
      });
    },

2.按钮获取code

<button open-type="getPhoneNumber" @getphonenumber="getPhoneNumber">
      getNumberCode
</button>
//这里我用的是uniapp封装过的
getPhoneNumber(e) {
      console.log(e);
      this.phoneCode = e.detail.code;
},

3.调取后端接口获取用户手机号

getJavaPhone() {
      uni.request({
        url: 'http://localhost:8080/getUserPhone',
        method: 'POST',
        data: {
          code: this.phoneCode,
          acToken: this.acToken,
        },
        success: (res) => {
          console.log('获取用户手机号', res);
        },
      });
    },

4.java程序页面 springboot程序页面

@PostMapping("/getUserPhone")
    public String getPhoneNumber(@RequestBody JSONObject reqParams) throws Exception {

        System.out.println("____________________--getUserPhone");
        String code = reqParams.get("code").toString();
        System.out.println(code);
        String acToken = reqParams.get("acToken").toString();
        System.out.println(acToken);

        String getNumUrl = "https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=" + acToken;
        //构造http请求客户端
        CloseableHttpClient httpclient = HttpClients.createDefault();
        HttpPost httpPost = new HttpPost(getNumUrl);
        httpPost.addHeader("Content-Type", "application/json;charset=utf-8");
        httpPost.setHeader("Accept", "application/json");


        JSONObject json = new JSONObject();
        json.put("code", code);
        httpPost.setEntity(new StringEntity(json.toString()));

        CloseableHttpResponse response = httpclient.execute(httpPost);

        int statusCode = response.getStatusLine().getStatusCode();
        HttpEntity responseEntity = response.getEntity();
        String responseText = EntityUtils.toString(responseEntity);
       //这里会在控制台打印出用户的手机号码
        System.out.println(responseText);

        return JSON.toJSONString(response);

    }

需要注意的是,获取手机号的官方接口需要json传值,不接受form参数

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容