微信公众号,信息接口配置, 回调URL, java demo
2023-12-14 19:54:36
1、微信接口回调URL?
? ? ? ? a、微信回调接口为:GET? 类型
? ? ? ? b、微信回调接口传参类型:content-type? ? 为?? application/json
校验方法: 其中 tokenStr 是自定义的token , 和 微信信息接口配置 中的token 一致。
public static boolean isToken(NotifyVo vo,String tokenStr){ String token = tokenStr; String[] tmpArr = {token, vo.getTimestamp(), vo.getNonce()}; Arrays.sort(tmpArr); String tmpStr = String.join("", tmpArr); tmpStr = sha1(tmpStr); return tmpStr.equals(vo.getSignature()); } private static String sha1(String input) { try { MessageDigest md = MessageDigest.getInstance("SHA-1"); byte[] digest = md.digest(input.getBytes()); StringBuilder sb = new StringBuilder(); for (byte b : digest) { sb.append(String.format("%02x", b)); } return sb.toString(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); return null; } }
若依框架接口代码:
/**
* 微信公众号通知
*/
@ApiOperation(value = "微信公众号通知")
@ApiResponses(value = { @ApiResponse(code = 200, message = "成功")})
@GetMapping("/notifyResult2")
public String notifyResult2(NotifyVo vo)
{
try {
// 封装NotifyVo对象的属性到JSONObject对象中
JSONObject jsonObject = new JSONObject();
jsonObject.put("signature",vo.getSignature());
jsonObject.put("timestamp",vo.getTimestamp());
jsonObject.put("nonce",vo.getNonce());
jsonObject.put("echostr",vo.getEchostr());
// 验证签名
if (isToken(vo,WeiXinConfig.selfToken)){
// 签名验证通过,保存JSONObject对象到数据库,并返回echostr属性值
WeixinNotifyResult weixinNotifyResult = new WeixinNotifyResult();
weixinNotifyResult.setNotifyTxt(jsonObject.toJSONString());
weixinNotifyResult.setCreateTime(new Date());
weixinNotifyResult.setIsDeal(IsDealStatus.已处理.getValue());
weixinNotifyResultService.save(weixinNotifyResult);
return vo.getEchostr();
}else {
// 签名验证不通过,保存JSONObject对象到数据库,并返回echostr属性值后加上字符"A"
WeixinNotifyResult weixinNotifyResult = new WeixinNotifyResult();
weixinNotifyResult.setNotifyTxt(jsonObject.toJSONString());
weixinNotifyResult.setIsDeal(IsDealStatus.处理异常.getValue());
weixinNotifyResult.setCreateTime(new Date());
weixinNotifyResultService.save(weixinNotifyResult);
return vo.getEchostr()+"A";
}
}catch (Exception e){
// 发生异常,返回空字符串
log.error("接受微信通知失败",e);
return "";
}
}
// 验证签名是否正确
public static boolean isToken(NotifyVo vo,String tokenStr){
String token = tokenStr;
String[] tmpArr = {token, vo.getTimestamp(), vo.getNonce()};
Arrays.sort(tmpArr);
String tmpStr = String.join("", tmpArr);
tmpStr = sha1(tmpStr);
return tmpStr.equals(vo.getSignature());
}
// 对字符串进行SHA-1哈希计算
private static String sha1(String input) {
try {
MessageDigest md = MessageDigest.getInstance("SHA-1");
byte[] digest = md.digest(input.getBytes());
StringBuilder sb = new StringBuilder();
for (byte b : digest) {
sb.append(String.format("%02x", b));
}
return sb.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return null;
}
}
文章来源:https://blog.csdn.net/TaLinBoy/article/details/135000786
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!