栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

微信消息推送配置详解 JAVA后端版本

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

微信消息推送配置详解 JAVA后端版本

最近公司做小程序需要用到消息推送,笔者在一路采坑做完后几个笔记,希望能帮到大家少采坑。

如果你连小程序都没有注册也没有做,那就不要继续看了。。。。。。。

微信官方文档:  微信消息推送      微信小程序订阅消息


 一、加上依赖
        
        
            commons-codec
            commons-codec
            1.9
        

入架包commons-codec-1.9(或commons-codec-1.8等其他版本)

否则在base64 操作上 会报 Last encoded character (before the paddings if any) is a valid base 64 alpha 的错


二、编写验证URL代码

微信消息推送工具类

import java.security.MessageDigest;
import java.util.Arrays;

public class WXMsgPushUtils {

    
    public static String getSHA1(String... values) throws Exception {

        try {
            String[] array = new String[values.length];
            for (int i = 0; i < values.length; i++) {
                array[i] = values[i];
            }

            StringBuffer sb = new StringBuffer();
            // 字符串排序
            Arrays.sort(array);
            for (int i = 0; i < values.length; i++) {
                sb.append(array[i]);
            }
            String str = sb.toString();
            // SHA1签名生成
            MessageDigest md = MessageDigest.getInstance("SHA-1");
            md.update(str.getBytes());
            byte[] digest = md.digest();

            StringBuffer hexstr = new StringBuffer();
            String shaHex = "";
            for (int i = 0; i < digest.length; i++) {
                shaHex = Integer.toHexString(digest[i] & 0xFF);
                if (shaHex.length() < 2) {
                    hexstr.append(0);
                }
                hexstr.append(shaHex);
            }
            return hexstr.toString();
        } catch (Exception e) {
            e.printStackTrace();
            throw new Exception("SHA1加密失败");
        }

    }
}

验证URL接口

import WXMsgPushUtils;
import org.springframework.web.bind.annotation.*;

import java.util.Map;


@RestController
@RequestMapping("weixinpublic")
public class WxMsgPushController {

    
    @GetMapping("/verify")
    public String verifyUrl(@RequestParam Map params) throws Exception {
        // 微信发送的请求中 会有四个参数
        // 微信加密签名,signature结合了开发者填写的 token 参数和请求中的 timestamp 参数、nonce参数。
        String signature = params.get("signature");
        // 随机字符串
        String echostr = params.get("echostr");
        // 时间戳
        String timestamp = params.get("timestamp");
        // 随机数
        String nonce = params.get("nonce");

        // 消息推送配置中的 Token(令牌)
        String token = "DTBKyB0CUmZEMpnU";

        // 验证
        String msgSignature = WXMsgPushUtils.getSHA1(token, timestamp, nonce);

        // 验证失败
        if (!signature.equals(msgSignature)) {
            return "false";
        }
        // 验证成功 将 echostr 原格式返回 ,即可完成验证
        return echostr;
    }
}

题外话。。。。微信官方给的文档说明是三个参数加密,但是下载得到的java 官方demo 加密参数是4个,不知道为啥。。。。浪费了半天时间

但是官方文档上写的 又是三个参数

 

最后删除 掉demo中的一个参数 测试成功. 


 三、登录微信平台,配置消息推送,验证URL  

 URL地址为项目推送的接口地址,即 微信官方会像这个接口地址发送GET请求,验证接口以及验证消息的确来自微信服务器,所以需要配置上服务器的接口地址(需要单独写一个接口来验证)

Token :自定义任意满足微信规则的字符,记录下来验证接口中会用到

EncodingAESKey:我是点击随机生成的,大家也可按需操作,一个月只能修改三次

加密方式、数据格式 大家按需就好不会影响验证 URL

完成代码的编写和这边的配置,确定好两边 Token一致,点击提交即可完成配置

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/940819.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号