server/admin/src/main/java/com/doumee/api/business/PaymentCallback.java
@@ -83,9 +83,11 @@ .body(body) .build(); NotificationConfig config = new RSAAutoCertificateConfig.Builder() NotificationConfig config = new RSAPublicKeyConfig.Builder() .merchantId(WxMiniConfig.wxProperties.getMchId()) .privateKeyFromPath(WxMiniConfig.wxProperties.getPrivateKeyPath()) .publicKeyFromPath(WxMiniConfig.wxProperties.getPubKeyPath()) .publicKeyId(WxMiniConfig.wxProperties.getPayPublicKeyId()) .merchantSerialNumber(WxMiniConfig.wxProperties.getSerialNumer()) .apiV3Key(WxMiniConfig.wxProperties.getApiV3Key()) .build(); @@ -152,13 +154,20 @@ .body(body) .build(); NotificationConfig config = new RSAAutoCertificateConfig.Builder() NotificationConfig config = /*new RSAAutoCertificateConfig.Builder() .merchantId(WxMiniConfig.wxProperties.getMchId()) .privateKeyFromPath(WxMiniConfig.wxProperties.getPrivateKeyPath()) .merchantSerialNumber(WxMiniConfig.wxProperties.getSerialNumer()) .apiV3Key(WxMiniConfig.wxProperties.getApiV3Key()) .build();*/ new RSAPublicKeyConfig.Builder() .merchantId(WxMiniConfig.wxProperties.getMchId()) .privateKeyFromPath(WxMiniConfig.wxProperties.getPrivateKeyPath()) .publicKeyFromPath(WxMiniConfig.wxProperties.getPubKeyPath()) .publicKeyId(WxMiniConfig.wxProperties.getPayPublicKeyId()) .merchantSerialNumber(WxMiniConfig.wxProperties.getSerialNumer()) .apiV3Key(WxMiniConfig.wxProperties.getApiV3Key()) .build(); NotificationParser parser = new NotificationParser(config); RefundNotification result = parser.parse(requestParam, RefundNotification.class); @@ -194,7 +203,7 @@ .publicKeyFromPath(WxMiniConfig.wxProperties.getWechatPubKeyPath()) //微信支付公钥的存放路径 .publicKeyId(WxMiniConfig.wxProperties.getWechatPayPublicKeyId()) //微信支付公钥ID .merchantSerialNumber(WxMiniConfig.wxProperties.getWechatSerialNumer()) //商户API证书序列号 .apiV3Key("7tG4Vk9Zp2L8dXw5Jq0N3hR6yE1sF3cB") //APIv3密钥 .apiV3Key(WxMiniConfig.wxProperties.getWechatApiV3Key()) //APIv3密钥 .build(); TransferDetailEntityNew entity = wxSuccessCallback(request,config); server/admin/src/main/resources/application.yml
@@ -12,7 +12,7 @@ spring: profiles: active: test active: pro # JSON返回配置 jackson: # 默认时区 server/services/src/main/java/com/doumee/config/wx/SendWxMessage.java
@@ -32,9 +32,17 @@ @Slf4j public class SendWxMessage { private static String goodsOrderUrl = "pages/settlementDetails/settlementDetails?goodsOrderId="; private static String identityInfoUrl = "pages/mine/mine"; private static String mineUrl = "/pages/mine/mine"; private static String orderDetail = "pages/order-details/order-details?id={id}";// 用工 private static String orderDetailFreight = "pages/freight-order/freight-order?id={id}";// 货运 private static String orderDetailFood = "pages/order-food/order-food?id={id}";// 订餐 private static String balanceUrl = "pages/balance-details/balance-details";// 余额明细 @Autowired private SystemDictDataBiz systemDictDataBiz; @@ -45,202 +53,256 @@ * @param identityInfo * @throws WxErrorException */ public void identityInfoMessage(String openid, IdentityInfo identityInfo) throws WxErrorException { RestTemplate restTemplate = new RestTemplate(); String accessToken = WxMiniConfig.wxMaService.getAccessToken(); log.info("微信小程序->微信消息通知 - 认证信息 -> accessToken:{}",accessToken); //这里简单起见我们每次都获取最新的access_token(时间开发中,应该在access_token快过期时再重新获取) String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token="+accessToken; //拼接推送的模版 WxMsgVO wxMsgVO = new WxMsgVO(); //用户的openid(要发送给那个用户) wxMsgVO.setTouser(openid); //订阅消息模板id wxMsgVO.setTemplate_id("VJho7-lf-4_WZFfOzenDndgwNDIA0EvCiE6vqBnExpQ"); Map<String, TemplateData> m = new HashMap<>(4); m.put("thing2", new TemplateData(Constants.equalsInteger(identityInfo.getType(),Constants.ZERO)?"用工认证":Constants.equalsInteger(identityInfo.getType(),Constants.ONE)?"运货认证":"供餐认证")); m.put("phrase6", new TemplateData(Constants.equalsInteger(identityInfo.getAuditStatus(),Constants.TWO)?"认证通过":"认证未通过")); m.put("time12", new TemplateData(DateUtil.getFomartDate(identityInfo.getAuditTime(),"yyyy-MM-dd HH:mm"))); m.put("thing14", new TemplateData(identityInfo.getAuditRemark())); wxMsgVO.setPage(identityInfoUrl); wxMsgVO.setData(m); ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, wxMsgVO, String.class); log.info("微信小程序->微信消息通知 认证信息:{}", JSONObject.toJSONString(responseEntity)); public void identityInfoMessage(String openid, IdentityInfo identityInfo){ try{ RestTemplate restTemplate = new RestTemplate(); String accessToken = WxMiniConfig.wxMaService.getAccessToken(); log.info("微信小程序->微信消息通知 - 认证信息 -> accessToken:{}",accessToken); //这里简单起见我们每次都获取最新的access_token(时间开发中,应该在access_token快过期时再重新获取) String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token="+accessToken; //拼接推送的模版 WxMsgVO wxMsgVO = new WxMsgVO(); //用户的openid(要发送给那个用户) wxMsgVO.setTouser(openid); //订阅消息模板id wxMsgVO.setTemplate_id("VJho7-lf-4_WZFfOzenDndgwNDIA0EvCiE6vqBnExpQ"); Map<String, TemplateData> m = new HashMap<>(4); m.put("thing2", new TemplateData(Constants.equalsInteger(identityInfo.getType(),Constants.ZERO)?"实名认证":Constants.equalsInteger(identityInfo.getType(),Constants.ONE)?"运货认证":"供餐认证")); m.put("phrase6", new TemplateData(Constants.equalsInteger(identityInfo.getAuditStatus(),Constants.TWO)?"通过":"未通过")); m.put("time12", new TemplateData(DateUtil.getFomartDate(identityInfo.getAuditTime(),"yyyy-MM-dd HH:mm"))); m.put("thing14", new TemplateData(identityInfo.getAuditRemark())); // wxMsgVO.setPage(mineUrl); wxMsgVO.setData(m); log.info("微信小程序->微信消息通知 认证信息:{}", JSONObject.toJSONString(wxMsgVO)); ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, wxMsgVO, String.class); log.info("微信小程序->微信消息通知 认证信息:{}", JSONObject.toJSONString(responseEntity)); }catch (WxErrorException wxErrorException){ } } /** * * 订单取消业务通知 * @param openidList * @param orders * @param cancelType 取消类型:0=平台取消;1=发单方取消;1=接单方取消 * @throws WxErrorException */ public void cancelMessage(List<String> openidList, Orders orders,Integer cancelType ) throws WxErrorException { public void cancelMessage(List<String> openidList, Orders orders,Integer cancelType ){ RestTemplate restTemplate = new RestTemplate(); String accessToken = WxMiniConfig.wxMaService.getAccessToken(); log.info("微信小程序->微信消息通知 - 订单取消业务 -> accessToken:{}",accessToken); //这里简单起见我们每次都获取最新的access_token(时间开发中,应该在access_token快过期时再重新获取) String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token="+accessToken; //拼接推送的模版 WxMsgVO wxMsgVO = new WxMsgVO(); //订阅消息模板id wxMsgVO.setTemplate_id("AA97cHjvlPiNO4viMkVe4JifCf9TD5b5Eb7s6El3VS8"); Map<String, TemplateData> m = new HashMap<>(5); m.put("character_string3", new TemplateData(orders.getCode())); m.put("thing2", new TemplateData(Constants.orderType.getName(orders.getType()))); m.put("thing1", new TemplateData(orders.getLocation() + (StringUtils.isNotBlank(orders.getLocationRemark())?orders.getLocationRemark():""))); m.put("date8", new TemplateData(DateUtil.getFomartDate(orders.getCancelTime(),"yyyy-MM-dd HH:mm:ss"))); m.put("thing6", new TemplateData(Constants.equalsInteger(cancelType,Constants.ZERO)?"平台取消":Constants.equalsInteger(cancelType,Constants.ONE)?"发单方取消":"接单方取消")); //TODO 跳转地址 wxMsgVO.setPage(""); wxMsgVO.setData(m); if(CollectionUtils.isNotEmpty(openidList)){ for (String openid:openidList) { //用户的openid(要发送给那个用户) wxMsgVO.setTouser(openid); ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, wxMsgVO, String.class); log.info("微信小程序->微信消息通知 订单取消业务:{}", JSONObject.toJSONString(responseEntity)); try{ String accessToken = WxMiniConfig.wxMaService.getAccessToken(); log.info("微信小程序->微信消息通知 - 订单取消业务 -> accessToken:{}",accessToken); //这里简单起见我们每次都获取最新的access_token(时间开发中,应该在access_token快过期时再重新获取) String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token="+accessToken; //拼接推送的模版 WxMsgVO wxMsgVO = new WxMsgVO(); //订阅消息模板id wxMsgVO.setTemplate_id("AA97cHjvlPiNO4viMkVe4JifCf9TD5b5Eb7s6El3VS8"); Map<String, TemplateData> m = new HashMap<>(5); m.put("character_string3", new TemplateData(orders.getCode())); m.put("thing2", new TemplateData(Constants.orderType.getName(orders.getType()))); m.put("thing1", new TemplateData(orders.getLocation() + (StringUtils.isNotBlank(orders.getLocationRemark())?orders.getLocationRemark():""))); m.put("date8", new TemplateData(DateUtil.getFomartDate(orders.getCancelTime(),"yyyy-MM-dd HH:mm:ss"))); m.put("thing6", new TemplateData(Constants.equalsInteger(cancelType,Constants.ZERO)?"平台取消":Constants.equalsInteger(cancelType,Constants.ONE)?"发单方取消":"接单方取消")); String pageUrl = Constants.equalsInteger(orders.getType(),Constants.orderType.hyd.getKey())?orderDetailFreight: Constants.equalsInteger(orders.getType(),Constants.orderType.scd.getKey())?orderDetailFood:orderDetail; pageUrl.replace("{id}",orders.getId().toString()); wxMsgVO.setPage(pageUrl); wxMsgVO.setData(m); if(CollectionUtils.isNotEmpty(openidList)){ for (String openid:openidList) { //用户的openid(要发送给那个用户) wxMsgVO.setTouser(openid); log.info("微信小程序->微信消息通知 订单取消业务:{}", JSONObject.toJSONString(wxMsgVO)); ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, wxMsgVO, String.class); log.info("微信小程序->微信消息通知 订单取消业务:{}", JSONObject.toJSONString(responseEntity)); } }else{ log.info("微信小程序->微信消息通知 订单取消业务:{}", "无人员信息"); } }else{ log.info("微信小程序->微信消息通知 订单取消业务:{}", "无人员信息"); }catch (WxErrorException wxErrorException){ } } /** * 接单通知 * @param openid * @param orders * @param memberName * @param memberPhone * @throws WxErrorException */ public void acceptMessage(String openid, Orders orders,String memberName,String memberPhone){ RestTemplate restTemplate = new RestTemplate(); try{ String accessToken = WxMiniConfig.wxMaService.getAccessToken(); log.info("微信小程序->微信消息通知 - 接单业务 -> accessToken:{}",accessToken); //这里简单起见我们每次都获取最新的access_token(时间开发中,应该在access_token快过期时再重新获取) String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token="+accessToken; //拼接推送的模版 WxMsgVO wxMsgVO = new WxMsgVO(); wxMsgVO.setTouser(openid); //订阅消息模板id wxMsgVO.setTemplate_id("oVjOBLcHxIlGzOMJsdInmgI5CHGXh-UTvMzQqfFOnIg"); Map<String, TemplateData> m = new HashMap<>(4); m.put("character_string3", new TemplateData(orders.getCode())); m.put("thing1", new TemplateData(Constants.orderType.getName(orders.getType()))); m.put("thing15", new TemplateData(memberName)); m.put("phone_number8", new TemplateData(memberPhone)); String pageUrl = Constants.equalsInteger(orders.getType(),Constants.orderType.hyd.getKey())?orderDetailFreight: Constants.equalsInteger(orders.getType(),Constants.orderType.scd.getKey())?orderDetailFood:orderDetail; pageUrl.replace("{id}",orders.getId().toString()); wxMsgVO.setPage(pageUrl); wxMsgVO.setData(m); //用户的openid(要发送给那个用户) log.info("微信小程序->微信消息通知 接单通知:{}", JSONObject.toJSONString(wxMsgVO)); ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, wxMsgVO, String.class); log.info("微信小程序->微信消息通知 接单通知:{}", JSONObject.toJSONString(responseEntity)); }catch (WxErrorException wxErrorException){ } } public void orderUpdMessage(String openid, Orders orders){ RestTemplate restTemplate = new RestTemplate(); try{ String accessToken = WxMiniConfig.wxMaService.getAccessToken(); log.info("微信小程序->微信消息通知 - 订单变更通知 -> accessToken:{}",accessToken); //这里简单起见我们每次都获取最新的access_token(时间开发中,应该在access_token快过期时再重新获取) String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token="+accessToken; //拼接推送的模版 WxMsgVO wxMsgVO = new WxMsgVO(); wxMsgVO.setTouser(openid); //订阅消息模板id wxMsgVO.setTemplate_id("3YSC7gouRlSjHXz4CrWOGFzPmGwEBtFj4snwdfMvKHk"); Map<String, TemplateData> m = new HashMap<>(3); m.put("character_string1", new TemplateData(orders.getCode())); m.put("thing3", new TemplateData("变更订单日期")); //变更后日期:07-23至07-25 m.put("thing5", new TemplateData("变更后日期:" +DateUtil.getFomartDate(orders.getStartDate(),"MM-dd") + "至" +DateUtil.getFomartDate(orders.getEndDate(),"MM-dd"))); String pageUrl = Constants.equalsInteger(orders.getType(),Constants.orderType.hyd.getKey())?orderDetailFreight: Constants.equalsInteger(orders.getType(),Constants.orderType.scd.getKey())?orderDetailFood:orderDetail; pageUrl.replace("{id}",orders.getId().toString()); wxMsgVO.setPage(pageUrl); wxMsgVO.setData(m); //用户的openid(要发送给那个用户) log.info("微信小程序->微信消息通知 订单变更通知:{}", JSONObject.toJSONString(wxMsgVO)); ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, wxMsgVO, String.class); log.info("微信小程序->微信消息通知 订单变更通知:{}", JSONObject.toJSONString(responseEntity)); }catch (WxErrorException wxErrorException){ } } public void withdrawalMessage(String openid, WithdrawalOrders withdrawalOrders){ try{ RestTemplate restTemplate = new RestTemplate(); String accessToken = WxMiniConfig.wxMaService.getAccessToken(); log.info("微信小程序->微信消息通知 - 提现成功通知 -> accessToken:{}",accessToken); //这里简单起见我们每次都获取最新的access_token(时间开发中,应该在access_token快过期时再重新获取) String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token="+accessToken; //拼接推送的模版 WxMsgVO wxMsgVO = new WxMsgVO(); wxMsgVO.setTouser(openid); //订阅消息模板id wxMsgVO.setTemplate_id("fNJy4545hcrH83bP3a1vszs7XEKWjXMsrfr2XCNsql0"); Map<String, TemplateData> m = new HashMap<>(4); m.put("phrase2", new TemplateData("已打款")); m.put("amount1", new TemplateData((new BigDecimal(withdrawalOrders.getAmount().toString()).divide(new BigDecimal("100"))).toString())); m.put("time3", new TemplateData(DateUtil.getFomartDate(withdrawalOrders.getUpdateTime(),"yyyy.MM.dd HH.mm.ss"))); m.put("thing4", new TemplateData("打款成功,请注意查收")); wxMsgVO.setPage(balanceUrl); wxMsgVO.setData(m); //用户的openid(要发送给那个用户) log.info("微信小程序->微信消息通知 提现成功通知:{}", JSONObject.toJSONString(wxMsgVO)); ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, wxMsgVO, String.class); log.info("微信小程序->微信消息通知 提现成功通知:{}", JSONObject.toJSONString(responseEntity)); }catch (WxErrorException wxErrorException){ } } public void acceptMessage(String openid, Orders orders,String memberName,String memberPhone) throws WxErrorException { RestTemplate restTemplate = new RestTemplate(); String accessToken = WxMiniConfig.wxMaService.getAccessToken(); log.info("微信小程序->微信消息通知 - 接单业务 -> accessToken:{}",accessToken); //这里简单起见我们每次都获取最新的access_token(时间开发中,应该在access_token快过期时再重新获取) String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token="+accessToken; //拼接推送的模版 WxMsgVO wxMsgVO = new WxMsgVO(); wxMsgVO.setTouser(openid); //订阅消息模板id wxMsgVO.setTemplate_id("oVjOBLcHxIlGzOMJsdInmgI5CHGXh-UTvMzQqfFOnIg"); Map<String, TemplateData> m = new HashMap<>(4); m.put("character_string3", new TemplateData(orders.getCode())); m.put("thing1", new TemplateData(Constants.orderType.getName(orders.getType()))); m.put("thing15", new TemplateData(memberName)); m.put("phone_number8", new TemplateData(memberPhone)); //TODO 跳转地址 wxMsgVO.setPage(""); wxMsgVO.setData(m); //用户的openid(要发送给那个用户) ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, wxMsgVO, String.class); log.info("微信小程序->微信消息通知 订单取消业务:{}", JSONObject.toJSONString(responseEntity)); public void revenueMessage(String openid, Orders orders){ try{ RestTemplate restTemplate = new RestTemplate(); String accessToken = WxMiniConfig.wxMaService.getAccessToken(); log.info("微信小程序->微信消息通知 - 订单收益通知 -> accessToken:{}",accessToken); //这里简单起见我们每次都获取最新的access_token(时间开发中,应该在access_token快过期时再重新获取) String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token="+accessToken; //拼接推送的模版 WxMsgVO wxMsgVO = new WxMsgVO(); wxMsgVO.setTouser(openid); //订阅消息模板id wxMsgVO.setTemplate_id("tDpYImlrdv-0d3euTrHbYZ1cEZvjVHTNlqHvV0tpLHg"); Map<String, TemplateData> m = new HashMap<>(5); m.put("character_string8", new TemplateData(orders.getCode())); m.put("phrase3", new TemplateData("已支付")); m.put("phrase4", new TemplateData("微信支付")); m.put("amount6", new TemplateData((new BigDecimal(orders.getReceiveAccount().toString()).divide(new BigDecimal("100")))+"元")); m.put("date7", new TemplateData(DateUtil.getFomartDate(new Date(),"yyyy-MM-dd HH:mm:ss"))); wxMsgVO.setPage(balanceUrl); wxMsgVO.setData(m); log.info("微信小程序->微信消息通知 订单收益通知:{}", JSONObject.toJSONString(wxMsgVO)); //用户的openid(要发送给那个用户) ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, wxMsgVO, String.class); log.info("微信小程序->微信消息通知 订单收益通知:{}", JSONObject.toJSONString(responseEntity)); }catch (WxErrorException wxErrorException){ } } public void orderUpdMessage(String openid, Orders orders) throws WxErrorException { RestTemplate restTemplate = new RestTemplate(); String accessToken = WxMiniConfig.wxMaService.getAccessToken(); log.info("微信小程序->微信消息通知 - 订单变更通知 -> accessToken:{}",accessToken); //这里简单起见我们每次都获取最新的access_token(时间开发中,应该在access_token快过期时再重新获取) String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token="+accessToken; //拼接推送的模版 WxMsgVO wxMsgVO = new WxMsgVO(); wxMsgVO.setTouser(openid); //订阅消息模板id wxMsgVO.setTemplate_id("3YSC7gouRlSjHXz4CrWOGFzPmGwEBtFj4snwdfMvKHk"); Map<String, TemplateData> m = new HashMap<>(3); m.put("character_string1", new TemplateData(orders.getCode())); m.put("thing3", new TemplateData("变更订单日期")); //变更后日期:07-23至07-25 m.put("thing5", new TemplateData("变更后日期:" +DateUtil.getFomartDate(orders.getStartDate(),"MM-dd") + "至" +DateUtil.getFomartDate(orders.getEndDate(),"MM-dd"))); //TODO 跳转地址 wxMsgVO.setPage(""); wxMsgVO.setData(m); //用户的openid(要发送给那个用户) ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, wxMsgVO, String.class); log.info("微信小程序->微信消息通知 订单变更通知:{}", JSONObject.toJSONString(responseEntity)); } public void autoDispatchMessage(String openid, Orders orders,double distance){ try{ RestTemplate restTemplate = new RestTemplate(); String accessToken = WxMiniConfig.wxMaService.getAccessToken(); log.info("微信小程序->微信消息通知 - 服务派单 -> accessToken:{}",accessToken); //这里简单起见我们每次都获取最新的access_token(时间开发中,应该在access_token快过期时再重新获取) String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token="+accessToken; //拼接推送的模版 WxMsgVO wxMsgVO = new WxMsgVO(); wxMsgVO.setTouser(openid); //订阅消息模板id wxMsgVO.setTemplate_id("1h6JYpQf-mDKV4tYQ6gGDONfx1awqtm3-y9W8vUraT4"); Map<String, TemplateData> m = new HashMap<>(5); m.put("thing2", new TemplateData(Constants.orderType.getName(orders.getType()))); m.put("thing3", new TemplateData(orders.getOrderContent())); m.put("phrase4", new TemplateData("此地距离您"+distance+"公里")); m.put("amount28", new TemplateData(orders.getEstimatedAccount().toString())); m.put("thing12", new TemplateData("工单将于"+DateUtil.getFomartDate(orders.getStartDate(),"MM-dd")+"开始")); String pageUrl = Constants.equalsInteger(orders.getType(),Constants.orderType.hyd.getKey())?orderDetailFreight: Constants.equalsInteger(orders.getType(),Constants.orderType.scd.getKey())?orderDetailFood:orderDetail; pageUrl.replace("{id}",orders.getId().toString()); wxMsgVO.setPage(pageUrl); wxMsgVO.setData(m); log.info("微信小程序->微信消息通知 服务派单:{}", JSONObject.toJSONString(wxMsgVO)); //用户的openid(要发送给那个用户) ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, wxMsgVO, String.class); log.info("微信小程序->微信消息通知 服务派单:{}", JSONObject.toJSONString(responseEntity)); }catch (WxErrorException wxErrorException){ } public void withdrawalMessage(String openid, WithdrawalOrders withdrawalOrders) throws WxErrorException { RestTemplate restTemplate = new RestTemplate(); String accessToken = WxMiniConfig.wxMaService.getAccessToken(); log.info("微信小程序->微信消息通知 - 提现成功通知 -> accessToken:{}",accessToken); //这里简单起见我们每次都获取最新的access_token(时间开发中,应该在access_token快过期时再重新获取) String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token="+accessToken; //拼接推送的模版 WxMsgVO wxMsgVO = new WxMsgVO(); wxMsgVO.setTouser(openid); //订阅消息模板id wxMsgVO.setTemplate_id("fNJy4545hcrH83bP3a1vszs7XEKWjXMsrfr2XCNsql0"); Map<String, TemplateData> m = new HashMap<>(4); m.put("phrase2", new TemplateData("已打款")); m.put("amount1", new TemplateData((new BigDecimal(withdrawalOrders.getAmount().toString()).divide(new BigDecimal("100"))).toString())); m.put("time3", new TemplateData(DateUtil.getFomartDate(withdrawalOrders.getUpdateTime(),"yyyy.MM.dd HH.mm.ss"))); m.put("thing4", new TemplateData("打款成功,请注意查收")); //TODO 跳转地址 wxMsgVO.setPage(""); wxMsgVO.setData(m); //用户的openid(要发送给那个用户) ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, wxMsgVO, String.class); log.info("微信小程序->微信消息通知 提现成功通知:{}", JSONObject.toJSONString(responseEntity)); } public void revenueMessage(String openid, Orders orders) throws WxErrorException { RestTemplate restTemplate = new RestTemplate(); String accessToken = WxMiniConfig.wxMaService.getAccessToken(); log.info("微信小程序->微信消息通知 - 订单收益通知 -> accessToken:{}",accessToken); //这里简单起见我们每次都获取最新的access_token(时间开发中,应该在access_token快过期时再重新获取) String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token="+accessToken; //拼接推送的模版 WxMsgVO wxMsgVO = new WxMsgVO(); wxMsgVO.setTouser(openid); //订阅消息模板id wxMsgVO.setTemplate_id("tDpYImlrdv-0d3euTrHbYZ1cEZvjVHTNlqHvV0tpLHg"); Map<String, TemplateData> m = new HashMap<>(5); m.put("character_string8", new TemplateData(orders.getCode())); m.put("phrase3", new TemplateData("已支付")); m.put("phrase4", new TemplateData("微信支付")); m.put("amount6", new TemplateData((new BigDecimal(orders.getReceiveAccount().toString()).divide(new BigDecimal("100")))+"元")); m.put("date7", new TemplateData(DateUtil.getFomartDate(new Date(),"yyyy-MM-dd HH:mm:ss"))); //TODO 跳转地址 wxMsgVO.setPage(""); wxMsgVO.setData(m); //用户的openid(要发送给那个用户) ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, wxMsgVO, String.class); log.info("微信小程序->微信消息通知 订单收益通知:{}", JSONObject.toJSONString(responseEntity)); } public void autoDispatchMessage(String openid, Orders orders,BigDecimal distance) throws WxErrorException { RestTemplate restTemplate = new RestTemplate(); String accessToken = WxMiniConfig.wxMaService.getAccessToken(); log.info("微信小程序->微信消息通知 - 服务派单 -> accessToken:{}",accessToken); //这里简单起见我们每次都获取最新的access_token(时间开发中,应该在access_token快过期时再重新获取) String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token="+accessToken; //拼接推送的模版 WxMsgVO wxMsgVO = new WxMsgVO(); wxMsgVO.setTouser(openid); //订阅消息模板id wxMsgVO.setTemplate_id("1h6JYpQf-mDKV4tYQ6gGDONfx1awqtm3-y9W8vUraT4"); Map<String, TemplateData> m = new HashMap<>(5); m.put("thing2", new TemplateData(Constants.orderType.getName(orders.getType()))); m.put("thing3", new TemplateData(orders.getOrderContent())); m.put("phrase4", new TemplateData("此地距离您"+distance+"公里")); m.put("amount28", new TemplateData(orders.getEstimatedAccount().toString())); m.put("thing12", new TemplateData("工单将于"+DateUtil.getFomartDate(orders.getStartDate(),"MM-dd")+"开始")); //TODO 跳转地址 wxMsgVO.setPage(""); wxMsgVO.setData(m); //用户的openid(要发送给那个用户) ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, wxMsgVO, String.class); log.info("微信小程序->微信消息通知 服务派单:{}", JSONObject.toJSONString(responseEntity)); } server/services/src/main/java/com/doumee/config/wx/WxMiniConfig.java
@@ -12,6 +12,9 @@ import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl; import com.wechat.pay.java.core.Config; import com.wechat.pay.java.core.RSAAutoCertificateConfig; import com.wechat.pay.java.core.RSAPublicKeyConfig; import com.wechat.pay.java.core.http.HostName; import com.wechat.pay.java.core.notification.RSAPublicKeyNotificationConfig; import com.wechat.pay.java.service.billdownload.BillDownloadService; import com.wechat.pay.java.service.partnerpayments.jsapi.JsapiService; import com.wechat.pay.java.service.partnerpayments.jsapi.JsapiServiceExtension; @@ -78,27 +81,28 @@ */ public void load_wxPayService() { try { // Config config = // new RSAPublicKeyConfig.Builder() // .merchantId(wxPayProperties.getMchId()) // .privateKeyFromPath(wxPayProperties.getPrivateKeyPath()) // .publicKeyFromPath(wxPayProperties.getPubKeyPath()) // .publicKeyId("PUB_KEY_ID_0117000719222024112700219100000508") // .merchantSerialNumber(wxPayProperties.getSerialNumer()) // .apiV3Key(wxPayProperties.getApiV3Key()) // .build(); Config config = new RSAAutoCertificateConfig.Builder() new RSAPublicKeyConfig.Builder() .merchantId(wxPayProperties.getMchId()) .privateKeyFromPath(wxPayProperties.getPrivateKeyPath()) // .publicKeyFromPath(wxPayProperties.getPubKeyPath()) // .publicKeyId("PUB_KEY_ID_0117000719222024112700219100000508") .publicKeyFromPath(wxPayProperties.getPubKeyPath()) .publicKeyId(wxPayProperties.getPayPublicKeyId()) .merchantSerialNumber(wxPayProperties.getSerialNumer()) .apiV3Key(wxPayProperties.getApiV3Key()) .build(); // Config config = // new RSAAutoCertificateConfig.Builder() // .merchantId(wxPayProperties.getMchId()) // .privateKeyFromPath(wxPayProperties.getPrivateKeyPath()) //// .publicKeyFromPath(wxPayProperties.getPubKeyPath()) //// .publicKeyId("PUB_KEY_ID_0117000719222024112700219100000508") // .merchantSerialNumber(wxPayProperties.getSerialNumer()) // .apiV3Key(wxPayProperties.getApiV3Key()) // .build(); // this.wxPayService = new JsapiService.Builder().config(config).build(); this.jsapiExtService = new JsapiServiceExtension.Builder().config(config).build(); this.refundService = new RefundService.Builder().config(config).build(); this.billDownloadService = new BillDownloadService.Builder().config(config).build(); server/services/src/main/java/com/doumee/config/wx/WxMiniUtilService.java
@@ -53,13 +53,13 @@ withdrawalOrders.setCreateTime(new Date()); withdrawalOrdersMapper.insert(withdrawalOrders); CreateRequest request = new CreateRequest(); request.setOutTradeNo(orders.getCode()); request.setOutTradeNo(orders.getOutTradeNo()); request.setOutRefundNo(withdrawalOrders.getId().toString()); request.setSubMchid(WxMiniConfig.wxProperties.getSubMchId()); request.setNotifyUrl(WxMiniConfig.wxProperties.getRefundNotifyUrl()); AmountReq amountReq = new AmountReq(); amountReq.setTotal(withdrawalOrders.getAmount()); amountReq.setRefund(withdrawalOrders.getAmount()); amountReq.setTotal(1L);//withdrawalOrders.getAmount()); amountReq.setRefund(1L);//withdrawalOrders.getAmount()); amountReq.setCurrency("CNY"); request.setAmount(amountReq); try { server/services/src/main/java/com/doumee/config/wx/WxPayProperties.java
@@ -63,6 +63,7 @@ private String privateKeyPath ; private String privateCertPath;// gybike private String pubKeyPath;// private String payPublicKeyId;// private String wechatSerialNumer; @@ -70,7 +71,7 @@ private String wechatPubKeyPath; //微信支付公钥文件路径 private String wechatPrivateKeyPath; private String wechatNotifyUrl; // private String wechatApiV3Key; private String wechatApiV3Key; // private String wechatPlatformPubKeyPath; server/services/src/main/java/com/doumee/core/constants/Constants.java
@@ -647,7 +647,7 @@ public enum smsContent { accept(0, "SMS_491325122","您的{order}订单已被接单!时间:{time1}-{time2},接单方:{name}。"), accept(0, "SMS_491325122","您的{order}订单已被接单!时间:{time1}-{time2},可进入小程序联系接单方。"), receiveCancel(1, "SMS_491055243","您的{order}订单,时间:{time1}-{time2},已被接单方取消,订单已重新进入接单大厅。"), platformCancel(2, "SMS_491375152","您的{order}订单,时间:{time1}-{time2},已由平台取消。如有疑问请联系客服。"), agreeUpd(3, "SMS_491190259","接单方已同意您将{order}的订单时间修改为{time1}至{time2}。"), server/services/src/main/java/com/doumee/core/utils/DateUtil.java
@@ -2057,7 +2057,7 @@ */ public static String getCurrDateTime() { Timestamp date = new Timestamp(System.currentTimeMillis()); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return formatter.format(date); } public static String getCurrDateTimeShort() { server/services/src/main/java/com/doumee/service/business/AliSmsService.java
@@ -46,72 +46,74 @@ private final static String SING_NAME = "橙桔天下科技"; public void sendSms(int type, String phone, Orders orders, String receiveName, String businessPhone, BigDecimal distance, IdentityInfo identityInfo,CategoryMapper categoryMapper){ Constants.smsContent smsContent = Constants.smsContent.getSmsContent(type); Map<String,Object> tempParam = new HashMap<>(); if(smsContent.getName().indexOf("time1")>=Constants.ZERO){ tempParam.put("time1", DateUtil.formatDate(orders.getStartDate(),"MM-dd")); } if(smsContent.getName().indexOf("time2")>=Constants.ZERO){ tempParam.put("time2", DateUtil.formatDate(orders.getEndDate(),"MM-dd")); } if(smsContent.getName().indexOf("name")>=Constants.ZERO){ tempParam.put("name", receiveName); } if(smsContent.getName().indexOf("money")>=Constants.ZERO){ tempParam.put("money", new BigDecimal(orders.getReceiveAccount().toString()).divide(new BigDecimal("100"),2,BigDecimal.ROUND_HALF_UP)+"元"); } if(smsContent.getName().indexOf("distance")>=Constants.ZERO){ tempParam.put("distance", distance +"km"); } //认证短信 特殊处理 if(Constants.equalsInteger(smsContent.getKey(),Constants.smsContent.authentication.getKey())){ //认证类型 if(smsContent.getName().indexOf("authentication")>=Constants.ZERO){ tempParam.put("authentication", Constants.equalsInteger(identityInfo.getAuthType(),Constants.ZERO)?"个人":identityInfo.getCompanyName()); public void businessSendSms(int type, String phone, Orders orders, BigDecimal distance, IdentityInfo identityInfo,CategoryMapper categoryMapper){ try{ Constants.smsContent smsContent = Constants.smsContent.getSmsContent(type); Map<String,Object> tempParam = new HashMap<>(); if(smsContent.getName().indexOf("time1")>=Constants.ZERO){ tempParam.put("time1", DateUtil.formatDate(orders.getStartDate(),"MM-dd")); } if(smsContent.getName().indexOf("order")>=Constants.ZERO){ tempParam.put("order", Constants.orderType.getName(identityInfo.getType()).replace("单","")); if(smsContent.getName().indexOf("time2")>=Constants.ZERO){ tempParam.put("time2", DateUtil.formatDate(orders.getEndDate(),"MM-dd")); } if(smsContent.getName().indexOf("status")>=Constants.ZERO){ tempParam.put("status", Constants.equalsInteger(identityInfo.getAuditStatus(),Constants.TWO)?"已通过":"未通过"); if(smsContent.getName().indexOf("money")>=Constants.ZERO){ tempParam.put("money", new BigDecimal(orders.getReceiveAccount().toString()).divide(new BigDecimal("100"),2,BigDecimal.ROUND_HALF_UP)+"元"); } }else{ if(smsContent.getName().indexOf("order")>=Constants.ZERO){ String order = ""; //查询订单的类型信息 if(Constants.equalsInteger(orders.getType(),Constants.ZERO)){ order = Constants.workType.getName(orders.getWorkType()); Category category = categoryMapper.selectById(orders.getCategoryId()); if(Objects.nonNull(category)){ order = category.getName() + order; } }else if(Constants.equalsInteger(orders.getType(),Constants.ZERO)){ order = "运输"; Category category = categoryMapper.selectById(orders.getTransportTypeId()); if(Objects.nonNull(category)){ order = category.getName() + order; } }else{ List<CateringDTO> cateringDTOList = JSONArray.parseArray(orders.getWayInfo(),CateringDTO.class); if(CollectionUtils.isNotEmpty(cateringDTOList)){ for (CateringDTO cateringDTO:cateringDTOList) { if(StringUtils.isBlank(order)){ order = cateringDTO.getName(); }else{ order = order + "/" +cateringDTO.getName(); if(smsContent.getName().indexOf("distance")>=Constants.ZERO){ tempParam.put("distance", distance +"km"); } //认证短信 特殊处理 if(Constants.equalsInteger(smsContent.getKey(),Constants.smsContent.authentication.getKey())){ //认证类型 if(smsContent.getName().indexOf("authentication")>=Constants.ZERO){ tempParam.put("authentication", Constants.equalsInteger(identityInfo.getAuthType(),Constants.ZERO)?"个人":identityInfo.getCompanyName()); } if(smsContent.getName().indexOf("order")>=Constants.ZERO){ tempParam.put("oeder", Constants.orderType.getName(identityInfo.getType()).replace("单","")); } if(smsContent.getName().indexOf("status")>=Constants.ZERO){ tempParam.put("status", Constants.equalsInteger(identityInfo.getAuditStatus(),Constants.TWO)?"已通过":"未通过"); } }else{ if(smsContent.getName().indexOf("order")>=Constants.ZERO){ String order = ""; //查询订单的类型信息 if(Constants.equalsInteger(orders.getType(),Constants.ZERO)){ order = Constants.workType.getName(orders.getWorkType()); Category category = categoryMapper.selectById(orders.getCategoryId()); if(Objects.nonNull(category)){ order = category.getName() + order; } }else if(Constants.equalsInteger(orders.getType(),Constants.ZERO)){ order = "运输"; Category category = categoryMapper.selectById(orders.getTransportTypeId()); if(Objects.nonNull(category)){ order = category.getName() + order; } }else{ List<CateringDTO> cateringDTOList = JSONArray.parseArray(orders.getWayInfo(),CateringDTO.class); if(CollectionUtils.isNotEmpty(cateringDTOList)){ for (CateringDTO cateringDTO:cateringDTOList) { if(StringUtils.isBlank(order)){ order = cateringDTO.getName(); }else{ order = order + "/" +cateringDTO.getName(); } } } } tempParam.put("order",order); } tempParam.put("order",order); } if(smsContent.getName().indexOf("distance")>=Constants.ZERO){ tempParam.put("distance", distance +"km"); } AliSmsService.sendSms(phone,smsContent.getCode(), JSONObject.toJSONString(tempParam)); }catch (Exception e){ log.error("短信发送失败~"); } if(smsContent.getName().indexOf("authentication")>=Constants.ZERO){ tempParam.put("distance", distance +"km"); } AliSmsService.sendSms(phone,smsContent.getCode(), JSONObject.toJSONString(tempParam)); } @@ -166,10 +168,10 @@ //请求失败这里会抛ClientException异常 SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request); if (sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")) { // logger.info(phone + "-" + templateCode + "-" + templateParam + " >>> " + JSON.toJSONString(sendSmsResponse)); log.info("短信发送内容:"+phone + "-" + templateCode + "-" + templateParam + " >>> " + JSON.toJSONString(sendSmsResponse)); return true; } else { // logger.error(phone + "-" + templateCode + "-" + templateParam + " >>> " + JSON.toJSONString(sendSmsResponse)); log.error("短信发送内容:"+phone + "-" + templateCode + "-" + templateParam + " >>> " + JSON.toJSONString(sendSmsResponse)); } } catch (Exception e) { e.printStackTrace(); server/services/src/main/java/com/doumee/service/business/impl/IdentityInfoServiceImpl.java
@@ -11,12 +11,14 @@ import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; import com.doumee.core.utils.Utils; import com.doumee.dao.business.CategoryMapper; import com.doumee.dao.business.IdentityInfoMapper; import com.doumee.dao.business.MemberMapper; import com.doumee.dao.business.model.IdentityInfo; import com.doumee.dao.business.model.Member; import com.doumee.dao.dto.AuditDTO; import com.doumee.dao.system.model.SystemUser; import com.doumee.service.business.AliSmsService; import com.doumee.service.business.IdentityInfoService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -51,7 +53,11 @@ @Autowired private MemberMapper memberMapper; @Autowired private AliSmsService aliSmsService; @Autowired private SystemDictDataBiz systemDictDataBiz; @Autowired private CategoryMapper categoryMapper; @Override @Transactional(rollbackFor = {BusinessException.class,Exception.class}) @@ -474,16 +480,15 @@ .eq(Member::getId,identityInfo.getMemberId()) ); try{ //发送微信通知 if(StringUtils.isNotBlank(member.getOpenid())){ sendWxMessage.identityInfoMessage(member.getOpenid(),identityInfo); } }catch (WxErrorException wxErrorException){ //发送微信通知 if(StringUtils.isNotBlank(member.getOpenid())){ sendWxMessage.identityInfoMessage(member.getOpenid(),identityInfo); } //短信通知 aliSmsService.businessSendSms(Constants.smsContent.authentication.getKey(), member.getTelephone(),null,null, identityInfo,categoryMapper); } } server/services/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -399,18 +399,19 @@ userCenterVO.setTaskingTotal(Constants.ZERO); userCenterVO.setDoneTotal(Constants.ZERO); userCenterVO.setReceiveTotal(Constants.ZERO); List<Orders> releaseOrders = ordersMapper.selectList(new QueryWrapper<Orders>().lambda().eq(Orders::getDeleted,Constants.ZERO).eq(Orders::getReleaseMemberId,member.getId())); List<Orders> releaseOrders = ordersMapper.selectList(new QueryWrapper<Orders>().lambda().eq(Orders::getDeleted,Constants.ZERO) .eq(Orders::getReleaseMemberId,member.getId())); if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(releaseOrders)){ userCenterVO.setReleaseTaskTotal(releaseOrders.size()); userCenterVO.setWaitCommentTotal(releaseOrders.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ordersStatus.waitPay.getKey())).collect(Collectors.toList()).size()); userCenterVO.setDoingTotal(releaseOrders.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ordersStatus.accept.getKey())).collect(Collectors.toList()).size()); userCenterVO.setWaitCommentTotal(releaseOrders.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ordersStatus.doing.getKey())&&Constants.equalsInteger(i.getCommentStatus(),Constants.ZERO)).collect(Collectors.toList()).size()); userCenterVO.setWaitCommentTotal(releaseOrders.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ordersStatus.done.getKey())&&Constants.equalsInteger(i.getCommentStatus(),Constants.ZERO)).collect(Collectors.toList()).size()); userCenterVO.setDoingTotal(releaseOrders.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ordersStatus.doing.getKey())).collect(Collectors.toList()).size()); userCenterVO.setWaitReceiveTotal(releaseOrders.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ordersStatus.wait.getKey())).collect(Collectors.toList()).size()); } List<Orders> acceptOrders = ordersMapper.selectList(new QueryWrapper<Orders>().lambda().eq(Orders::getDeleted,Constants.ZERO).eq(Orders::getAcceptMemberId,member.getId())); if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(acceptOrders)){ userCenterVO.setReceiveTotal(acceptOrders.size()); userCenterVO.setTaskingTotal(acceptOrders.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ordersStatus.accept.getKey())).collect(Collectors.toList()).size()); userCenterVO.setDoneTotal(releaseOrders.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ordersStatus.doing.getKey())).collect(Collectors.toList()).size()); userCenterVO.setTaskingTotal(acceptOrders.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ordersStatus.doing.getKey())).collect(Collectors.toList()).size()); userCenterVO.setDoneTotal(acceptOrders.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ordersStatus.done.getKey())).collect(Collectors.toList()).size()); } member.setUserCenterVO(userCenterVO); return member; server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java
@@ -3,6 +3,7 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.doumee.biz.system.SystemDictDataBiz; import com.doumee.config.wx.SendWxMessage; import com.doumee.config.wx.WxMiniConfig; import com.doumee.config.wx.WxMiniUtilService; import com.doumee.core.constants.Constants; @@ -18,6 +19,7 @@ import com.doumee.dao.business.model.*; import com.doumee.dao.dto.*; import com.doumee.dao.vo.OrderReleaseVO; import com.doumee.service.business.AliSmsService; import com.doumee.service.business.OrdersService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -45,6 +47,7 @@ import java.math.BigDecimal; import java.util.*; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; /** * 订单信息记录Service实现 @@ -87,6 +90,12 @@ @Autowired private WxMiniUtilService wxMiniUtilService; @Autowired private SendWxMessage sendWxMessage; @Autowired private AliSmsService aliSmsService; @Resource private RedisTemplate<String,Object> redisTemplate; @@ -96,6 +105,11 @@ OrderReleaseVO orderReleaseVO = new OrderReleaseVO(); Object objects = null; this.initVerification(orders); Member member = memberMapper.selectById(orders.getMember().getId()); if(Objects.isNull(member)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"用户信息异常"); } orders.setCreateTime(new Date()); orders.setUpdateTime(orders.getUpdateTime()); orders.setPayStatus(Constants.ZERO); @@ -120,16 +134,19 @@ } //用餐订单 if(Constants.equalsInteger(orders.getType(),Constants.TWO)){ orders.setPayAccount(orders.getEstimatedAccount()); Long tcje = Long.valueOf(new BigDecimal(orders.getPayAccount().toString()).multiply(orders.getPlatformRata()).intValue()); orders.setReceiveAccount(orders.getPayAccount() - tcje); orders.setStatus(Constants.ordersStatus.waitPay.getKey()); orders.setOutTradeNo(UUID.randomUUID().toString().replace("-","")); orders.setPayAccount(orders.getEstimatedAccount()); //唤起支付业务 objects = this.getWxPayResponse(orders,orders.getMember().getOpenid()); objects = this.getWxPayResponse(orders,member.getOpenid()); orderReleaseVO.setObject(objects); }else{ orders.setStatus(Constants.ordersStatus.wait.getKey()); } ordersMapper.insert(orders); orderReleaseVO.setId(orders.getId()); if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(orders.getMultifileList())){ List<Multifile> multifileList = orders.getMultifileList(); @@ -147,7 +164,7 @@ multifileMapper.insert(multifileList); } //更新用户发单量 memberMapper.update(new UpdateWrapper<Member>().lambda().setSql(" receive_num = ( receive_num + 1 )").eq(Member::getId,orders.getMember().getId())); memberMapper.update(new UpdateWrapper<Member>().lambda().setSql(" PUBLISH_NUM = ( ifnull(PUBLISH_NUM,0) + 1 )").eq(Member::getId,orders.getMember().getId())); //创建操作日志 Constants.OrdersLog ordersLog = Constants.OrdersLog.UPLOAD; @@ -178,6 +195,7 @@ request.setSpAppid(WxMiniConfig.wxProperties.getAppId()); request.setSubMchid(WxMiniConfig.wxProperties.getSubMchId()); request.setSubAppid(WxMiniConfig.wxProperties.getSubAppId()); Payer payer = new Payer(); payer.setSubOpenid(openid); request.setPayer(payer); @@ -653,18 +671,28 @@ .set(Orders::getStatus,Constants.ordersStatus.accept.getKey()) ); //更新接单量 memberMapper.update(new UpdateWrapper<Member>().lambda().setSql(" publish_num = (publish_num + 1 )").eq(Member::getId,member.getId())); memberMapper.update(new UpdateWrapper<Member>().lambda().setSql(" RECEIVE_NUM = (ifnull(RECEIVE_NUM,0) + 1 )").eq(Member::getId,member.getId())); //创建操作日志 Constants.OrdersLog ordersLog = Constants.OrdersLog.RECEIVE; this.saveOrderLog(orders,ordersLog, ordersLog.getInfo(),member.getId(),null); //TODO 微信公众号提醒 已接单提醒 IdentityInfo wokerIdentityInfo = identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda() .eq(IdentityInfo::getMemberId,member.getId()) .eq(IdentityInfo::getType,orders.getType()) .eq(IdentityInfo::getAuditStatus,Constants.TWO) .last("limit 1") ); if(org.apache.commons.lang3.StringUtils.isNotBlank(member.getOpenid())&&Objects.nonNull(wokerIdentityInfo)){ //发送微信通知 sendWxMessage.acceptMessage(member.getOpenid(),orders,wokerIdentityInfo.getLinkName(),wokerIdentityInfo.getTelephone()); } //短信通知 aliSmsService.businessSendSms(Constants.smsContent.accept.getKey(),member.getTelephone(),orders,null, wokerIdentityInfo,categoryMapper); } @@ -746,7 +774,23 @@ this.saveOrderLog(model,ordersLog, ordersLog.getInfo(),orders.getMember().getId(),null); //TODO 通知接单人 订单发生变更 //通知接单人 订单发生变更 Member member = memberMapper.selectById(orders.getAcceptMemberId()); //发送微信通知 sendWxMessage.orderUpdMessage(member.getOpenid(),orders); IdentityInfo wokerIdentityInfo = identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda() .eq(IdentityInfo::getMemberId,member.getId()) .eq(IdentityInfo::getType,orders.getType()) .eq(IdentityInfo::getAuditStatus,Constants.TWO) .last("limit 1") ); if(Objects.nonNull(wokerIdentityInfo)){ //短信通知 aliSmsService.businessSendSms(Constants.smsContent.orderUpd.getKey(),wokerIdentityInfo.getTelephone(),orders,null, null,categoryMapper); } } @@ -826,8 +870,12 @@ Constants.OrdersLog ordersLog = Constants.OrdersLog.UPD_DISAGREE; this.saveOrderLog(orders,ordersLog, ordersLog.getInfo(),confirmUpdOrderDTO.getMember().getId(),null); //TODO 发送不同意变更通知 } //短信通知 aliSmsService.businessSendSms(!Constants.equalsInteger(confirmUpdOrderDTO.getStatus(),Constants.ONE)? Constants.smsContent.agreeUpd.getKey():Constants.smsContent.disAgreeUpd.getKey() ,orders.getLinkPhone(),null,null, null,categoryMapper); } @@ -844,6 +892,7 @@ }else{ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"非您的订单无法进行该操作"); } } @@ -895,6 +944,7 @@ //退款业务 WithdrawalOrders withdrawalOrders = new WithdrawalOrders(); withdrawalOrders.setCreateTime(new Date()); withdrawalOrders.setDeleted(Constants.ZERO); withdrawalOrders.setMemberId(orders.getReleaseMemberId()); withdrawalOrders.setAmount(orders.getPayAccount()); withdrawalOrders.setStatus(Constants.ZERO); @@ -948,8 +998,6 @@ .set(Orders::getCancelType,Constants.ONE) .eq(Orders::getId,orders.getId()) ); //TODO 发单方取消订单通知接单方 //减少接单量 memberMapper.update(new UpdateWrapper<Member>().lambda().setSql("receive_num = (receive_num - 1) ").eq(Member::getId,orders.getAcceptMemberId())); } @@ -961,8 +1009,26 @@ this.saveOrderLog(orders,ordersLog, ordersLog.getInfo(),member.getId(),null); List<Member> members = memberMapper.selectList(new QueryWrapper<Member>().lambda() .and(i->i.eq(Member::getId,orders.getReleaseMemberId()).or().eq(Member::getId,orders.getAcceptMemberId())) ); if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(members)){ List<String> openIdList = members.stream().map(i->i.getOpenid()).collect(Collectors.toList()); //发送微信通知 sendWxMessage.cancelMessage(openIdList,orders,Constants.ONE); } IdentityInfo wokerIdentityInfo = identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda() .eq(IdentityInfo::getMemberId,orders.getAcceptMemberId()) .eq(IdentityInfo::getType,orders.getType()) .eq(IdentityInfo::getAuditStatus,Constants.TWO) .last("limit 1") ); if(Objects.nonNull(wokerIdentityInfo)){ //短信通知 aliSmsService.businessSendSms(Constants.smsContent.releaseCancel.getKey(),wokerIdentityInfo.getTelephone(),orders,null, null,categoryMapper); } } @@ -1009,8 +1075,18 @@ this.saveOrderLog(orders,ordersLog, ordersLog.getInfo(),member.getId(),null); //TODO 接单方取消订单通知 List<Member> members = memberMapper.selectList(new QueryWrapper<Member>().lambda() .and(i->i.eq(Member::getId,orders.getReleaseMemberId()).or().eq(Member::getId,orders.getAcceptMemberId())) ); if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(members)){ List<String> openIdList = members.stream().map(i->i.getOpenid()).collect(Collectors.toList()); //发送微信通知 sendWxMessage.cancelMessage(openIdList,orders,Constants.TWO); } //短信通知 aliSmsService.businessSendSms(Constants.smsContent.receiveCancel.getKey(),member.getTelephone(),orders,null, null,categoryMapper); } @@ -1037,6 +1113,11 @@ if(!Constants.equalsInteger(orders.getReleaseMemberId(),doneOrderDTO.getMember().getId())){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"非您的订单无法进行该操作"); } Member payMember = memberMapper.selectById(doneOrderDTO.getMember().getId()); if(Objects.isNull(payMember)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"用户信息异常"); } OrderReleaseVO orderReleaseVO = new OrderReleaseVO(); orderReleaseVO.setId(orders.getId()); Object object = null; @@ -1049,7 +1130,7 @@ orders.setOutTradeNo(UUID.randomUUID().toString().replace("-","")); ordersMapper.updateById(orders); //唤起支付业务 object = this.getWxPayResponse(orders,doneOrderDTO.getMember().getOpenid()); object = this.getWxPayResponse(orders,payMember.getOpenid()); orderReleaseVO.setObject(object); }else{ orders.setStatus(Constants.ordersStatus.done.getKey()); @@ -1082,6 +1163,22 @@ Constants.OrdersLog ordersLog = Constants.OrdersLog.DONE; this.saveOrderLog(orders,ordersLog, ordersLog.getInfo(),doneOrderDTO.getMember().getId(),null); sendWxMessage.revenueMessage(member.getOpenid(),orders); //短信通知接单方 if(Objects.nonNull(orders.getAcceptMemberId())){ IdentityInfo wokerIdentityInfo = identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda() .eq(IdentityInfo::getMemberId,orders.getAcceptMemberId()) .eq(IdentityInfo::getType,orders.getType()) .eq(IdentityInfo::getAuditStatus,Constants.TWO) .last("limit 1") ); if(Objects.nonNull(wokerIdentityInfo)){ aliSmsService.businessSendSms(Constants.smsContent.pay.getKey(),wokerIdentityInfo.getTelephone(),orders,null, null,categoryMapper); } } } return orderReleaseVO; } @@ -1172,6 +1269,32 @@ Constants.OrdersLog ordersLog = Constants.OrdersLog.SYSTEM_CANCEL; this.saveOrderLog(orders,ordersLog, ordersLog.getInfo(),null,loginUserInfo.getId()); List<Member> members = memberMapper.selectList(new QueryWrapper<Member>().lambda() .and(i->i.eq(Member::getId,orders.getReleaseMemberId()).or().eq(Member::getId,orders.getAcceptMemberId())) ); if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(members)){ List<String> openIdList = members.stream().map(i->i.getOpenid()).collect(Collectors.toList()); //发送微信通知 sendWxMessage.cancelMessage(openIdList,orders,Constants.ZERO); } //短信通知发单方 aliSmsService.businessSendSms(Constants.smsContent.platformCancel.getKey(),orders.getLinkPhone(),orders,null, null,categoryMapper); //短信通知接单方 if(Objects.nonNull(orders.getAcceptMemberId())){ IdentityInfo wokerIdentityInfo = identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda() .eq(IdentityInfo::getMemberId,orders.getAcceptMemberId()) .eq(IdentityInfo::getType,orders.getType()) .eq(IdentityInfo::getAuditStatus,Constants.TWO) .last("limit 1") ); if(Objects.nonNull(wokerIdentityInfo)){ aliSmsService.businessSendSms(Constants.smsContent.platformCancel2.getKey(),wokerIdentityInfo.getTelephone(),orders,null, null,categoryMapper); } } } @@ -1207,9 +1330,10 @@ .eq(Orders::getId,orders.getId()) ); memberMapper.update(new UpdateWrapper<Member>().lambda() .setSql(" score = ( total_score +" + commentDTO.getLevel() + " ) / (score_order_num + 1 )") .setSql(" total_score = total_score +" + commentDTO.getLevel()) .setSql(" score_order_num = score_order_num + 1 " ).eq(Member::getId,orders.getAcceptMemberId()) .setSql(" score = ( ifnull(total_score,0) +" + commentDTO.getLevel() + " ) / (ifnull(score_order_num,0) + 1 )") .setSql(" total_score = ifnull(total_score,0) +" + commentDTO.getLevel()) .setSql(" score_order_num = ifnull(score_order_num,0) + 1 " ) .eq(Member::getId,orders.getAcceptMemberId()) ); //日志存储 Constants.OrdersLog ordersLog = Constants.OrdersLog.COMMENT; @@ -1301,7 +1425,22 @@ this.saveOrderLog(orders,ordersLog, ordersLog.getInfo(),orders.getReleaseMemberId(),null); //TODO 通知接单方 款项已到账 // 通知接单方 款项已到账 sendWxMessage.revenueMessage(member.getOpenid(),orders); //短信通知接单方 if(Objects.nonNull(orders.getAcceptMemberId())){ IdentityInfo wokerIdentityInfo = identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda() .eq(IdentityInfo::getMemberId,orders.getAcceptMemberId()) .eq(IdentityInfo::getType,orders.getType()) .eq(IdentityInfo::getAuditStatus,Constants.TWO) .last("limit 1") ); if(Objects.nonNull(wokerIdentityInfo)){ aliSmsService.businessSendSms(Constants.smsContent.pay.getKey(),wokerIdentityInfo.getTelephone(),orders,null, null,categoryMapper); } } } } @@ -1648,7 +1787,9 @@ if(CollectionUtils.isEmpty(memberList)){ continue; } Member member = memberList.get(Constants.ZERO); Member releaseMember = memberMapper.selectById(orders.getReleaseMemberId()); //自动派单 Orders model = ordersMapper.selectById(orders.getStatus()); if(!Constants.equalsInteger(model.getStatus(),Constants.ONE)){ @@ -1663,13 +1804,34 @@ ); //更新接单量 memberMapper.update(new UpdateWrapper<Member>().lambda().setSql(" publish_num = (publish_num + 1 )").eq(Member::getId,member.getId())); memberMapper.update(new UpdateWrapper<Member>().lambda().setSql(" publish_num = (ifnull(publish_num,0) + 1 )").eq(Member::getId,member.getId())); //创建操作日志 Constants.OrdersLog ordersLog = Constants.OrdersLog.AUTO; this.saveOrderLog(orders,ordersLog, ordersLog.getInfo(),member.getId(),null); IdentityInfo wokerIdentityInfo = identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda() .eq(IdentityInfo::getMemberId,member.getId()) .eq(IdentityInfo::getType,orders.getType()) .eq(IdentityInfo::getAuditStatus,Constants.TWO) .last("limit 1") ); //通知发单方 if(org.apache.commons.lang3.StringUtils.isNotBlank(releaseMember.getOpenid())&&Objects.nonNull(wokerIdentityInfo)){ //发送微信通知 sendWxMessage.acceptMessage(releaseMember.getOpenid(),orders,wokerIdentityInfo.getLinkName(),wokerIdentityInfo.getTelephone()); } //通知接单方 sendWxMessage.autoDispatchMessage(member.getOpenid(),orders,GeoUtils.haversineDistance( orders.getLgt().doubleValue(), orders.getLat().doubleValue(), member.getDriverIdentityModel().getLgt().doubleValue(), member.getDriverIdentityModel().getLat().doubleValue() )); aliSmsService.businessSendSms(Constants.smsContent.dispatch.getKey(),orders.getLinkPhone(),orders,null, null,categoryMapper); } } server/services/src/main/java/com/doumee/service/business/impl/WithdrawalOrdersServiceImpl.java
@@ -1,6 +1,7 @@ package com.doumee.service.business.impl; import com.alibaba.fastjson.JSONObject; import com.doumee.config.wx.SendWxMessage; import com.doumee.config.wx.TransferToUser; import com.doumee.config.wx.WXPayUtility; import com.doumee.config.wx.WxMiniConfig; @@ -9,6 +10,7 @@ import com.doumee.core.exception.BusinessException; import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; import com.doumee.core.utils.DateUtil; import com.doumee.core.utils.Utils; import com.doumee.dao.business.MemberMapper; import com.doumee.dao.business.MemberRevenueMapper; @@ -50,6 +52,9 @@ @Autowired private MemberRevenueMapper memberRevenueMapper; @Autowired private SendWxMessage sendWxMessage; @Override public Integer create(WithdrawalOrders withdrawalOrders) { @@ -249,44 +254,45 @@ @Override public void transferSuccess(String outBillNo,Boolean isSuccess){ //转账成功 if(isSuccess){ withdrawalOrdersMapper.update(new UpdateWrapper<WithdrawalOrders>().lambda() .set(WithdrawalOrders::getStatus,Constants.ONE) .eq(WithdrawalOrders::getOutBillNo,outBillNo) ); }else { WithdrawalOrders withdrawalOrders = withdrawalOrdersMapper.selectOne(new QueryWrapper<WithdrawalOrders>().lambda() .eq(WithdrawalOrders::getOutBillNo,outBillNo).last("limit 1")); if(Objects.isNull(withdrawalOrders)){ return; } Member member = memberMapper.selectById(withdrawalOrders.getMemberId()); if(Objects.isNull(member)){ return; } //更新用户余额 memberMapper.update(new UpdateWrapper<Member>().lambda().setSql(" AMOUNT = AMOUNT + " + withdrawalOrders.getAmount() ).eq(Member::getId,withdrawalOrders.getMemberId())); //存储流水记录 MemberRevenue memberRevenue = new MemberRevenue(); memberRevenue.setCreateTime(new Date()); memberRevenue.setTransactionNo(withdrawalOrders.getOutBillNo()); memberRevenue.setDeleted(Constants.ZERO); memberRevenue.setMemberId(withdrawalOrders.getMemberId()); memberRevenue.setType(Constants.FOUR); memberRevenue.setOptType(Constants.ONE); memberRevenue.setBeforeAmount(member.getAmount()); memberRevenue.setAmount(withdrawalOrders.getAmount()); memberRevenue.setAfterAmount(member.getAmount() + withdrawalOrders.getAmount()); memberRevenue.setObjId(withdrawalOrders.getId()); memberRevenue.setRemark(Constants.RevenueType.getInfo(memberRevenue.getType())); memberRevenue.setObjType(Constants.ONE); memberRevenue.setDeleted(Constants.ZERO); memberRevenue.setStatus(Constants.ZERO); memberRevenueMapper.insert(memberRevenue); WithdrawalOrders withdrawalOrders = withdrawalOrdersMapper.selectOne(new QueryWrapper<WithdrawalOrders>().lambda() .eq(WithdrawalOrders::getOutBillNo,outBillNo).last("limit 1")); Member member = memberMapper.selectById(withdrawalOrders.getMemberId()); if(Objects.isNull(member)){ return; } if(Objects.nonNull(withdrawalOrders)){ //转账成功 if(isSuccess){ withdrawalOrdersMapper.update(new UpdateWrapper<WithdrawalOrders>().lambda() .set(WithdrawalOrders::getStatus,Constants.ONE) .set(WithdrawalOrders::getUpdateTime, DateUtil.getCurrDateTime()) .eq(WithdrawalOrders::getOutBillNo,outBillNo) ); withdrawalOrders.setUpdateTime(new Date()); sendWxMessage.withdrawalMessage(member.getOpenid(),withdrawalOrders); }else { //更新用户余额 memberMapper.update(new UpdateWrapper<Member>().lambda().setSql(" AMOUNT = AMOUNT + " + withdrawalOrders.getAmount() ).eq(Member::getId,withdrawalOrders.getMemberId())); //存储流水记录 MemberRevenue memberRevenue = new MemberRevenue(); memberRevenue.setCreateTime(new Date()); memberRevenue.setTransactionNo(withdrawalOrders.getOutBillNo()); memberRevenue.setDeleted(Constants.ZERO); memberRevenue.setMemberId(withdrawalOrders.getMemberId()); memberRevenue.setType(Constants.FOUR); memberRevenue.setOptType(Constants.ONE); memberRevenue.setBeforeAmount(member.getAmount()); memberRevenue.setAmount(withdrawalOrders.getAmount()); memberRevenue.setAfterAmount(member.getAmount() + withdrawalOrders.getAmount()); memberRevenue.setObjId(withdrawalOrders.getId()); memberRevenue.setRemark(Constants.RevenueType.getInfo(memberRevenue.getType())); memberRevenue.setObjType(Constants.ONE); memberRevenue.setDeleted(Constants.ZERO); memberRevenue.setStatus(Constants.ZERO); memberRevenueMapper.insert(memberRevenue); } } } @Override server/services/src/main/resources/application-dev.yml
@@ -88,6 +88,7 @@ appId: wx6cc1087ca79db7f6 #服务商在微信开放平台(移动应用)或公众平台(公众号/小程序)上申请的一个唯一标识 apiV3Key: 0a056faa107c2b2944b9d6a9aa6d4142 #7tG4Vk9Zp2L8dXw5Jq0N3hR6yE1sF3cB serialNumer: 6696086F6EFB8D6A4F821BD47DDBAF75C3BC1209 #38495CE0137D90E4DC4F64F7ECDE035A35470BE3 #服务商证书序列号 payPublicKeyId: PUB_KEY_ID_0117000719222024112700219100000508 #商户/平台支付公钥id #mchKey: W97N53Q71326D6JZ2E9HY5M4VT4BAC8S notifyUrl: https://test.doumee.cn/jinkuai_admin/web/wxPayNotify refundNotifyUrl: https://test.doumee.cn/jinkuai_admin/web/wxRefundNotify @@ -104,7 +105,7 @@ wechatPubKeyPath: d://jinkuai/shanghu/pub_key.pem #商户支付公钥 wechatPrivateKeyPath: d://jinkuai/shanghu/apiclient_key.pem #商户私钥 wechatNotifyUrl: https://test.doumee.cn/jinkuai_admin/web/wechat/transferNotify #商户转账回调地址 wechatApiV3Key: 7tG4Vk9Zp2L8dXw5Jq0N3hR6yE1sF3cB existsSub: 1 appSecret: @@ -114,7 +115,7 @@ subAppSecret: add86d6406f5c14501ac5bbb1a60e004 #小程序秘钥 #子商户------------end---- # mchKey: u4TSNtv0wFP7WRfnxBgijYOtRhS9FvlM typeId: gybike typeId: jinkuai #wx: server/services/src/main/resources/application-pro.yml
@@ -1,9 +1,9 @@ spring: # 数据源配置 datasource: url: jdbc:mysql://192.168.0.211:3306/jinkuai?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai url: jdbc:mysql://b66cc1a382964a6a9d46a522f2dfe672in01.internal.cn-south-1.mysql.rds.myhuaweicloud.com:3306/jinkuai?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai username: root password: Doumee@168 password: Jinkuai!@#$%^ driver-class-name: com.mysql.cj.jdbc.Driver type: com.alibaba.druid.pool.DruidDataSource redis: @@ -48,37 +48,44 @@ basic: enable: true username: admin password: password: doumee@168 ########################微信支付相关配置######################## wx: pay: #服务商---------start------- appId: wx48fd8faa35cc8277 mchId: 1661770902 apiV3Key: iF3kC8pL8dZ9iU3hN5fX9zI6eF4xQ6fT serialNumer: 368B835A194384FD583B83B77977B84127D2F655 mchKey: W97N53Q71326D6JZ2E9HY5M4VT4BAC8S # notifyUrl: http://xiaopiqiu3.natapp1.cc/api/wxPayNotify # refundNotifyUrl: http://xiaopiqiu3.natapp1.cc/api/wxRefundNotify notifyUrl: https://dmtest.ahapp.net/bike_h5_api/api/wxPayNotify refundNotifyUrl: https://dmtest.ahapp.net/bike_h5_api/api/wxRefundNotify keyPath: /usr/local/aliConfig/bike/apiclient_cert.p12 privateCertPath: /usr/local/aliConfig/bike/apiclient_cert.pem privateKeyPath: /usr/local/aliConfig/bike/apiclient_key.pem # keyPath: d://apiclient_cert.p12 # privateCertPath: d://apiclient_cert.pem # privateKeyPath: d://apiclient_key.pem #服务商---------start------- 参数详解地址 https://pay.weixin.qq.com/doc/v3/partner/4013080340 mchId: 1700071922 #服务商在微信支付侧的唯一身份标识 appId: wx6cc1087ca79db7f6 #服务商在微信开放平台(移动应用)或公众平台(公众号/小程序)上申请的一个唯一标识 apiV3Key: 0a056faa107c2b2944b9d6a9aa6d4142 #7tG4Vk9Zp2L8dXw5Jq0N3hR6yE1sF3cB serialNumer: 6696086F6EFB8D6A4F821BD47DDBAF75C3BC1209 #38495CE0137D90E4DC4F64F7ECDE035A35470BE3 #服务商证书序列号 payPublicKeyId: PUB_KEY_ID_0117000719222024112700219100000508 #商户/平台支付公钥id #mchKey: W97N53Q71326D6JZ2E9HY5M4VT4BAC8S notifyUrl: https://jinkuai.832smartfarm.com/jinkuai_admin/web/wxPayNotify refundNotifyUrl: https://jinkuai.832smartfarm.com/jinkuai_admin/web/wxRefundNotify keyPath: /usr/local/jars/payFile/apiclient_cert.p12 privateCertPath: /usr/local/jars/payFile/apiclient_cert.pem privateKeyPath: /usr/local/jars/payFile/apiclient_key.pem pubKeyPath: /usr/local/jars/payFile/pub_key.pem #商户支付公钥 #服务商-------------end--- #商户信息 wechatSerialNumer: 12C0F0DD0F3D2B565B45586D3FEA225EBF723BEC wechatPayPublicKeyId: PUB_KEY_ID_0117233260692025072500181939000603 #商户/平台支付公钥id wechatPubKeyPath: /usr/local/jars/payFile/shanghu/pub_key.pem #商户支付公钥 wechatPrivateKeyPath: /usr/local/jars/payFile/shanghu/apiclient_key.pem #商户私钥 wechatNotifyUrl: https://jinkuai.832smartfarm.com/jinkuai_admin/web/wechat/transferNotify #商户转账回调地址 wechatApiV3Key: 7tG4Vk9Zp2L8dXw5Jq0N3hR6yE1sF3cB existsSub: 1 appSecret: 1ceb7c9dff3c4330d653adc3ca55ea24 appSecret: #子商户------------start---- subAppId: wxcd2b89fd2ff065f8 #wxcd2b89fd2ff065f8 subAppSecret: 3462fa186da7cb06c544df8d8664b63a #3336812504c830b1c3c5243f9ece407a subMchId: 1661772003 subMchKey: EVM8E15TKXE0OEMJFC0V6UFVIOZ5CSQS subMchId: 1723326069 #子商户号 subAppId: wx332441ae5b12be7d #小程序id subAppSecret: add86d6406f5c14501ac5bbb1a60e004 #小程序秘钥 #子商户------------end---- # mchKey: u4TSNtv0wFP7WRfnxBgijYOtRhS9FvlM typeId: gybike typeId: jinkuai upload: type: blob server/services/src/main/resources/application-test.yml
@@ -76,15 +76,17 @@ pay: #服务商---------start------- 参数详解地址 https://pay.weixin.qq.com/doc/v3/partner/4013080340 mchId: 1700071922 #服务商在微信支付侧的唯一身份标识 appId: wx332441ae5b12be7d #服务商在微信开放平台(移动应用)或公众平台(公众号/小程序)上申请的一个唯一标识 appId: wx6cc1087ca79db7f6 #服务商在微信开放平台(移动应用)或公众平台(公众号/小程序)上申请的一个唯一标识 apiV3Key: 0a056faa107c2b2944b9d6a9aa6d4142 #7tG4Vk9Zp2L8dXw5Jq0N3hR6yE1sF3cB serialNumer: 7DCD480EB6DF3791721867A6EB57105DECEF38BE #38495CE0137D90E4DC4F64F7ECDE035A35470BE3 #服务商证书序列号 serialNumer: 6696086F6EFB8D6A4F821BD47DDBAF75C3BC1209 #38495CE0137D90E4DC4F64F7ECDE035A35470BE3 #服务商证书序列号 payPublicKeyId: PUB_KEY_ID_0117000719222024112700219100000508 #商户/平台支付公钥id #mchKey: W97N53Q71326D6JZ2E9HY5M4VT4BAC8S notifyUrl: https://test.doumee.cn/jinkuai_admin/web/wxPayNotify refundNotifyUrl: https://test.doumee.cn/jinkuai_admin/web/wxRefundNotify keyPath: /usr/local/jars/payFile/apiclient_cert.p12 privateCertPath: /usr/local/jars/payFile/apiclient_cert.pem privateKeyPath: /usr/local/jars/payFile/apiclient_key.pem pubKeyPath: /usr/local/jars/payFile/pub_key.pem #商户支付公钥 #服务商-------------end--- @@ -94,6 +96,7 @@ wechatPubKeyPath: /usr/local/jars/payFile/shanghu/pub_key.pem #商户支付公钥 wechatPrivateKeyPath: /usr/local/jars/payFile/shanghu/apiclient_key.pem #商户私钥 wechatNotifyUrl: https://test.doumee.cn/jinkuai_admin/web/wechat/transferNotify #商户转账回调地址 wechatApiV3Key: 7tG4Vk9Zp2L8dXw5Jq0N3hR6yE1sF3cB existsSub: 1 @@ -104,7 +107,7 @@ subAppSecret: add86d6406f5c14501ac5bbb1a60e004 #小程序秘钥 #子商户------------end---- # mchKey: u4TSNtv0wFP7WRfnxBgijYOtRhS9FvlM typeId: gybike typeId: jinkuai upload: type: blob server/web/src/main/resources/application.yml
@@ -12,7 +12,7 @@ spring: profiles: active: dev active: pro # JSON返回配置 jackson: # 默认时区