| @@ -1,10 +1,20 @@ | |||||
| package com.iformall.schedule; | package com.iformall.schedule; | ||||
| import cn.binarywang.wx.miniapp.api.WxMaService; | |||||
| import cn.binarywang.wx.miniapp.bean.WxMaTemplateData; | |||||
| import cn.binarywang.wx.miniapp.bean.WxMaUniformMessage; | |||||
| import com.google.common.collect.Lists; | |||||
| import com.iformall.common.ErrorCode; | |||||
| import com.iformall.domain.po.WxAppinfo; | |||||
| import com.iformall.domain.po.WxPayAccount; | import com.iformall.domain.po.WxPayAccount; | ||||
| import com.iformall.domain.vo.WxPayOrderVo; | import com.iformall.domain.vo.WxPayOrderVo; | ||||
| import com.iformall.exception.MallinkException; | |||||
| import com.iformall.mapper.WxPayAccountMapper; | import com.iformall.mapper.WxPayAccountMapper; | ||||
| import com.iformall.mapper.WxPayOrderMapper; | import com.iformall.mapper.WxPayOrderMapper; | ||||
| import com.iformall.service.WxAppinfoService; | |||||
| import com.iformall.service.wechat.WxOpenService; | import com.iformall.service.wechat.WxOpenService; | ||||
| import com.iformall.utils.MaUtil; | |||||
| import me.chanjar.weixin.common.error.WxErrorException; | |||||
| import me.chanjar.weixin.open.api.WxOpenMaService; | import me.chanjar.weixin.open.api.WxOpenMaService; | ||||
| import org.apache.commons.lang3.StringUtils; | import org.apache.commons.lang3.StringUtils; | ||||
| import org.slf4j.Logger; | import org.slf4j.Logger; | ||||
| @@ -13,6 +23,7 @@ import org.springframework.beans.factory.annotation.Autowired; | |||||
| import org.springframework.scheduling.annotation.Scheduled; | import org.springframework.scheduling.annotation.Scheduled; | ||||
| import org.springframework.stereotype.Component; | import org.springframework.stereotype.Component; | ||||
| import java.text.SimpleDateFormat; | |||||
| import java.util.Date; | import java.util.Date; | ||||
| import java.util.HashMap; | import java.util.HashMap; | ||||
| import java.util.List; | import java.util.List; | ||||
| @@ -33,6 +44,9 @@ public class UserUnionIdSchedule { | |||||
| @Autowired | @Autowired | ||||
| private WxPayAccountMapper payAccountMapper; | private WxPayAccountMapper payAccountMapper; | ||||
| @Autowired | |||||
| WxAppinfoService wxAppinfoService; | |||||
| @Scheduled(cron = "0 */4 * * * *?") // 每4分钟检查一次 | @Scheduled(cron = "0 */4 * * * *?") // 每4分钟检查一次 | ||||
| //@Scheduled(cron = "*/10 * * * * ?") // 测试10秒中一次 | //@Scheduled(cron = "*/10 * * * * ?") // 测试10秒中一次 | ||||
| public void payOrderGetUnionIdSchedule() { | public void payOrderGetUnionIdSchedule() { | ||||
| @@ -45,6 +59,7 @@ public class UserUnionIdSchedule { | |||||
| List<WxPayOrderVo> paidList = payOrderMapper.findListOfPaidOrderByDate(dateMap); | List<WxPayOrderVo> paidList = payOrderMapper.findListOfPaidOrderByDate(dateMap); | ||||
| paidList.parallelStream().forEach( payOrderVo -> { | paidList.parallelStream().forEach( payOrderVo -> { | ||||
| getUnionId(payOrderVo); | getUnionId(payOrderVo); | ||||
| //sendUniformMessage(payOrderVo); | |||||
| }); | }); | ||||
| } | } | ||||
| @@ -57,7 +72,6 @@ public class UserUnionIdSchedule { | |||||
| return; | return; | ||||
| } | } | ||||
| try { | try { | ||||
| // code提交 | |||||
| WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(payOrderVo.getAppId()); | WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(payOrderVo.getAppId()); | ||||
| if(StringUtils.isNotBlank(payOrderVo.getTransactionId())) { | if(StringUtils.isNotBlank(payOrderVo.getTransactionId())) { | ||||
| String openRet = openMaService.getApiGetPaidUnionid(payOrderVo.getOpenId(), payOrderVo.getTransactionId()); | String openRet = openMaService.getApiGetPaidUnionid(payOrderVo.getOpenId(), payOrderVo.getTransactionId()); | ||||
| @@ -74,4 +88,59 @@ public class UserUnionIdSchedule { | |||||
| } | } | ||||
| } | } | ||||
| /** | |||||
| * 根据payOrder发送模板消息 | |||||
| * @param payOrderVo | |||||
| */ | |||||
| public void sendUniformMessage(WxPayOrderVo payOrderVo) { | |||||
| if(StringUtils.isBlank(payOrderVo.getOpenId())) { | |||||
| return; | |||||
| } | |||||
| SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); | |||||
| /** | |||||
| * 卡券核销通知 p6pwzZN9GVJq11j2zh72EEhIn5fAIa6oQBBOjqVt8-U | |||||
| * {{first.DATA}} | |||||
| * 卡券类型:{{keyword1.DATA}} | |||||
| * 卡券号码:{{keyword2.DATA}} | |||||
| * 核销时间:{{keyword3.DATA}} | |||||
| * {{remark.DATA}} | |||||
| * | |||||
| */ | |||||
| String template_id = "p6pwzZN9GVJq11j2zh72EEhIn5fAIa6oQBBOjqVt8-U"; | |||||
| WxMaUniformMessage.MiniProgram miniprogram = new WxMaUniformMessage.MiniProgram(); | |||||
| miniprogram.setAppid(payOrderVo.getAppId()); | |||||
| miniprogram.setPagePath("pages/index/index"); | |||||
| miniprogram.setUsePath(true); | |||||
| WxMaUniformMessage templateMessage = WxMaUniformMessage.builder() | |||||
| .isMpTemplateMsg(true) | |||||
| .toUser(payOrderVo.getOpenId()) | |||||
| .appid("wxed2f44705544b892") | |||||
| .templateId(template_id) | |||||
| .url("http://iformall.com") | |||||
| .page("pages/index/index") | |||||
| .formId(payOrderVo.getPrepayId()) // 微信支付的formId是prepayId | |||||
| .miniProgram(miniprogram) | |||||
| .data(Lists.newArrayList( | |||||
| new WxMaTemplateData("first", payOrderVo.getAppId(), "#173177"), | |||||
| new WxMaTemplateData("keyword1", payOrderVo.getOpenId(), "#173177"), | |||||
| new WxMaTemplateData("keyword2", payOrderVo.getTransactionId(), "#173177"), | |||||
| new WxMaTemplateData("keyword3", dateFormat.format(new Date()), "#173177") | |||||
| )) | |||||
| .emphasisKeyword("keyword1.DATA") | |||||
| .build(); | |||||
| WxAppinfo appInfo = wxAppinfoService.getByAppId(payOrderVo.getAppId()); | |||||
| WxMaService wxMaService = MaUtil.getWeappService(appInfo); | |||||
| try { | |||||
| wxMaService.getMsgService().sendUniformMsg(templateMessage); | |||||
| } catch (WxErrorException e) { | |||||
| logger.error("支付通知测试: " + e.getMessage()); | |||||
| throw new MallinkException(ErrorCode.TEMPLATE_SEND_FAILED); | |||||
| } | |||||
| } | |||||
| } | } | ||||