最近項目有需求須要用到微信小程序推送消息,在此記錄一下實驗過程。前端
在開始前,你須要準備:java
微信小程序發送消息主要經過WxMaTemplateMessage 類來推送web
public class WxMaTemplateMessage implements Serializable {
private String toUser; // 給誰推送(用戶openId)
private String templateId; // 消息ID
private String page; // 用戶點開消息跳轉到對應的小程序界面
private String formId; // 表單formId
private List<WxMaTemplateData> data; // 消息的數據列表
private String emphasisKeyword;
...
複製代碼
因此咱們在推送前須要構造這些信息,formId 和toUser(openId) 是從前端傳過來的。formId 能夠經過表單或者支付來獲取,表單比較簡單,只須要把report-submit 設置爲true 就能夠得到。spring
簡單經過微信開發者工具來獲取formId(openId 數據庫存了)數據庫
先創建一個前端項目,AppID 就是小程序的id,在微信公衆號後臺能夠看到。 小程序
修改index/index.js 和index.wxml (百度某位同窗的),經過表單來獲取formId ,併發送到後臺。微信小程序
// index.wxml
<form bindsubmit='registerFormSubmit' report-submit='true'>
<view class='buttons'>
<button class='confirmbtn' form-type='submit'>肯定</button>
</view>
</form>
<view>formid: {{formid}}</view>
<button bindtap='push'>
發送
</button>
複製代碼
//index.js
//獲取應用實例
const app = getApp()
Page({
data: {
formid: ""
},
//事件處理函數
registerFormSubmit: function (e) {
// 打印formId
console.log(e.detail.formId);
this.setData({
formid: e.detail.formId
})
},
//測試推送
push() {
let formid = this.data.formid;
let openid = 'oT-H-40ZHdRX1REZFKQhPg3jJZoQ';
wx.request({
url: 'http://localhost:8080/push?openId=' + openid + "&formId=" + formid,
success(res) {
console.log("推送結果:", res)
},
fail(err) {
console.log("推送失敗:", err)
}
})
}
})
複製代碼
這裏formid 在測試的時候獲取不到,調到真機調試,或者用預覽就好了。
import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
import cn.binarywang.wx.miniapp.bean.WxMaTemplateData;
import cn.binarywang.wx.miniapp.bean.WxMaTemplateMessage;
import cn.binarywang.wx.miniapp.config.WxMaInMemoryConfig;
import me.chanjar.weixin.common.error.WxErrorException;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
@RestController
public class PushController {
@GetMapping("/push")
public String push(@RequestParam String openId, @RequestParam String formId) {
//1,配置小程序信息
WxMaInMemoryConfig wxConfig = new WxMaInMemoryConfig();
wxConfig.setAppid("你的appId");
wxConfig.setSecret("你的secret");
WxMaService wxMaService = new WxMaServiceImpl();
wxMaService.setWxMaConfig(wxConfig);
//2,設置模版信息(keyword1:類型,keyword2:內容)
List<WxMaTemplateData> templateDataList = new ArrayList<>(2);
WxMaTemplateData data1 = new WxMaTemplateData("keyword1", "獲取老師微信");
WxMaTemplateData data2 = new WxMaTemplateData("keyword2", "2501902696");
WxMaTemplateData data3 = new WxMaTemplateData("keyword3", "2501902696");
WxMaTemplateData data4 = new WxMaTemplateData("keyword4", "2501902696");
templateDataList.add(data1);
templateDataList.add(data2);
templateDataList.add(data3);
templateDataList.add(data4);
//3,設置推送消息
WxMaTemplateMessage templateMessage = WxMaTemplateMessage.builder()
.toUser(openId)
.formId(formId)
.templateId("你的消息id") // 在微信公衆號後臺能夠申請消息模版
.data(templateDataList)
.page("pages/index/index")
.build();
//4,發起推送
try {
wxMaService.getMsgService().sendTemplateMsg(templateMessage);
} catch (WxErrorException e) {
System.out.println("推送失敗:" + e.getMessage());
return e.getMessage();
}
return "推送成功";
}
}
複製代碼
一個簡單的小程序推送demo ,權侵刪api