你知道如何在小程序中推送模板消息? (2)

首先需要把 formId 收集起来存到数据库,那么就需要检查每个请求,看 header 中有没有携带 formId,如果有就存到数据库中,注意要和用户对应起来,某个用户点击产生的 formId 只能用于给这个用户推送消息。

因为要将 formId 和用户绑定起来,因此我是在身份认证过滤器中进行的 formId 处理,身份认证成功后,处理 formId。代码如下:

/** * Description: 从请求头中获取formIdList,并插入数据库 * * @param request 请求头 * @return void * @author fanxb * @date 2019/5/6 16:39 */ private void checkFormId(HttpServletRequest request) { String str = request.getHeader(Constant.HEADER_FORM_ID); if (StringUtil.isEmpty(str)) { return; } List<FormKey> formKeyList = JSON.parseArray(str, FormKey.class); //UserContextHolder用户将当前线程和用户绑定起来,方便后面获取用户信息 int userId = UserContextHolder.get().getUser().getUserId(); formKeyList.forEach(item -> item.setUserId(userId)); this.formKeyDao.insertMany(formKeyList); } 发送微信提醒

通过官方文档可以知道发送消息的流程如下:

1 获取 accessToken,调用微信的大多数接口都需要这个东西,这个通过 appId 和 secret 来获取。详情参见:https://developers.weixin.qq.com/miniprogram/dev/api-backend/auth.getAccessToken.html

2 调用微信发送服务通知的接口.这个接口文档在:点击跳转

最终发送的 http 请求是这样的:

url: https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=上面获取的accessToken method: post 请求体格式为:application/json; charset=utf-8 body:{ "touser": "用户的openId", "template_id": "模板id", "page": "点击跳转的小程序url路径", "form_id": "收集到的formId", "data": { "keyword1": { "value": "您有一个信息的提示消息" }, "keyword2": { "value": "这是消息内容" } }, "emphasis_keyword": "keyword1.DATA" }

data 中的数据的按照顺序 keyword1,keyword2 对应于模板中字段的顺序。

结束

工程全部源码在这里:github

PS
这就是那个小程序,欢迎批评指正。

小程序

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpyfzp.html