java微信获取用户列表_Java微信授权小程序获取用户手机号信息

本文介绍了如何使用Java后端接口配合小程序获取用户手机号。首先,小程序通过wx.login获取code,然后通过getPhoneNumber获取encryptedData和iv。接着,将这些信息发送到后端,后端调用微信API获取session_key,并使用它解密encryptedData得到用户手机号。
摘要由CSDN通过智能技术生成

注意:目前该接口针对非个人开发者,且完成了认证的小程序开放(不包含海外主体)。需谨慎使用,若用户举报较多或被发现在不必要场景下使用,微信有权永久回收该小程序的该接口权限。

官网地址如下:

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

1.小程序授权拿到code

wx.login({

success (res) {

if (res.code) {

//发起网络请求

wx.request({

url: 'https://test.com/onLogin',

data: {

code: res.code

}

})

} else {

console.log('登录失败!' + res.errMsg)

}

}

})

2.小程序授权获取手机号标签拿到encryptedData与iv

# 授权按钮,绑定用户点击后的方法 getPhoneNumber()

js方法:

getPhoneNumber: function (e) {

// 参数e是绑定的授权方法自动传入过来的, 主要是为了拿到vi和encryptedData值从后台换取用户联系方式

if ("getPhoneNumber:ok" != e.detail.errMsg){

wx.showToast({

icon:'none',

title: '快捷登陆失败'

})

return;

}

var iv = e.detail.iv;

var encryptedData = e.detail.encryptedData;

var code = this.data.wxCode;//小程序授权拿到的code

var _this = this;

api.sendPost({

url: ‘’, //调用后台接口获取用户手机号码

params:{

encrypted: encryptedData,

iv:iv,

code:code

},

success:function(data){

// 获取到的手机号码

var phone = data.phone;

},

fail:function(msg){

})

}

3.后台接口

/*

* 获取小程序用户基本信息

*/

@RequestMapping(value="code2Session", method = RequestMethod.GET)

public ReturnData code2Session(HttpServletRequest req,String code,String encryptedData,String iv) throws Exception {

String code = req.getParameter("code");

//第一步:通过code换取网页授权access_token

String url = "https://api.weixin.qq.com/sns/jscode2session?appid=‘你的小程序appid’&secret=‘你的小程序密钥’&js_code="+code+"&grant_type=authorization_code";

JSONObject jsonObject = WXAuthUtil.doGetJson(url);

Mapmap=new HashMap<>();

map.put("openid",jsonObject.getString("openid"));

map.put("unionid",jsonObject.getString("unionid"));

map.put("session_key",jsonObject.getString("session_key"));

String sessionkey = jsonObject.getString("session_key");

// 解密

byte[] encrypData = Base64Utils.decodeFromString(encryptedData);

byte[] ivData = Base64Utils.decodeFromString(iv);

byte[] sessionKey = Base64Utils.decodeFromString(sessionkey);

AlgorithmParameterSpec ivSpec = new IvParameterSpec(ivData);

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");

SecretKeySpec keySpec = new SecretKeySpec(sessionKey, "AES");

cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);// 设置为解密模式

String resultString = new String(cipher.doFinal(encrypData), "UTF-8");

JSONObject object = JSONObject.parseObject(resultString);

map.put("phone",object.getString("phoneNumber"));// 拿到手机号码

return ReturnData.success(map);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值