高能预警
- 各位读者食用本前需要申请一个 微信公众平台的测试号 或 公众号,本文使用测试号进行演示;
- 推送一条模板消息的流程是:使用 appID+appsecret 获取 access_token,再使用 access_token 获取关注本公众号的列表,最后也是需要使用 access_token 向用户发送拼装好的消息(模板消息)内容;
- 重要的第三方库:cron(定时任务)/ 微信官方文档。
准备工作
appID 和 appsecret
通过登录微信公众平台,可以看到我们专属的 appID 和 appsecret。

一些接口
获取 access_token
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=你自己的appID&secret=你自己的appsecret
该请求会返回一个 JSON 对象:
{"access_token": "一个你自己的且需要保管好的access_token","expires_in": 7200}
其中,access_token 是根据你的 appID+appsecret 生成的,expires_in 表示过期时间,单位为秒。
获取关注者列表
https://api.weixin.qq.com/cgi-bin/user/get?access_token=通过上小节获得的access_token
该请求会返回一个 JSON 对象:
{"total": 2,"count": 2,"data": {"openid": ["关注者1","关注者2"]},"next_openid": "o3sQy6RnyeWSWoOC0WfzbDyTJ_2E"}
我们需要利用获取到的 openid 内的内容来给指定关注者发送消息。
正文
获取 access_token
直接上代码:
func getAccessToken() string {url := fmt.Sprintf("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%v&secret=%v", AppId, AppSecret)resp, err := http.Get(url)if err != nil {fmt.Println("Get access_token failed:", err)return ""}defer resp.Body.Close()body, err := ioutil.ReadAll(resp.Body)if err != nil {fmt.Println("Read access_token response body failed:", err)return ""}accessToken := AccessToken{}err = json.Unmarshal(body, &accessToken)if err != nil {fmt.Println("Parse access_token failed:", err)return ""}return accessToken.AccessToken}
获取关注者列表
func getFollowersList(accessToken string) []gjson.Result {url := "https://api.weixin.qq.com/cgi-bin/user/get?access_token=" + accessTokenresp, err := http.Get(url)if err != nil {fmt.Println("Get followers list failed:", err)return nil}defer resp.Body.Close()body, err := ioutil.ReadAll(resp.Body)if err != nil {fmt.Println("Read followers list response body failed", err)return nil}followersList := gjson.Get(string(body), "data.openid").Array()return followersList}
这里我们采用 gjson 库,直接获取我们所需要的 json 内的属性,并返回一个数组。
