记得上下班打卡 | git大法好,push需谨慎

Commit 92e9c22a authored by jiangxiulong's avatar jiangxiulong

Merge remote-tracking branch 'origin/dev' into dev

parents e4b9eea0 21cb3fba
...@@ -217,10 +217,16 @@ public class DragonConstant { ...@@ -217,10 +217,16 @@ public class DragonConstant {
* MYSQL_REDIS_QUEUE * MYSQL_REDIS_QUEUE
*/ */
public enum MysqlRedisQueueEnum{ public enum MysqlRedisQueueEnum{
//支付相关队列
DRAGON_PAY_KEY("dragon:stream:dragon-pay","同步数据-支付"), DRAGON_PAY_KEY("dragon:stream:dragon-pay","同步数据-支付"),
DRAGON_REFUND_KEY ("dragon:stream:dragon-refund","同步数据-退款"), DRAGON_REFUND_KEY ("dragon:stream:dragon-refund","同步数据-退款"),
DRAGON_PAY_GROUP("dragon-pay-group","同步数据-支付-组"), DRAGON_PAY_GROUP("dragon-pay-group","同步数据-支付-组"),
DRAGON_REFUND_GROUP ("dragon-refund-group","同步数据-退款-组"); DRAGON_REFUND_GROUP ("dragon-refund-group","同步数据-退款-组"),
//商户通知相关队列
DRAGON_PAY_NOTIFY_KEY("dragon-pay-notify-key","支付异步通知"),
DRAGON_PAY_NOTIFY_GROUP ("dragon-pay-notify-group","支付异步通知-组"),
PAY_MCH_NOTIFY_ERROR_KEY("pay-mch-notify-error-key","商户异步通知失败"),
PAY_MCH_NOTIFY_ERROR_GROUP ("pay-mch-notify-error-group","商户异步通知失败");
private String code; private String code;
private String message; private String message;
MysqlRedisQueueEnum(String code, String message) { MysqlRedisQueueEnum(String code, String message) {
...@@ -237,6 +243,7 @@ public class DragonConstant { ...@@ -237,6 +243,7 @@ public class DragonConstant {
* CHANNEL_REDIS_QUEUE * CHANNEL_REDIS_QUEUE
*/ */
public enum ChannelRedisQueueEnum{ public enum ChannelRedisQueueEnum{
//支付回调相关队列
WECHAT_PAY_KEY("wechat-pay","微信-支付-回调"), WECHAT_PAY_KEY("wechat-pay","微信-支付-回调"),
WECHAT_REFUND_KEY("wechat-refund","微信-退款-回调"), WECHAT_REFUND_KEY("wechat-refund","微信-退款-回调"),
ALIPAY_PAY_KEY("alipay-pay","支付宝-支付-回调"), ALIPAY_PAY_KEY("alipay-pay","支付宝-支付-回调"),
...@@ -245,6 +252,7 @@ public class DragonConstant { ...@@ -245,6 +252,7 @@ public class DragonConstant {
WECHAT_REFUND_GROUP("wechat-refund-group","微信-退款-回调-组"), WECHAT_REFUND_GROUP("wechat-refund-group","微信-退款-回调-组"),
ALIPAY_PAY_GROUP("alipay-pay-group","支付宝-支付-回调-组"), ALIPAY_PAY_GROUP("alipay-pay-group","支付宝-支付-回调-组"),
ALIPAY_REFUND_GROUP ("alipay-refund-group","支付宝-退款-回调-组"); ALIPAY_REFUND_GROUP ("alipay-refund-group","支付宝-退款-回调-组");
private String code; private String code;
private String message; private String message;
ChannelRedisQueueEnum(String code, String message) { ChannelRedisQueueEnum(String code, String message) {
......
...@@ -10,7 +10,7 @@ import javax.servlet.http.HttpServletRequest; ...@@ -10,7 +10,7 @@ import javax.servlet.http.HttpServletRequest;
public interface IDragonOrdersService { public interface IDragonOrdersService {
ResponseDto<DragonPayBaseRespDto> dragonPay(DragonPayBaseReqDto dragonPayBaseReqDto); ResponseDto<DragonPayBaseRespDto> dragonPay(DragonPayBaseReqDto dragonPayBaseReqDto);
void dragonNotify(HttpServletRequest request,String payType,String deviceFrom); String dragonNotify(HttpServletRequest request,String payType,String deviceFrom);
DragonPayOrderQueryRespDto checkOrderStatusByCode(String code); DragonPayOrderQueryRespDto checkOrderStatusByCode(String code);
......
package com.liquidnet.commons.lang.util; package com.liquidnet.commons.lang.util;
import org.apache.commons.lang3.StringUtils;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.UUID; import java.util.UUID;
...@@ -67,7 +65,11 @@ public class IDGenerator { ...@@ -67,7 +65,11 @@ public class IDGenerator {
} }
public static void main(String[] args) { public static void main(String[] args) {
System.out.println(IDGenerator.payCode()); System.out.println(""+IDGenerator.payCode());
System.out.println(IDGenerator.refundCode()); System.out.println(""+IDGenerator.refundCode());
System.out.println("nextTimeId==="+IDGenerator.nextTimeId());
System.out.println("nextMilliId==="+IDGenerator.nextMilliId());
System.out.println("nextSnowId==="+IDGenerator.nextSnowId());
System.out.println("get32UUID==="+IDGenerator.get32UUID());
} }
} }
...@@ -17,6 +17,10 @@ public class DragonOrders implements Serializable { ...@@ -17,6 +17,10 @@ public class DragonOrders implements Serializable {
@TableId(value = "mid", type = IdType.AUTO) @TableId(value = "mid", type = IdType.AUTO)
private Long mid; private Long mid;
/**
* order_id
*/
private String orderId;
/** /**
* status * status
*/ */
......
...@@ -335,19 +335,20 @@ public class AdamLoginController { ...@@ -335,19 +335,20 @@ public class AdamLoginController {
@ApiOperation(value = "微信小程序登录凭证校验", notes = "这里仅用于获取OPENID使用。登录凭证校验。通过 wx.login 接口获得临时登录凭证 code 后传到开发者服务器调用此接口完成登录流程。更多使用方法详见 https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/login/auth.code2Session.html") @ApiOperation(value = "微信小程序登录凭证校验", notes = "这里仅用于获取OPENID使用。登录凭证校验。通过 wx.login 接口获得临时登录凭证 code 后传到开发者服务器调用此接口完成登录流程。更多使用方法详见 https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/login/auth.code2Session.html")
@GetMapping(value = {"wxa/code2session"}) @GetMapping(value = {"wxa/code2session"})
public ResponseDto<String> wxaCode2Session(@RequestParam String jsCode) { public ResponseDto<String> wxaCode2Session(@RequestParam String jsCode) {
String openId = null; String openId = null, respJStr = null;
try { try {
String url = AdamWechatConst.API_URL_JS_CODE2SESSION.replace("APPID", AdamWechatConst.zhengzaiAppletAppid) String url = AdamWechatConst.API_URL_JS_CODE2SESSION.replace("APPID", AdamWechatConst.zhengzaiAppletAppid)
.replace("SECRET", AdamWechatConst.zhengzaiAppletSecret).replace("JSCODE", jsCode); .replace("SECRET", AdamWechatConst.zhengzaiAppletSecret).replace("JSCODE", jsCode);
String respJStr = HttpUtil.get(url, null); log.debug("jsCode={},url={}", jsCode, url);
JsonNode respJNode = JsonUtils.fromJson(respJStr, JsonNode.class); respJStr = HttpUtil.get(url, null);
if (null == respJNode || !"0".equalsIgnoreCase(respJNode.get("errcode").asText())) { JsonNode respJNode = JsonUtils.fromJson(respJStr, JsonNode.class), respErrcode;
if (null == respJNode || (((respErrcode = respJNode.get("errcode")) != null) && !"0".equalsIgnoreCase(respErrcode.asText()))) {
log.warn("WX.API调用失败[{}]", respJStr); log.warn("WX.API调用失败[{}]", respJStr);
return ResponseDto.success(null); return ResponseDto.success(null);
} }
openId = respJNode.get("openid").asText(); openId = respJNode.get("openid").asText();
} catch (Exception e) { } catch (Exception e) {
log.error("WX.API调用异常[jsCode:{}]", jsCode, e); log.error("WX.API调用异常[jsCode:{},respJStr={}]", jsCode, respJStr, e);
} }
return ResponseDto.success(openId); return ResponseDto.success(openId);
} }
...@@ -356,19 +357,20 @@ public class AdamLoginController { ...@@ -356,19 +357,20 @@ public class AdamLoginController {
@ApiOperation(value = "微信网站应用登录", notes = "这里仅用于获取OPENID使用。方法详见 https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Wechat_Login.html") @ApiOperation(value = "微信网站应用登录", notes = "这里仅用于获取OPENID使用。方法详见 https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Wechat_Login.html")
@GetMapping(value = {"wx/oauth2/access_token"}) @GetMapping(value = {"wx/oauth2/access_token"})
public ResponseDto<String> wxOauth2AccessToken(@RequestParam String code) { public ResponseDto<String> wxOauth2AccessToken(@RequestParam String code) {
String openId = null; String openId = null, respJStr = null;
try { try {
String url = AdamWechatConst.API_URL_OAUTH2_ACCESS_TOKEN.replace("APPID", AdamWechatConst.zhengzaiServiceAppid) String url = AdamWechatConst.API_URL_OAUTH2_ACCESS_TOKEN.replace("APPID", AdamWechatConst.zhengzaiServiceAppid)
.replace("SECRET", AdamWechatConst.zhengzaiServiceSecret).replace("CODE", code); .replace("SECRET", AdamWechatConst.zhengzaiServiceSecret).replace("CODE", code);
String respJStr = HttpUtil.get(url, null); log.debug("code={},url={}", code, url);
JsonNode respJNode = JsonUtils.fromJson(respJStr, JsonNode.class); respJStr = HttpUtil.get(url, null);
if (null == respJNode || !"0".equalsIgnoreCase(respJNode.get("errcode").asText())) { JsonNode respJNode = JsonUtils.fromJson(respJStr, JsonNode.class), respErrcode;
if (null == respJNode || (((respErrcode = respJNode.get("errcode")) != null) && !"0".equalsIgnoreCase(respErrcode.asText()))) {
log.warn("WX.API调用失败[{}]", respJStr); log.warn("WX.API调用失败[{}]", respJStr);
return ResponseDto.success(null); return ResponseDto.success(null);
} }
openId = respJNode.get("openid").asText(); openId = respJNode.get("openid").asText();
} catch (Exception e) { } catch (Exception e) {
log.error("WX.API调用异常[code:{}]", code, e); log.error("WX.API调用异常[jsCode:{},respJStr={}]", code, respJStr, e);
} }
return ResponseDto.success(openId); return ResponseDto.success(openId);
} }
......
...@@ -26,7 +26,7 @@ public class RedisPayReceiver implements StreamListener<String, MapRecord<String ...@@ -26,7 +26,7 @@ public class RedisPayReceiver implements StreamListener<String, MapRecord<String
@Override @Override
public void onMessage(MapRecord<String, String, String> message) { public void onMessage(MapRecord<String, String, String> message) {
log.info("接受到来自redis REFUND 的消息"); log.info("接受到来自redis PAY 的消息");
System.out.println("message id " + message.getId()); System.out.println("message id " + message.getId());
System.out.println("stream " + message.getStream()); System.out.println("stream " + message.getStream());
System.out.println("body " + message.getValue()); System.out.println("body " + message.getValue());
...@@ -42,8 +42,6 @@ public class RedisPayReceiver implements StreamListener<String, MapRecord<String ...@@ -42,8 +42,6 @@ public class RedisPayReceiver implements StreamListener<String, MapRecord<String
log.debug("CONSUMER SQL result of execution:{}", rstBatchSqls); log.debug("CONSUMER SQL result of execution:{}", rstBatchSqls);
if (rstBatchSqls) { if (rstBatchSqls) {
//应答 //应答
} else {
sendMySqlRedis(msg);
} }
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
...@@ -60,7 +58,7 @@ public class RedisPayReceiver implements StreamListener<String, MapRecord<String ...@@ -60,7 +58,7 @@ public class RedisPayReceiver implements StreamListener<String, MapRecord<String
try { try {
HashMap<String, String> map = new HashMap<>(); HashMap<String, String> map = new HashMap<>();
map.put("message", msg); map.put("message", msg);
MapRecord<String, String, String> record = StreamRecords.mapBacked(map).withStreamKey(DragonConstant.MysqlRedisQueueEnum.DRAGON_REFUND_KEY.getCode()); MapRecord<String, String, String> record = StreamRecords.mapBacked(map).withStreamKey(DragonConstant.MysqlRedisQueueEnum.DRAGON_PAY_KEY.getCode());
stringRedisTemplate.opsForStream().add(record); stringRedisTemplate.opsForStream().add(record);
return true; return true;
} catch (Exception e) { } catch (Exception e) {
......
...@@ -16,6 +16,7 @@ import lombok.Data; ...@@ -16,6 +16,7 @@ import lombok.Data;
@Data @Data
public class PayNotifyReqBo { public class PayNotifyReqBo {
private String notifyUrl; private String notifyUrl;
private String content;
private PayNotifyDto payNotifyDto; private PayNotifyDto payNotifyDto;
@Override @Override
......
...@@ -20,7 +20,7 @@ import javax.servlet.http.HttpServletRequest; ...@@ -20,7 +20,7 @@ import javax.servlet.http.HttpServletRequest;
public interface IPayChannelStrategy { public interface IPayChannelStrategy {
ResponseDto<DragonPayBaseRespDto> dragonPay(DragonPayBaseReqDto dragonPayBaseReqDto); ResponseDto<DragonPayBaseRespDto> dragonPay(DragonPayBaseReqDto dragonPayBaseReqDto);
void dragonNotify(HttpServletRequest request,String payType,String deviceFrom); String dragonNotify(HttpServletRequest request,String payType,String deviceFrom);
DragonPayOrderQueryRespDto checkOrderStatus(String code); DragonPayOrderQueryRespDto checkOrderStatus(String code);
} }
package com.liquidnet.service.dragon.channel.strategy.biz; package com.liquidnet.service.dragon.channel.strategy.biz;
import com.liquidnet.commons.lang.util.BeanUtil; import com.liquidnet.commons.lang.util.BeanUtil;
import com.liquidnet.commons.lang.util.HttpUtil;
import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.service.base.SqlMapping; import com.liquidnet.service.base.SqlMapping;
import com.liquidnet.service.dragon.bo.PayNotifyReqBo; import com.liquidnet.service.dragon.bo.PayNotifyReqBo;
import com.liquidnet.service.dragon.constant.DragonConstant; import com.liquidnet.service.dragon.constant.DragonConstant;
...@@ -11,7 +13,10 @@ import com.liquidnet.service.dragon.dto.PayNotifyDto; ...@@ -11,7 +13,10 @@ import com.liquidnet.service.dragon.dto.PayNotifyDto;
import com.liquidnet.service.dragon.entity.DragonOrders; import com.liquidnet.service.dragon.entity.DragonOrders;
import com.liquidnet.service.dragon.utils.DataUtils; import com.liquidnet.service.dragon.utils.DataUtils;
import com.liquidnet.service.dragon.utils.MqHandleUtil; import com.liquidnet.service.dragon.utils.MqHandleUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import java.time.LocalDateTime; import java.time.LocalDateTime;
...@@ -24,6 +29,7 @@ import java.time.LocalDateTime; ...@@ -24,6 +29,7 @@ import java.time.LocalDateTime;
* @Copyright: LightNet @ Copyright (c) 2021 * @Copyright: LightNet @ Copyright (c) 2021
* @date 2021/7/14 14:12 * @date 2021/7/14 14:12
*/ */
@Slf4j
public abstract class DragonPayBiz { public abstract class DragonPayBiz {
@Autowired @Autowired
private MqHandleUtil mqHandleUtil; private MqHandleUtil mqHandleUtil;
...@@ -35,6 +41,7 @@ public abstract class DragonPayBiz { ...@@ -35,6 +41,7 @@ public abstract class DragonPayBiz {
//构造订单 //构造订单
DragonOrders orders = new DragonOrders(); DragonOrders orders = new DragonOrders();
// orders.setMid(); // orders.setMid();
orders.setOrderId(IDGenerator.nextTimeId());
orders.setStatus(Integer.valueOf(DragonConstant.PayStatusEnum.STATUS_UNPAID.getCode())); orders.setStatus(Integer.valueOf(DragonConstant.PayStatusEnum.STATUS_UNPAID.getCode()));
orders.setCode(respDto.getCode()); orders.setCode(respDto.getCode());
orders.setType(dragonPayBaseReqDto.getType()); orders.setType(dragonPayBaseReqDto.getType());
...@@ -58,13 +65,14 @@ public abstract class DragonPayBiz { ...@@ -58,13 +65,14 @@ public abstract class DragonPayBiz {
// 持久化到数据库 // 持久化到数据库
boolean insertResult = mqHandleUtil.sendMySqlRedis( boolean insertResult = mqHandleUtil.sendMySqlRedis(
SqlMapping.get("dragon_orders.insert"), SqlMapping.get("dragon_orders.insert"),
new Object[]{orders.getStatus(), orders.getCode(), orders.getType() new Object[]{orders.getOrderId(),orders.getStatus(), orders.getCode(), orders.getType()
, orders.getPrice(), orders.getName(), orders.getDetail() , orders.getPrice(), orders.getName(), orders.getDetail()
, orders.getOrderCode(), orders.getClientIp() , orders.getOrderCode(), orders.getClientIp()
, orders.getNotifyUrl(), orders.getPaymentType(), , orders.getNotifyUrl(), orders.getPaymentType(),
orders.getPaymentId(), orders.getPaymentAt() orders.getPaymentId(), orders.getPaymentAt()
, orders.getFinishedAt(), orders.getCreatedAt() , orders.getFinishedAt(), orders.getCreatedAt()
, orders.getUpdatedAt()} , orders.getUpdatedAt(),orders.getDeletedAt()}
,DragonConstant.MysqlRedisQueueEnum.DRAGON_PAY_KEY.getCode()
); );
return orders; return orders;
} }
...@@ -83,4 +91,48 @@ public abstract class DragonPayBiz { ...@@ -83,4 +91,48 @@ public abstract class DragonPayBiz {
payNotifyReqBo.setPayNotifyDto(payNotifyDto); payNotifyReqBo.setPayNotifyDto(payNotifyDto);
return payNotifyReqBo; return payNotifyReqBo;
} }
public void createDragonOrderLogs(String paymentType,String content){
try {
String orderId = IDGenerator.nextTimeId();
LocalDateTime createAt = LocalDateTime.now();
LocalDateTime updateAt = null;
LocalDateTime deleteAt = null;
boolean insertResult = mqHandleUtil.sendMySqlRedis(
SqlMapping.get("dragon_order_logs.insert"),
new Object[]{orderId,paymentType,content, createAt, updateAt,deleteAt}
,DragonConstant.MysqlRedisQueueEnum.DRAGON_PAY_NOTIFY_KEY.getCode()
);
} catch (Exception e) {
log.error("dragon:createOrderLog:error msg:{}",e);
e.printStackTrace();
}
}
public void sendNotify(PayNotifyReqBo payNotifyReqBo){
PayNotifyDto payNotifyDto = payNotifyReqBo.getPayNotifyDto();
LocalDateTime nowTime = LocalDateTime.now();
MultiValueMap<String, String> params = new LinkedMultiValueMap();
params.add("status", payNotifyDto.getStatus().toString());
params.add("type", payNotifyDto.getType());
params.add("code", payNotifyDto.getCode());
params.add("paymentId", payNotifyDto.getPaymentId());
params.add("orderCode", payNotifyDto.getOrderCode());
params.add("price", payNotifyDto.getPrice().toString());
params.add("paymentType", payNotifyDto.getPaymentType());
String response = HttpUtil.post(payNotifyReqBo.getNotifyUrl(), params);
log.debug("PAY RESPONSE=" + response);
if (response.equals("success")) {
} else {
// sendMySqlRedis(
// SqlMapping.get("dragon_order_pay.update"),
// new Object[]{nowTime, DateUtil.Formatter.yyyyMMddHHmmss.format(nowTime), DragonConstant.RefundStatusEnum.STATUS_FAIL.getCode(), notifyUrlDto.getRefundCode()}
// );
}
}
public String getPaymentType(String payType,String deviceFrom){
return (deviceFrom+payType).toUpperCase();
}
} }
...@@ -77,12 +77,15 @@ public class PayChannelStrategyAlipayImpl implements IPayChannelStrategy { ...@@ -77,12 +77,15 @@ public class PayChannelStrategyAlipayImpl implements IPayChannelStrategy {
} }
@Override @Override
public void dragonNotify(HttpServletRequest request,String payType,String deviceFrom) { public String dragonNotify(HttpServletRequest request,String payType,String deviceFrom) {
log.info("alipay-->notify-->begin payType:{} deviceFrom:{}",payType,deviceFrom);
Map<String, String[]> requestParams = request.getParameterMap(); Map<String, String[]> requestParams = request.getParameterMap();
Map<String, String> notifyMap = new HashMap<String, String>(); Map<String, String> notifyMap = new HashMap<String, String>();
notifyMap = alipayBiz.parseNotifyMsg(requestParams); notifyMap = alipayBiz.parseNotifyMsg(requestParams);
log.info("dragonNotify-->alipay json : {}", JSON.toJSONString(notifyMap)); log.info("dragonNotify-->alipay json : {}", JSON.toJSONString(notifyMap));
log.info("接收到{}支付结果{}", payType, notifyMap); log.info("接收到{}支付结果{}", payType, notifyMap);
//持久化通知记录
alipayBiz.createDragonOrderLogs(alipayBiz.getPaymentType(payType,deviceFrom),JSON.toJSONString(notifyMap));
String returnStr = null; String returnStr = null;
String code = notifyMap.get("out_trade_no"); String code = notifyMap.get("out_trade_no");
...@@ -136,6 +139,8 @@ public class PayChannelStrategyAlipayImpl implements IPayChannelStrategy { ...@@ -136,6 +139,8 @@ public class PayChannelStrategyAlipayImpl implements IPayChannelStrategy {
} }
log.info("返回支付通道{}信息{}", payType, returnStr); log.info("返回支付通道{}信息{}", payType, returnStr);
log.info("alipay-->notify-->end payType:{} deviceFrom:{}",payType,deviceFrom);
return returnStr;
} }
@Override @Override
...@@ -162,11 +167,10 @@ public class PayChannelStrategyAlipayImpl implements IPayChannelStrategy { ...@@ -162,11 +167,10 @@ public class PayChannelStrategyAlipayImpl implements IPayChannelStrategy {
log.info("订单支付成功!"); log.info("订单支付成功!");
dragonOrdersDto.setPaymentAt(timeEnd); dragonOrdersDto.setPaymentAt(timeEnd);
dragonOrdersDto.setPaymentId(bankTrxNo);// 设置银行流水号 dragonOrdersDto.setPaymentId(bankTrxNo);// 设置银行流水号
// DragonOrdersDto.(bankReturnMsg);
dragonOrdersDto.setStatus(Integer.parseInt(DragonConstant.PayStatusEnum.STATUS_PAID.getCode())); dragonOrdersDto.setStatus(Integer.parseInt(DragonConstant.PayStatusEnum.STATUS_PAID.getCode()));
dataUtils.updateOrderStatus(dragonOrdersDto.getCode(),dragonOrdersDto); dataUtils.updateOrderStatus(dragonOrdersDto.getCode(),dragonOrdersDto);
//通知消息入队列 //通知商户
mqHandleUtil.sendQueueAlipay(alipayBiz.buildPayNotifyReqBo(dragonOrdersDto)); alipayBiz.sendNotify(alipayBiz.buildPayNotifyReqBo(dragonOrdersDto));
} }
/** /**
...@@ -182,4 +186,6 @@ public class PayChannelStrategyAlipayImpl implements IPayChannelStrategy { ...@@ -182,4 +186,6 @@ public class PayChannelStrategyAlipayImpl implements IPayChannelStrategy {
// //
// String notifyUrl = dragonOrdersDto.getNotifyUrl(); // String notifyUrl = dragonOrdersDto.getNotifyUrl();
// } // }
} }
...@@ -32,8 +32,8 @@ public class PayChannelStrategyApplepayImpl implements IPayChannelStrategy { ...@@ -32,8 +32,8 @@ public class PayChannelStrategyApplepayImpl implements IPayChannelStrategy {
} }
@Override @Override
public void dragonNotify(HttpServletRequest request,String payType,String deviceFrom) { public String dragonNotify(HttpServletRequest request,String payType,String deviceFrom) {
return null;
} }
@Override @Override
......
...@@ -62,7 +62,8 @@ public class PayChannelStrategyWepayImpl implements IPayChannelStrategy { ...@@ -62,7 +62,8 @@ public class PayChannelStrategyWepayImpl implements IPayChannelStrategy {
} }
@Override @Override
public void dragonNotify(HttpServletRequest request,String payType,String deviceFrom) { public String dragonNotify(HttpServletRequest request,String payType,String deviceFrom) {
String returnStr = "<xml>\n" + " <return_code><![CDATA[FAIL]]></return_code>\n" + " <return_msg><![CDATA[FAIL]]></return_msg>\n" + "</xml>";;
try { try {
InputStream inputStream = request.getInputStream();// 从request中取得输入流 InputStream inputStream = request.getInputStream();// 从request中取得输入流
Map<String, String> notifyMap = new HashMap<String, String>(); Map<String, String> notifyMap = new HashMap<String, String>();
...@@ -95,7 +96,7 @@ public class PayChannelStrategyWepayImpl implements IPayChannelStrategy { ...@@ -95,7 +96,7 @@ public class PayChannelStrategyWepayImpl implements IPayChannelStrategy {
timeEnd = DateUtil.Formatter.yyyyMMddHHmmss.parse(timeEndStr); timeEnd = DateUtil.Formatter.yyyyMMddHHmmss.parse(timeEndStr);
} }
completeSuccessOrder(dragonOrdersDto, notifyMap.get("transaction_id"), timeEnd, notifyMap.toString()); completeSuccessOrder(dragonOrdersDto, notifyMap.get("transaction_id"), timeEnd, notifyMap.toString());
// returnStr = "<xml>\n" + " <return_code><![CDATA[SUCCESS]]></return_code>\n" + " <return_msg><![CDATA[OK]]></return_msg>\n" + "</xml>"; returnStr = "<xml>\n" + " <return_code><![CDATA[SUCCESS]]></return_code>\n" + " <return_msg><![CDATA[OK]]></return_msg>\n" + "</xml>";
} else { } else {
// completeFailOrder(dragonOrdersDto, notifyMap.toString()); // completeFailOrder(dragonOrdersDto, notifyMap.toString());
} }
...@@ -108,6 +109,7 @@ public class PayChannelStrategyWepayImpl implements IPayChannelStrategy { ...@@ -108,6 +109,7 @@ public class PayChannelStrategyWepayImpl implements IPayChannelStrategy {
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
return returnStr;
} }
@Override @Override
...@@ -122,11 +124,9 @@ public class PayChannelStrategyWepayImpl implements IPayChannelStrategy { ...@@ -122,11 +124,9 @@ public class PayChannelStrategyWepayImpl implements IPayChannelStrategy {
log.info("订单支付成功!"); log.info("订单支付成功!");
dragonOrdersDto.setPaymentAt(timeEnd); dragonOrdersDto.setPaymentAt(timeEnd);
dragonOrdersDto.setPaymentId(bankTrxNo);// 设置银行流水号 dragonOrdersDto.setPaymentId(bankTrxNo);// 设置银行流水号
// DragonOrdersDto.(bankReturnMsg);
dragonOrdersDto.setStatus(Integer.parseInt(DragonConstant.PayStatusEnum.STATUS_PAID.getCode())); dragonOrdersDto.setStatus(Integer.parseInt(DragonConstant.PayStatusEnum.STATUS_PAID.getCode()));
dataUtils.updateOrderStatus(dragonOrdersDto.getCode(),dragonOrdersDto); dataUtils.updateOrderStatus(dragonOrdersDto.getCode(),dragonOrdersDto);
//通知消息入队列 wepayBiz.sendNotify(wepayBiz.buildPayNotifyReqBo(dragonOrdersDto));
mqHandleUtil.sendQueueWepay(wepayBiz.buildPayNotifyReqBo(dragonOrdersDto));
} }
} }
package com.liquidnet.service.dragon.controller; package com.liquidnet.service.dragon.controller;
import com.liquidnet.service.dragon.service.IDragonOrderRefundsService;
import com.liquidnet.service.dragon.service.IDragonOrdersService; import com.liquidnet.service.dragon.service.IDragonOrdersService;
import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiImplicitParams;
...@@ -39,7 +38,7 @@ public class PayNotifyController { ...@@ -39,7 +38,7 @@ public class PayNotifyController {
@ApiImplicitParams({ @ApiImplicitParams({
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "payType", value = "支付类型:alipay,wepay,iappay", example = "alipay") @ApiImplicitParam(type = "form", required = true, dataType = "String", name = "payType", value = "支付类型:alipay,wepay,iappay", example = "alipay")
}) })
public void dragonNotify(@PathVariable("payType") String payType,@PathVariable("deviceFrom") String deviceFrom,HttpServletRequest request, HttpServletResponse respone) throws Exception { public String dragonNotify(@PathVariable("payType") String payType,@PathVariable("deviceFrom") String deviceFrom,HttpServletRequest request, HttpServletResponse respone) throws Exception {
dragonOrdersService.dragonNotify(request,payType,deviceFrom); return dragonOrdersService.dragonNotify(request,payType,deviceFrom);
} }
} }
...@@ -41,8 +41,8 @@ public class DragonOrdersServiceImpl implements IDragonOrdersService { ...@@ -41,8 +41,8 @@ public class DragonOrdersServiceImpl implements IDragonOrdersService {
} }
@Override @Override
public void dragonNotify(HttpServletRequest request,String payType,String deviceFrom) { public String dragonNotify(HttpServletRequest request,String payType,String deviceFrom) {
payChannelStrategyContext.getStrategy(payType).dragonNotify(request,payType,deviceFrom); return payChannelStrategyContext.getStrategy(payType).dragonNotify(request,payType,deviceFrom);
} }
@Override @Override
......
...@@ -2,7 +2,6 @@ package com.liquidnet.service.dragon.utils; ...@@ -2,7 +2,6 @@ package com.liquidnet.service.dragon.utils;
import com.liquidnet.service.base.SqlMapping; import com.liquidnet.service.base.SqlMapping;
import com.liquidnet.service.dragon.bo.PayNotifyReqBo; import com.liquidnet.service.dragon.bo.PayNotifyReqBo;
import com.liquidnet.service.dragon.constant.DragonConstant;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.connection.stream.MapRecord; import org.springframework.data.redis.connection.stream.MapRecord;
import org.springframework.data.redis.connection.stream.StreamRecords; import org.springframework.data.redis.connection.stream.StreamRecords;
...@@ -31,55 +30,11 @@ public class MqHandleUtil { ...@@ -31,55 +30,11 @@ public class MqHandleUtil {
* @param payNotifyReqBo * @param payNotifyReqBo
* @return * @return
*/ */
public boolean sendQueueAlipay(PayNotifyReqBo payNotifyReqBo) { public boolean sendNotifyErrorQueue(PayNotifyReqBo payNotifyReqBo,String queueKey) {
try { try {
HashMap<String, String> map = new HashMap<>(); HashMap<String, String> map = new HashMap<>();
map.put("message", payNotifyReqBo.toString()); map.put("message", payNotifyReqBo.toString());
MapRecord<String, String, String> record = StreamRecords.mapBacked(map).withStreamKey(DragonConstant.ChannelRedisQueueEnum.ALIPAY_PAY_KEY.getCode()); MapRecord<String, String, String> record = StreamRecords.mapBacked(map).withStreamKey(queueKey);
stringRedisTemplate.opsForStream().add(record);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* REDIS 队列发送消息 通知商户相关
* @param payNotifyReqBo
* @return
*/
public boolean sendQueueWepay(PayNotifyReqBo payNotifyReqBo) {
try {
HashMap<String, String> map = new HashMap<>();
map.put("message", payNotifyReqBo.toString());
MapRecord<String, String, String> record = StreamRecords.mapBacked(map).withStreamKey(DragonConstant.ChannelRedisQueueEnum.WECHAT_PAY_KEY.getCode());
stringRedisTemplate.opsForStream().add(record);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 给 REDIS 队列发送消息 数据库相关
*
* @param sql sql语句
* @param data 需要操作的数据
* @return
*/
public boolean sendMySqlRedis(String sql, Object[] data) {
try {
LinkedList<String> sqls = new LinkedList<>();
sqls.add(sql);
LinkedList<Object[]> sqlsData = new LinkedList();
sqlsData.add(data);
String sqlData = SqlMapping.gets(sqls, sqlsData);
HashMap<String, String> map = new HashMap<>();
map.put("message", sqlData);
MapRecord<String, String, String> record = StreamRecords.mapBacked(map).withStreamKey(DragonConstant.MysqlRedisQueueEnum.DRAGON_PAY_KEY.getCode());
stringRedisTemplate.opsForStream().add(record); stringRedisTemplate.opsForStream().add(record);
return true; return true;
} catch (Exception e) { } catch (Exception e) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment