微信公众号,信息接口配置, 回调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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。