微信小程序开通消息推送

1. 登录微信公众平台——开发管理——启用消息推送

2. 微信扫码确认开启

3. 可查看消息推送配置指南,并获取测试工具(或直接跳过,直接操作下列操作)

4. 编写接口(微信消息推送需要验证请求的合法性)

① 项目中yml中配置微信配置,如下

appId和appSecret都可以从公众平台上获取,在开发管理-开发者ID里面

token自己随便定义(必须为英文或数字,长度为3-32字符),待会要配置到消息推送的配置中

②编写微信工具类
@Service
public class WxService {
    private static final Logger log = LoggerFactory.getLogger(WxService2.class);

    @Autowired
    private RedisService redisService;

    @Value("${wx.appId}")
    private  String appId;

    @Value("${wx.appSecret}")
    private  String appSecret;

    @Value("${wx.token}")
    private String token;

    private static RestTemplate restTemplate = new RestTemplate();


    /**
     * 获取access_token,每个公众账号一天请求2000次Access_Token
     * @return
     */
    public String getAccessToken() {
        String accessToken = (String) redisService.getKey("wxAccessToken");
        if (StringUtils.isBlank(accessToken)) {
            String interfaceUrl = "https://api.weixin.qq.com/cgi-bin/token";
            String url = interfaceUrl + "?grant_type=client_credential" + "&appid=" + appId + "&secret=" + appSecret;
            String result = restTemplate.getForObject(url, String.class);
            JSONObject entries = JSONUtil.parseObj(result);
            log.info("access_token:{}", entries);
            accessToken = entries.getStr("access_token");
            if (StringUtils.isNotBlank(accessToken)) {
                redisService.setKey("wxAccessToken", accessToken, 1L, TimeUnit.HOURS);
            }
        }
        log.info("accessToken:{}", accessToken);
        return accessToken;
    }


    /**
     * 消息推送配置 验证请求的合法性
     * @param signature
     * @param timestamp
     * @param nonce
     * @return
     */
    public boolean checkSignature( String signature, String timestamp, String nonce) {
        // 小程序消息推送自己配置的token
        log.info("验证token:{}" + token);
        String[] arr = new String[]{token, timestamp, nonce};
        // 将token、timestamp、nonce三个参数进行字典序排序
        Arrays.sort(arr);
        // 将排序后的结果拼接成一个字符串
        String content = String.join("", arr);
        try {
            //获取加密工具
            MessageDigest sha1 = MessageDigest.getInstance("SHA-1");
            // 使用SHA-1加密
            byte[] hashBytes = sha1.digest(content.getBytes());
            //将字节数组转换为十六进制字符串
            StringBuilder hexString = new StringBuilder();
            for (byte b : hashBytes) {
                String hex = Integer.toHexString(0xff & b);
                if (hex.length() == 1) hexString.append('0');
                hexString.append(hex);
            }
            log.info("加密后signature:{}", hexString);
            // 将加密后的字符串与微信服务器提供的签名进行对比
            return hexString.toString().equals(signature);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        // 如果签名不匹配,则返回false
        return false;
    }
}
③编写controller
@Api(tags = "微信相关接口")
@RequestMapping("/wx")
@RestController
@Validated
public class WxController {

    @Autowired
    private WxService wxService;

    @ApiOperation("微信消息配置验证")
    @GetMapping("/mesRecive")
    public String mesRecive(String signature, String timestamp, String nonce, String echostr) {
        //消息合法
        if (wxService.checkSignature(signature, timestamp, nonce)) {
            return echostr;
        }
        return null;
    }
}

5. 部署到服务器,使用官方工具测试接口

微信调试工具
AccessToken:可以参考 微信工具类getAccessToken()方法

URL(服务器地址):必须以http://或https://开头,分别支持80端口和443端口,填写接口路径

Token:就刚刚项目中配置的token

 

6. 测试工具验证结果成功后,填写消息推送配置(如果超时,回到启用页面重新开启然后填写配置)

若是URL和Token填写不正确,会提交不了

7. 开通成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值