当前位置:   article > 正文

微信小程序发送模版消息推送_微信公众号若依

微信公众号若依

一、前言

微信小程序现在成为了增长模式的宠儿,小程序的便利想必看这篇博客的各位都已经了解到了,本篇呢主要介绍小程序召回模式里面的消息push。

其中里面涉及的关键词:

templateId:小程序运营人员申请模版消息时生成的一个标示,后续推送时会使用。

formId:微信推送时给用户的标示,用一次就失效,这个是在小程序端通过表单获取。

accessToken:通过用户验证登录和授权,获取Access Token,为下一步获取用户的OpenID做准备。

openId:在本小程序内用户的唯一标示。

page:指定召回时点击跳转的页面。

content:这个是根据模版定义出来的任务内容。


二、需求场景

  小程序的推送依赖于用户在小程序端的触发点击,可以在点击处收集用户的formId,后续服务端可以用formId给用户推送消息产生召回。我们这边有一个流量较大的小程序,通过这种召回模式可以达到老用户30%的活跃和粘性,比未用推送前增加了许多,但是也要控制好消息push的频率,以免打扰用户;另外一点就是单纯的通知,比如下单通知,支付成功通知之类的,这些用微信收银台支付或者提现的话微信会为你做这件事情。

三、后台准备
  

      1.首先要在微信公众平台上注册小程序,并且登录

微信公共平台

    2.然后在 功能 里面可以看到订阅消息,模版消息之类,点击申请模版,这个需要审核,会得到一个模版ID,这个后续发送时使用

模版消息

 生成的模版样式:

  1. "keyword1": {
  2. "value": "keyword1",
  3. "color": "#4a4a4a"
  4. },
  5. "keyword2": {
  6. "value": "keyword2",
  7. "color": "#9b9b9b"
  8. },
  9. "keyword3": {
  10. "value": "keyword3",
  11. "color": "red"
  12. }

四、前端收集formId

  前端通过form表单收集formId,这个是推送给用户的唯一标示

  1. <form name='pushMsgFm' report-submit='true' bindsubmit='getFormID'>
  2. <button form-type="submit" class="zan-btn zan-btn--large zan-btn--danger payButton">支付</button>
  3. </form>
  1. getFormID: function (e) {
  2. this.setData({
  3. formId: e.detail.formId }) }

以上是获取formId

五、服务端(java)发送消息

1.获取accessToken参考我的本目录一片文章《通过appId和secret获取accessToken》。

2.获取openId参考我的本目录一篇文章《通过微信的code获得微信的openId》。

3.发送小程序的代码

调用顺序依次是从上往下,其中这部分只是告诉大家怎么发送,对于策略问题就需要自己完成了,比如针对多久发一次,收集的频率和位置,是否需要统计召回率,是否需要定时push,以及运营平台化,可视化。

    a.需要引入jar maven坐标

  1. <dependency>
  2. <groupId>org.apache.httpcomponents</groupId>
  3. <artifactId>httpcore</artifactId>
  4. <version>4.4.3</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.apache.httpcomponents</groupId>
  8. <artifactId>httpclient</artifactId>
  9. <version>4.4</version>
  10. </dependency>

   b.各业务发送消息push做隔离的方式,距离感说明,支持多个小程序

  1. /**
  2. * 消息push
  3. * @param code 参考获取微信code的方法
  4. */
  5. private void pushMiniProgramMessage(String formId, String code){
  6. //获取openId
  7. String openid = checkParamAndGetOpenid(code);
  8. if(StringUtils.isBlank(formId)){
  9. return;
  10. }
  11. Map<String, String> content = new HashMap<>();
  12. content.put("keyword1","恭喜邀请三位好友");
  13. content.put("keyword2", "快来领取奖品吧");
  14. //biz自定义用户进行渠道隔离
  15. sendWexinMsg(biz,templateId,openId,"pages/index/index",formId,content);
  16. }

    c.不管你的模版格式是什么这个取决于前面那个方法的模版定义,这个方法不需要改动直接就适配

  1. /**
  2. * 发送微信小程序通知
  3. * @param templateId 在公众号后台申请的模版ID
  4. * @param biz 进行业务隔离时使用和发送无关
  5. * @param openId 参考获取openID的那篇文章
  6. * @param formId 前端报送过来的formId用一次失效
  7. * @param page 用户在点击push的消息回调的地址
  8. * @param parmContent 需要发送的内容这个格式要与微信申请的模版一致
  9. */
  10. public void sendWexinMsg(String biz ,String templateId, String openId,String page,String formId, Map<String, String> parmContent){
  11. LOGGER.info("发送微信小程序通知入参openId=",openId," ,formId=",formId);
  12. Map<String, Map<String, String>> content = new HashMap<>();
  13. if(parmContent != null && parmContent.size()>0){
  14. for(int i=0;i<=parmContent.size();i++){
  15. String key="keyword"+i;
  16. if(parmContent.containsKey(key)){
  17. String value=parmContent.get(key);
  18. Map<String, String> map = new HashMap<>();
  19. map.put("value",value);
  20. content.put(key,map);
  21. }
  22. }
  23. }
  24. //其中下面这两行可以参考获取accessToken的代码
  25. String url=WeixinConfigConstans.getToken_url;
  26. String accessToken = WeChatUtils.getAccessToken(url);
  27. LOGGER.info("发送微信小程序openId=",openId," ,accessToken=",accessToken," ,参数parmContent=",FastJsonUtils.toJSONNoFeatures(parmContent));
  28. sendWxTemplateMsg(openId, templateId, formId, page, accessToken, content);
  29. }

d.组装消息格式发送消息

  1. /**
  2. * 发送微信模版消息
  3. */
  4. public static void sendWxTemplateMsg(String openId, String template_id, String form_id, String page, String accessToken, Map<String, Map<String, String>> data){
  5. String sendMsgUrl="https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=";
  6. if(openId == null || openId.equals("")){
  7. logger.info("openId 为空 发送消息失败");
  8. return;
  9. }
  10. String url =sendMsgUrl + accessToken;
  11. JSONObject postContent = new JSONObject();
  12. postContent.put("touser", openId);
  13. postContent.put("template_id", template_id);
  14. postContent.put("page", page);
  15. postContent.put("form_id", form_id);
  16. postContent.put("data", data);
  17. String responseStr = httpsPostResponseAsString(url, postContent);
  18. logger.info("微信服务通知发送结果: ", responseStr);
  19. }

  e.调用httpclient做post请求

  1. /**
  2. * https post请求
  3. * @param url 请求链接
  4. * @param params 请求参数
  5. * @return 数据按照字符串形式
  6. */
  7. public static String httpsPostResponseAsString(String url, JSONObject params){
  8. PostMethod httpPost = null;
  9. try {
  10. LOGGER.info("https post 请求开始 url = ", url, " params = ", FastJsonUtils.toJSONString(params));
  11. httpPost = getHttpPost(url, params);
  12. int statusCode = httpPost.getStatusCode();
  13. if(statusCode != 200){
  14. LOGGER.error("返回码异常 statusCode: " + statusCode);
  15. return null;
  16. }
  17. return httpPost.getResponseBodyAsString();
  18. } catch (IOException e) {
  19. LOGGER.error("https post 请求失败 url = ", url);
  20. }finally {
  21. if (httpPost != null) {
  22. httpPost.releaseConnection();
  23. }
  24. }
  25. return null;
  26. }

六、感悟

    在人口红利消退的下半场,用户增长是公共难题。硅谷出现了“Growth Hacker”,中国出现了“精细化运营”,两岸不约而同的出现了以数据为基础,以人工智能为抓手的新增长模式。潜客发掘,流失召回,用户留存,状态跃迁,一批新的模型被定义出来,成为先进增长模式的关键词。流量为王的时代还没有过去,与君共勉。

 

注:有些技术细节不便在本文中展示体现,如有问题可以评论私信,必有回响。
 

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号