1、創建消息模板
在公共模板庫里面選擇符合自己業務場景的消息模板,例如:
每個消息模板最多選擇5項,可根據自己業務需求自行選擇,順序也可以自己決定。提交后,我們就得到了屬于自己的消息模板ID
2、文檔閱讀
官方文檔 發送訂閱消息
https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/mp-message-management/subscribe-message/sendMessage.html
可以關注到消息模板中每種參數的類型有明確的規定
參數類別 | 參數說明 | 參數值限制 | 說明 |
---|---|---|---|
thing.DATA | 事物 | 20個以內字符 | 可漢字、數字、字母或符號組合 |
number.DATA | 數字 | 32位以內數字 | 只能數字,可帶小數 |
letter.DATA | 字母 | 32位以內字母 | 只能字母 |
symbol.DATA 符號 | 5位以內符號 | 只能符號 | |
character_string.DATA | 字符串 | 32位以內數字、字母或符號 | 可數字、字母或符號組合 |
time.DATA | 時間 | 24小時制時間格式(支持+年月日),支持填時間段,兩個時間點之間用“~”符號連接 | 例如:15:01,或:2019年10月1日 15:01 |
date.DATA | 日期 | 年月日格式(支持+24小時制時間),支持填時間段,兩個時間點之間用“~”符號連接 | 例如:2019年10月1日,或:2019年10月1日 15:01 |
amount.DATA | 金額 | 1個幣種符號+10位以內純數字,可帶小數,結尾可帶“元” | 可帶小數 |
phone_number.DATA | 電話 | 17位以內,數字、符號 | 電話號碼,例:+86-0766-66888866 |
car_number.DATA | 車牌 | 8位以內,第一位與最后一位可為漢字,其余為字母或數字 | 車牌號碼:粵A8Z888掛 |
name.DATA | 姓名 | 10個以內純漢字或20個以內純字母或符號 | 中文名10個漢字內;純英文名20個字母內;中文和字母混合按中文名算,10個字內 |
phrase.DATA | 漢字 | 5個以內漢字 | 5個以內純漢字,例如:配送中 |
enum.DATA | 枚舉值 | 只能上傳枚舉值范圍內的字段值 | 調用接口獲取參考枚舉值 |
符號表示除中文、英文、數字外的常見符號,不能帶有換行等控制字符。 時間格式支持HH:MM:SS或者HH:MM。 日期包含年月日,為y年m月d日,y年m月、m月d日格式,或者用‘-’、‘/’、‘.’符號連接,如2018-01-01,2018/01/01,2018.01.01,2018-01,01-01。 每個模板參數都會以類型為前綴,例如第一個數字模板參數為number01.DATA,第二個為number02.DATA
例如,模板的內容為:
姓名: {{name01.DATA}}
金額: {{amount01.DATA}}
行程: {{thing01.DATA}}
日期: {{date01.DATA}}
則對應的json為
{"touser": "OPENID","template_id": "TEMPLATE_ID","page": "index","data": {"name01": {"value": "某某"},"amount01": {"value": "¥100"},"thing01": {"value": "廣州至北京"} ,"date01": {"value": "2018-01-01"}}
}
3、發送消息
import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.bean.WxMaSubscribeMessage;
import cn.binarywang.wx.miniapp.constant.WxMaConstants;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.error.WxErrorException;
import org.springframework.stereotype.Service;import java.util.ArrayList;
import java.util.List;@Slf4j
@Service
@RequiredArgsConstructor
public class WxMaMsgServiceImpl {private final WxMaService wxMaService;public void sendSubscribeMsg(WxMaSubscribeMessage reqVO) throws WxErrorException {WxMaSubscribeMessage message = new WxMaSubscribeMessage();message.setToUser("用戶openId");message.setTemplateId("消息模板id");// 非必填message.setPage("點擊模板卡片后的跳轉頁面,僅限本小程序內的頁面");// 模板內容List<WxMaSubscribeMessage.MsgData> data = new ArrayList<>();data.add(new WxMaSubscribeMessage.MsgData("thing13", "美甲"));data.add(new WxMaSubscribeMessage.MsgData("phrase9", "預約成功"));data.add(new WxMaSubscribeMessage.MsgData("time22", "2025年06月18日 14:00"));data.add(new WxMaSubscribeMessage.MsgData("time23", "2025年06月18日 16:00"));data.add(new WxMaSubscribeMessage.MsgData("thing8", "已預約成功請注意查看"));message.setData(data);// 體驗版reqVO.setMiniprogramState(WxMaConstants.MiniProgramState.TRIAL);// 正式版// reqVO.setMiniprogramState(WxMaConstants.MiniProgramState.FORMAL);wxMaService.getSubscribeService().sendSubscribeMsg(reqVO);}
}
4、前端訂閱
const noticeRes = await wx.requestSubscribeMessage({tmplIds: ['消息模板id1', '消息模板id2']
})
let acceptArray = []
// 消息1同意
if (noticeRes['消息模板id1'] === 'accept') {acceptArray.push('消息模板id1')
}
// 消息2同意
if (noticeRes['消息模板id2'] === 'accept') {acceptArray.push('消息模板id2')
}
然后把用戶同意訂閱的消息模板id傳到后端,后端根據業務場景給用戶發送對應的訂閱消息即可。
如您在閱讀中發現不足,歡迎留言!!!