Java實現微信小程序模板推送

實現小程序推送 需要以下配置信息:
1,小程序appid
2,小程序AppSecret(密匙)
3,小程序推送模版id
4,用戶的openid
5,用戶的formid(一個formid只能用一次)

APPID、APPsecret、模板ID 都是可以通過微信公衆平臺 直接過去拿到的,而openId是需要調用方 傳給我們。formId 是收集用戶觸發的動作,官方文檔講formId的有效期是7天,且一個formId只能使用一次。
獲取APPID和APPsecret
模板消息信息


/**
* 微信小程序模板推送實現
* @author lbh
* @date 2019/11/14 17:20
* @desc
*/


@Service
public class WecharPushTemplateService {


    /**
     * 小程序 APPID
     */
    @Value("${APP_ID_NEW}")
    private String appIdNew;


    /**
     * 小程序 AppSecret
     */
    @Value("${APP_SECRET_NEW}")
    private String appSecretNew;


    /**
     * 收益到賬通知模板ID
     */
    @Value("${APP_INCOMETOACCOUNT_MESSAGE_TEMPLATEID}")
    private String incomeToAccountTemplateId;


    /**
     * 審覈結果通知模板ID
     */
    @Value("${APP_CHECKRESULT_MESSAGE_TEMPLATEID}")
    private String checkResultTemplateId;


    @Autowired
    private WecharUserFormIdService userFormIdService;


    /**
     * 審覈結果通知
     * @param pushModel
     * @return
     */
    public String pushCheckResult(WecharMessagePushModel pushModel) {
        //1、配置小程序信息
        WxMaInMemoryConfig wxConfig = new WxMaInMemoryConfig();
        wxConfig.setAppid(appIdNew); //小程序appid
        wxConfig.setSecret(appSecretNew); //小程序AppSecret


        WxMaService wxMaService = new WxMaServiceImpl();
        wxMaService.setWxMaConfig(wxConfig);


        //2、設置模版信息(keyword1:類型,keyword2:內容)
        List<WxMaTemplateData> templateDataList = new ArrayList<>(5);
        WxMaTemplateData data1 = new WxMaTemplateData("keyword1", pushModel.getCheckResult());
        WxMaTemplateData data2 = new WxMaTemplateData("keyword2", pushModel.getRefusalReason());
        WxMaTemplateData data3 = new WxMaTemplateData("keyword3", pushModel.getCheckName());
        WxMaTemplateData data4 = new WxMaTemplateData("keyword4", pushModel.getMobile());
        WxMaTemplateData data5 = new WxMaTemplateData("keyword5", pushModel.getCheckDate());
        templateDataList.add(data1);
        templateDataList.add(data2);
        templateDataList.add(data3);
        templateDataList.add(data4);
        templateDataList.add(data5);


        // 去記錄表裏查詢最早的有效formId
        WecharUserFormIdsModel userFormIdsModel = new WecharUserFormIdsModel();
        userFormIdsModel.setOpenId(pushModel.getOpenId());
        WecharUserFormIdsModel formIdsModel = userFormIdService.wecharUserFormIdList(userFormIdsModel);


        //3、設置推送消息
        WxMaTemplateMessage templateMessage = WxMaTemplateMessage.builder()
                .toUser(pushModel.getOpenId())//要推送的用戶openid
                .formId(formIdsModel.getFormId())//收集到的formid
                .templateId(checkResultTemplateId)//推送的模版id(在小程序後臺設置)
                .data(templateDataList)//模版信息
                .page("pages/message/message")//要跳轉到小程序那個頁面
                .build();


        //4、發起推送
        try {
            wxMaService.getMsgService().sendTemplateMsg(templateMessage);
        } catch (WxErrorException e) {
            System.out.println("推送失敗:" + e.getMessage());
            return e.getMessage();
        }
        return "推送成功";
    }
}

/**
* 取得openId 所擁有的formId
*
* 【由於官方文檔講:formId 有效期是7天,所以需要將過期的formId刪除掉,且返回最早的一個formId】
* @param userFormIdsModel
* @return
*/
@Transactional(rollbackFor = Exception.class)
public WecharUserFormIdsModel wecharUserFormIdList(WecharUserFormIdsModel userFormIdsModel) {
    List<WecharUserFormIdsModel> list = userFormIdsDao.wecharUserFormIdList(userFormIdsModel);


    if (AirUtils.hv(list)) {
        ListIterator<WecharUserFormIdsModel> iterator = list.listIterator();
        while (iterator.hasNext()) {
            WecharUserFormIdsModel formIdsModel = iterator.next();
            Date failDate = TimeUtilis.getDateByNum(formIdsModel.getCreateTime(), 7); // formId過期時間


            if (TimeUtilis.dateCompareToDate(failDate, new Date())) { //如果已經過期了,則刪除
                userFormIdsDao.delWecharUserFormId(formIdsModel.getId());


                iterator.remove();  // 使用迭代器移除,可避免報錯: java.util.ConcurrentModificationException
            }
        }
    }


    return list.get(0);
}

效果圖

參考博文: https://blog.csdn.net/qiushi_1990/article/details/90406088

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章