springboot 获取微信openid和手机号
获取微信openid
- 导入依赖
<!--Request依赖-->
<dependency>
<groupId>com.github.kevinsawicki</groupId>
<artifactId>http-request</artifactId>
<version>6.0</version>
</dependency>
WxMiniConfig.AppId
和WxMiniConfig.AppSecret
是对应小程序的appid
和secret
/**
* 小程序授权
*/
@GetMapping("getOpenId/website")
public Result<?> getMiniAppOpenId(@RequestParam(value = "js_code", required = true) String js_code) {
Map<String, String> data = new HashMap<String, String>();
data.put("appid", WxMiniConfig.AppId);
data.put("secret", WxMiniConfig.AppSecret);
data.put("js_code", js_code);
data.put("grant_type", "authorization_code");
String response = HttpRequest.get("https://api.weixin.qq.com/sns/jscode2session").form(data).body();
//JSONObject obj= JSON.parseObject(response);//将json字符串转换为json对
return R.success(response);
}
获取手机号
- 导入依赖:
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk16</artifactId>
<version>1.46</version>
</dependency>
- 参数:
@Data
public class PhoneNumberParam implements Serializable {
private String encryptedData;
private String session_key;
private String iv;
}
- 接口代码:
/**
* 获取微信手机号
*/
@PostMapping(value = "getMiniPhoneNum/website")
public Result<?> getPhoneNumber(@RequestBody PhoneNumberParam phoneNumberParam) {
// 被加密的数据
byte[] dataByte = Base64.decode(phoneNumberParam.getEncryptedData());
// 加密秘钥
byte[] keyByte = Base64.decode(phoneNumberParam.getSession_key());
// 偏移量
byte[] ivByte = Base64.decode(phoneNumberParam.getIv());
try {
// 如果密钥不足16位,那么就补足. 这个if 中的内容很重要
int base = 16;
if (keyByte.length % base != 0) {
int groups = keyByte.length / base + (keyByte.length % base != 0 ? 1 : 0);
byte[] temp = new byte[groups * base];
Arrays.fill(temp, (byte) 0);
System.arraycopy(keyByte, 0, temp, 0, keyByte.length);
keyByte = temp;
}
// 初始化
Security.addProvider(new BouncyCastleProvider());
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
SecretKeySpec spec = new SecretKeySpec(keyByte, "AES");
AlgorithmParameters parameters = AlgorithmParameters.getInstance("AES");
parameters.init(new IvParameterSpec(ivByte));
cipher.init(Cipher.DECRYPT_MODE, spec, parameters);// 初始化
byte[] resultByte = cipher.doFinal(dataByte);
if (null != resultByte && resultByte.length > 0) {
String result = new String(resultByte, "UTF-8");
System.out.println(result);
return R.success(result);
}
} catch (Exception e) {
e.printStackTrace();
return R.error(e.toString());
}
return R.error();
}
版权声明:本文为weixin_45703665原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。