零、前言
上一次做消息推送,是微信公众号的定时消息通知。
由于自己当时的水平不够,加上企鹅家的开发文档普遍不太友好,导致根本看不懂文档在写什么,不得不去看第三方博客来学习公众号的开发。
这次就不一样了,昨天刚看了一下,阿里的开发文档比鹅厂要清晰的多,而且在同一功能上,使用了多种语言作为示例代码,可以说很友好了。可能这就是阿里和鹅厂的区别吧...辣鸡文档和好文档的区别...
本着“授之以渔”的态度,写了这篇文章,作为官方文档的补充。
一、在群里添加机器人
在群设置的智能群助手中添加自定义机器人,它长这个样子:
比较关键的一步,是进行安全设置。
加密方式一共有三种,既可以选择一种也可以使用多种方式组合:
自定义关键词
加签
IP地址
为了让博客起到效果,我们选择相对安全、也比较难的加签方式。
选择加签之后,把密钥复制出来,然后就可以点确定了。
二、构建请求地址和内容
先看看官方文档怎么描述加签的:
第一步,把timestamp+"\n"+密钥当做签名字符串,使用HmacSHA256算法计算签名,然后进行Base64 encode,最后再把签名参数再进行urlEncode,得到最终的签名(需要使用UTF-8字符集)。
第二步,把 timestamp和第一步得到的签名值拼接到URL中。
官方的解释很高大上,其实原理很简单,就是把机器人密钥加密后,放在URL的参数中,所以我们需要分别获取时间戳和密钥,组合一下,加密一下,再拼接一下就好了,如图:
I have a Pen,
I have an Apple,
Oh~ Applepen~
官方给出了这样的示例代码:
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
import java.net.URLEncoder;
public class Test {
public static void main(String[] args) throws Exception {
Long timestamp = System.currentTimeMillis();
String secret = "this is secret";
String stringToSign = timestamp + "\n" + secret;