<button open-type="getPhoneNumber" bindgetphonenumber= "getPhoneNumber" >获取电话</button>
getPhoneNumber: function (e) {
var that = this;
console.log(e.detail.errMsg)
console.log(e.detail.iv)
console.log(e.detail.encryptedData)
if (e.detail.errMsg == 'getPhoneNumber:fail user deny') {
wx.showModal({
title: '提示',
showCancel: false,
content: '未授权',
success: function (res) { }
})
} else {
wx.login({
success: function (code) {
that.getPhone(code.code, e.detail.iv, e.detail.encryptedData)
}
})
wx.showModal({
title: '提示',
showCancel: false,
content: '同意授权',
success: function (res) { }
})
}
},
getPhone: function (loginCode, iv, encryptedData){
common.getRequestSyn2('/mini-program/getPhoneNumber.json', { code: loginCode, iv: iv, encryptedData: encryptedData }, true,
function (res) {
if (res.data.success) {
console.log(res)
}
})
},
@RequestMapping("/getPhoneNumber.json")
@ResponseBody
public JSONResult getPhoneNumber(@RequestParam String code,
@RequestParam String encryptedData,
@RequestParam String iv) {
String appId = "";//miniProgramSettings.getAppId();
String appSecret = "";//miniProgramSettings.getAppSecret();
StringBuilder sb = new StringBuilder();
sb.append("https://api.weixin.qq.com/sns/jscode2session");
sb.append("?appid=").append(appId);
sb.append("&secret=").append(appSecret);
sb.append("&js_code=").append(code);
sb.append("&grant_type=authorization_code");
logger.debug("url : " + sb.toString());
SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
RestTemplate restTemplate = new RestTemplate(factory);
String jsonStr = restTemplate.getForEntity(sb.toString(), String.class).getBody();
JSONResult result = JSONResult.fail(null);
try {
ObjectMapper mapper = new ObjectMapper();
JsonNode node = mapper.readTree(jsonStr);
if (node.isContainerNode() && node.has("openid")) {
String sessionKey = node.get("session_key").asText();
String openId = node.get("openid").asText();
int expiresIn = node.get("expires_in").asInt();
AES aes = new AES();
byte[] resultByte = aes.decrypt(Base64.decodeBase64(encryptedData), Base64.decodeBase64(sessionKey), Base64.decodeBase64(iv));
if(null != resultByte && resultByte.length > 0){
String userInfo = new String(resultByte, "UTF-8");
String phone = "";
JsonNode nodePhone = mapper.readTree(userInfo);
if (nodePhone.isContainerNode() && nodePhone.has("purePhoneNumber")) {
phone = nodePhone.get("purePhoneNumber").asText();
}
result.setSuccess(true);
result.setContent(phone);
} else {
logger.warn("decrypt failed!");
}
} else {
logger.warn(jsonStr);
}
} catch (IOException e) {
e.printStackTrace();
result.setMessage(e.getMessage());
} catch (InvalidAlgorithmParameterException e) {
e.printStackTrace();
result.setMessage(e.getMessage());
}
return result;
}