天天看點

微信小程式模闆消息接口下線了,不慌調用統一服務消息接口來實作

作者:是啊超ya
微信小程式模闆消息接口下線了,不慌調用統一服務消息接口來實作

1、前言

做過微信開發的應該都有一點感觸,就是他的開發文檔不是一成不變的,接口有時候會被下線,但也不是一下子就不能用了,一般會相容舊接口,然後提醒你使用新接口有更多好處。

如果接口真的直接下線了,也會提供另一種能夠實作相同功能的接口給你替換。是以有天你以為代碼都寫好了,沒有bug了,悠哉悠哉的時候,忽然産品經理說微信的哪個接口不能用了,快去改一下,不要驚訝,老老實實去改就對了哈。

這不,微信将小程式的模闆消息接口下線了,之前用formid來調這個接口的功能都就用不了了。

微信小程式模闆消息接口下線了,不慌調用統一服務消息接口來實作

看官方文檔提示,是提供了訂閱消息的功能來替換,顧名思義,要使用者主動訂閱了才可以發送成功,像下面這樣:

微信小程式模闆消息接口下線了,不慌調用統一服務消息接口來實作

除了這種訂閱消息外,還有沒有其他方法來實作同等效果呢,答案是of course。

翻閱小程式開發文檔發現,官方還提供了一個統一服務消息的接口。為便于開發者對使用者進行服務消息觸達,簡化小程式和公衆号模闆消息下發流程,小程式提供統一的服務消息下發接口。就是在小程式裡發送公衆号模闆消息,這個好處就是不需要formid的

要注意:以下幾類消息是目前不允許發的模闆消息

1、模闆内容與服務場景(含标題、關鍵詞)不一緻的模闆

2、涉嫌廣告營銷類消息模闆

3、發送頻率過高,有騷擾使用者傾向類消息模闆

4、涉及紅包、卡券、優惠券、代金券、會員卡、積分類消息模闆

微信小程式模闆消息接口下線了,不慌調用統一服務消息接口來實作

接下來我們就來實作下。

2、準備

調用這個接口的前提是公衆号和小程式有綁定且是同主體的,這個好辦,登入公衆号背景 -> 小程式 -> 小程式管理 -> 添加即可綁定小程式。

微信小程式模闆消息接口下線了,不慌調用統一服務消息接口來實作

因為實質上還是發的公衆号模闆消息,是以還是要在公衆号背景添加消息模闆擷取模闆id。

微信小程式模闆消息接口下線了,不慌調用統一服務消息接口來實作

3、開發

好了,做好以上兩個準備就可以開發了,主要代碼如下面:

/**
* 在小程式裡使用同主體的關聯公衆号發送模闆消息
* https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Template_Message_Interface.html
* @param vo
* @return   {"errcode":0,"errmsg":"ok"}   向沒有關注公衆号的使用者發送會傳回{"errcode":43004,"errmsg":"require subscribe hint: [LGcpYa05528672]"}
*/
public static JSONObject uniformSend(SendVo vo){
  boolean flag = false;
  JSONObject object = new JSONObject();
  JSONObject mpTemplateMsg = new JSONObject();
  JSONObject miniprogram = new JSONObject();
  String url = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/uniform_send?access_token="+vo.getToken();
  object.put("touser", vo.getToUser());
  mpTemplateMsg.put("appid", vo.getPublicAppId());
  mpTemplateMsg.put("url", vo.getUrl());
  mpTemplateMsg.put("template_id", vo.getTemplateId());
  miniprogram.put("appid",vo.getMiniAppId());
  miniprogram.put("pagepath",vo.getPagePath());
  mpTemplateMsg.put("miniprogram",miniprogram);
  List<String> list = vo.getValue();
  JSONObject jsonObject = null;
  if (list != null && list.size() > 0) {
    int size = list.size();
    JSONObject data = new JSONObject();
    for (int i = 0; i < size; i++) {
      if (i == 0) {
        JSONObject first = new JSONObject();
        first.put("value",list.get(0));
        first.put("color",vo.getColor());
        data.put("first",first);
      } else if (i == size-1) {
        JSONObject remark = new JSONObject();
        remark.put("value",list.get(0));
        remark.put("color",vo.getColor());
        data.put("remark",remark);
      } else {
        JSONObject keyword = new JSONObject();
        keyword.put("value",list.get(i));
        keyword.put("color",vo.getColor());
        data.put("keyword"+i,keyword);
      }
    }
    mpTemplateMsg.put("data",data);
    object.put("mp_template_msg",mpTemplateMsg);
    jsonObject = CommonUtil.httpsRequestJson(url, "POST", object.toJSONString());
    logger.info("統一消息推送模闆json======{}",jsonObject);
  }
  return jsonObject;
}

           

針對入參要說下mpTemplateMsg.put("data",data)裡面的data這個參數,它是first.DATA,

(keyword1.DATA,keyword2.DATA。。。),remark.DATA組成的,是以for循環裡面

拼接資料的時候要分三個,分别對應first.DATA,(keyword1.DATA,keyword2.DATA。。。),remark.DATA的字段值。

4、效果

微信小程式模闆消息接口下線了,不慌調用統一服務消息接口來實作