添加新版开放平台支付
This commit is contained in:
parent
264867cd11
commit
5f88c35dc7
|
|
@ -17,6 +17,10 @@ import com.chaozhanggui.system.cashierservice.redis.RedisUtil;
|
|||
import com.chaozhanggui.system.cashierservice.sign.CodeEnum;
|
||||
import com.chaozhanggui.system.cashierservice.sign.Result;
|
||||
import com.chaozhanggui.system.cashierservice.socket.AppWebSocketServer;
|
||||
import com.chaozhanggui.system.cashierservice.thirdpay.resp.OrderStatusQueryResp;
|
||||
import com.chaozhanggui.system.cashierservice.thirdpay.resp.PublicResp;
|
||||
import com.chaozhanggui.system.cashierservice.thirdpay.resp.WxScanPayResp;
|
||||
import com.chaozhanggui.system.cashierservice.thirdpay.service.ThirdPayService;
|
||||
import com.chaozhanggui.system.cashierservice.util.BeanUtil;
|
||||
import com.chaozhanggui.system.cashierservice.util.MD5Util;
|
||||
import com.chaozhanggui.system.cashierservice.util.N;
|
||||
|
|
@ -101,47 +105,66 @@ public class PayService {
|
|||
|
||||
@Autowired
|
||||
TbShopUserFlowMapper tbShopUserFlowMapper;
|
||||
@Resource
|
||||
private TbGroupOrderInfoMapper tbGroupOrderInfoMapper;
|
||||
|
||||
@Value("${thirdPay.payType}")
|
||||
private String thirdPayType;
|
||||
|
||||
|
||||
@Value("${thirdPay.url}")
|
||||
private String thirdUrl;
|
||||
|
||||
|
||||
|
||||
@Value("${thirdPay.callBack}")
|
||||
private String callBack;
|
||||
|
||||
|
||||
|
||||
@Autowired
|
||||
private TbProductMapper tbProductMapper;
|
||||
@Resource
|
||||
private GroupOrderCouponService orderCouponService;
|
||||
ThirdPayService thirdPayService;
|
||||
|
||||
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Result payOrder(String openId, String orderId,String payType, String ip) throws Exception {
|
||||
TbOrderInfo orderInfo = tbOrderInfoMapper.selectByPrimaryKey(Integer.valueOf(orderId));
|
||||
public Result payOrder(String openId,String orderId,String ip) throws Exception {
|
||||
TbOrderInfo orderInfo= tbOrderInfoMapper.selectByPrimaryKey(Integer.valueOf(orderId));
|
||||
|
||||
if (!"unpaid".equals(orderInfo.getStatus()) && !"paying".equals(orderInfo.getStatus())) {
|
||||
if(!"unpaid".equals(orderInfo.getStatus())&&!"paying".equals(orderInfo.getStatus())){
|
||||
return Result.fail("订单状态异常,不允许支付");
|
||||
}
|
||||
|
||||
if (ObjectUtil.isNull(orderInfo.getMerchantId()) || ObjectUtil.isEmpty(orderInfo.getMerchantId())) {
|
||||
if(ObjectUtil.isNull(orderInfo.getMerchantId())||ObjectUtil.isEmpty(orderInfo.getMerchantId())){
|
||||
return Result.fail("没有对应的商户");
|
||||
}
|
||||
|
||||
|
||||
TbMerchantThirdApply thirdApply = tbMerchantThirdApplyMapper.selectByPrimaryKey(Integer.valueOf(orderInfo.getMerchantId()));
|
||||
List<TbCashierCart> cashierCarts= tbCashierCartMapper.selectByOrderId(orderId,"create");
|
||||
if(ObjectUtil.isEmpty(cashierCarts)||ObjectUtil.isNull(cashierCarts)){
|
||||
return Result.fail("购物车信息不存在");
|
||||
}
|
||||
|
||||
if (ObjectUtil.isEmpty(thirdApply) || ObjectUtil.isNull(thirdApply)) {
|
||||
StringBuffer body=new StringBuffer();
|
||||
for (TbCashierCart cashierCart : cashierCarts) {
|
||||
body.append(cashierCart.getName());
|
||||
}
|
||||
|
||||
|
||||
|
||||
TbMerchantThirdApply thirdApply= tbMerchantThirdApplyMapper.selectByPrimaryKey(Integer.valueOf(orderInfo.getMerchantId()));
|
||||
|
||||
if(ObjectUtil.isEmpty(thirdApply)||ObjectUtil.isNull(thirdApply)){
|
||||
return Result.fail("支付通道不存在");
|
||||
}
|
||||
|
||||
TbOrderPayment payment = tbOrderPaymentMapper.selectByOrderId(orderId);
|
||||
if (ObjectUtil.isEmpty(payment) || payment == null) {
|
||||
payment = new TbOrderPayment();
|
||||
TbOrderPayment payment=tbOrderPaymentMapper.selectByOrderId(orderId);
|
||||
if(ObjectUtil.isEmpty(payment)||payment==null){
|
||||
payment=new TbOrderPayment();
|
||||
payment.setPayTypeId("ysk");
|
||||
payment.setAmount(orderInfo.getOrderAmount());
|
||||
payment.setPaidAmount(orderInfo.getPayAmount());
|
||||
payment.setHasRefundAmount(BigDecimal.ZERO);
|
||||
if (payType.equals("wechatPay")) {
|
||||
payment.setPayName("微信支付");
|
||||
payment.setPayType("wechatPay");
|
||||
} else if (payType.equals("aliPay")) {
|
||||
payment.setPayName("支付宝支付");
|
||||
payment.setPayType("aliPay");
|
||||
}
|
||||
payment.setPayName("微信支付");
|
||||
payment.setPayType("wechatPay");
|
||||
payment.setReceived(payment.getAmount());
|
||||
payment.setChangeFee(BigDecimal.ZERO);
|
||||
payment.setMemberId(orderInfo.getMemberId());
|
||||
|
|
@ -149,435 +172,280 @@ public class PayService {
|
|||
payment.setOrderId(orderInfo.getId().toString());
|
||||
payment.setCreatedAt(System.currentTimeMillis());
|
||||
tbOrderPaymentMapper.insert(payment);
|
||||
} else {
|
||||
if (payType.equals("wechatPay")) {
|
||||
payment.setPayName("微信支付");
|
||||
payment.setPayType("wechatPay");
|
||||
} else if (payType.equals("aliPay")) {
|
||||
payment.setPayName("支付宝支付");
|
||||
payment.setPayType("aliPay");
|
||||
}
|
||||
}else {
|
||||
payment.setUpdatedAt(System.currentTimeMillis());
|
||||
tbOrderPaymentMapper.updateByPrimaryKey(payment);
|
||||
}
|
||||
|
||||
PayReq req = new PayReq();
|
||||
req.setAppId(thirdApply.getAppId());
|
||||
req.setTimestamp(System.currentTimeMillis());
|
||||
req.setIp(ip);
|
||||
req.setMercOrderNo(orderInfo.getOrderNo());
|
||||
req.setNotifyUrl(callBackurl);
|
||||
req.setPayAmt(payment.getAmount().setScale(2, BigDecimal.ROUND_DOWN).toPlainString());
|
||||
if (payType.equals("wechatPay")) {
|
||||
if("ysk".equals(thirdPayType)){
|
||||
PayReq req=new PayReq();
|
||||
|
||||
req.setAppId(thirdApply.getAppId());
|
||||
req.setTimestamp(System.currentTimeMillis());
|
||||
req.setIp(ip);
|
||||
req.setMercOrderNo(orderInfo.getOrderNo());
|
||||
req.setNotifyUrl(callBackurl);
|
||||
req.setPayAmt(payment.getAmount().setScale(2,BigDecimal.ROUND_DOWN).toPlainString());
|
||||
req.setPayType("03");
|
||||
req.setPayWay("WXZF");//WXZF ZFBZF UNIONPAY
|
||||
} else if (payType.equals("aliPay")) {
|
||||
req.setPayWay("ZFBZF");
|
||||
}
|
||||
req.setSubject("扫码点餐");
|
||||
req.setUserId(openId);
|
||||
|
||||
Map<String, Object> map = BeanUtil.transBeanMap(req);
|
||||
req.setSign(MD5Util.encrypt(map, thirdApply.getAppToken(), true));
|
||||
|
||||
ResponseEntity<String> response = restTemplate.postForEntity(url.concat("trans/pay"), req, String.class);
|
||||
if (response.getStatusCodeValue() == 200 && ObjectUtil.isNotEmpty(response.getBody())) {
|
||||
JSONObject object = JSONObject.parseObject(response.getBody());
|
||||
if (object.get("code").equals("0")) {
|
||||
payment.setTradeNumber(object.getJSONObject("data").get("orderNumber").toString());
|
||||
payment.setUpdatedAt(System.currentTimeMillis());
|
||||
tbOrderPaymentMapper.updateByPrimaryKeySelective(payment);
|
||||
orderInfo.setStatus("paying");
|
||||
orderInfo.setPayOrderNo(payment.getTradeNumber());
|
||||
req.setPayWay("WXZF");
|
||||
req.setSubject("扫码点餐");
|
||||
req.setUserId(openId);
|
||||
|
||||
|
||||
tbOrderInfoMapper.updateByPrimaryKey(orderInfo);
|
||||
String key = RedisCst.TABLE_CART.concat(orderInfo.getTableId()).concat("-").concat(orderInfo.getShopId());
|
||||
//清除缓存购物车数据
|
||||
redisUtil.deleteByKey(key);
|
||||
JSONObject jsonObject1 = new JSONObject();
|
||||
jsonObject1.put("status", "success");
|
||||
jsonObject1.put("msg", "成功");
|
||||
jsonObject1.put("type", "");
|
||||
jsonObject1.put("data", new JSONArray());
|
||||
jsonObject1.put("amount", 0);
|
||||
AppWebSocketServer.AppSendInfo(jsonObject1, key, false);
|
||||
tbCashierCartMapper.updateStatusByOrderId(orderId.toString(), "final");
|
||||
return Result.success(CodeEnum.SUCCESS, object.getJSONObject("data"));
|
||||
} else {
|
||||
return Result.fail(object.getString("msg"));
|
||||
}
|
||||
}
|
||||
Map<String,Object> map= BeanUtil.transBeanMap(req);
|
||||
req.setSign(MD5Util.encrypt(map,thirdApply.getAppToken(),true));
|
||||
|
||||
return Result.fail("失败");
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Result groupOrderPay(String orderId, String payType, String userId, String ip) {
|
||||
TbGroupOrderInfo orderInfo = tbGroupOrderInfoMapper.queryById(Integer.valueOf(orderId));
|
||||
|
||||
if (!"unpaid".equals(orderInfo.getStatus())) {
|
||||
return Result.fail("订单状态异常,不允许支付");
|
||||
}
|
||||
|
||||
TbMerchantAccount tbMerchantAccount = merchantAccountMapper.selectByShopId(orderInfo.getShopId().toString());
|
||||
if (tbMerchantAccount == null) {
|
||||
throw new MsgException("生成订单错误");
|
||||
}
|
||||
|
||||
if (ObjectUtil.isNull(tbMerchantAccount.getMerchantId()) || ObjectUtil.isEmpty(tbMerchantAccount.getMerchantId())) {
|
||||
return Result.fail("没有对应的商户");
|
||||
}
|
||||
|
||||
TbMerchantThirdApply thirdApply = tbMerchantThirdApplyMapper.selectByPrimaryKey(Integer.valueOf(tbMerchantAccount.getMerchantId()));
|
||||
|
||||
if (ObjectUtil.isEmpty(thirdApply) || ObjectUtil.isNull(thirdApply)) {
|
||||
return Result.fail("支付通道不存在");
|
||||
}
|
||||
|
||||
TbOrderPayment payment = tbOrderPaymentMapper.selectByOrderId(orderId);
|
||||
if (ObjectUtil.isEmpty(payment) || payment == null) {
|
||||
payment = new TbOrderPayment();
|
||||
payment.setPayTypeId("ysk");
|
||||
payment.setAmount(orderInfo.getOrderAmount());
|
||||
payment.setPaidAmount(orderInfo.getPayAmount());
|
||||
payment.setHasRefundAmount(BigDecimal.ZERO);
|
||||
if (payType.equals("wechatPay")) {
|
||||
payment.setPayName("微信支付");
|
||||
payment.setPayType("wechatPay");
|
||||
} else if (payType.equals("aliPay")) {
|
||||
payment.setPayName("支付宝支付");
|
||||
payment.setPayType("aliPay");
|
||||
}
|
||||
payment.setReceived(payment.getAmount());
|
||||
payment.setChangeFee(BigDecimal.ZERO);
|
||||
// payment.setMemberId(orderInfo.getMemberId());//会员Id
|
||||
payment.setShopId(orderInfo.getShopId().toString());
|
||||
payment.setOrderId(orderInfo.getId().toString());
|
||||
payment.setCreatedAt(System.currentTimeMillis());
|
||||
tbOrderPaymentMapper.insert(payment);
|
||||
} else {
|
||||
if (payType.equals("wechatPay")) {
|
||||
payment.setPayName("微信支付");
|
||||
payment.setPayType("wechatPay");
|
||||
} else if (payType.equals("aliPay")) {
|
||||
payment.setPayName("支付宝支付");
|
||||
payment.setPayType("aliPay");
|
||||
}
|
||||
payment.setUpdatedAt(System.currentTimeMillis());
|
||||
tbOrderPaymentMapper.updateByPrimaryKey(payment);
|
||||
}
|
||||
|
||||
PayReq req = new PayReq();
|
||||
|
||||
req.setAppId(thirdApply.getAppId());
|
||||
req.setTimestamp(System.currentTimeMillis());
|
||||
req.setIp(ip);
|
||||
req.setMercOrderNo(orderInfo.getOrderNo());
|
||||
req.setNotifyUrl(callBackGroupurl);
|
||||
req.setPayAmt(payment.getAmount().setScale(2, BigDecimal.ROUND_DOWN).toPlainString());
|
||||
if (payType.equals("wechatPay")) {
|
||||
req.setPayType("03");
|
||||
req.setPayWay("WXZF");//WXZF ZFBZF UNIONPAY
|
||||
} else if (payType.equals("aliPay")) {
|
||||
req.setPayWay("ZFBZF");
|
||||
}
|
||||
req.setSubject("零点八零:团购卷");
|
||||
req.setUserId(userId);
|
||||
ResponseEntity<String> response= restTemplate.postForEntity(url.concat("trans/pay"),req,String.class);
|
||||
if(response.getStatusCodeValue()==200&&ObjectUtil.isNotEmpty(response.getBody())){
|
||||
JSONObject object=JSONObject.parseObject(response.getBody());
|
||||
if(object.get("code").equals("0")){
|
||||
payment.setTradeNumber(object.getJSONObject("data").get("orderNumber").toString());
|
||||
payment.setUpdatedAt(System.currentTimeMillis());
|
||||
tbOrderPaymentMapper.updateByPrimaryKeySelective(payment);
|
||||
orderInfo.setStatus("paying");
|
||||
orderInfo.setPayOrderNo(payment.getTradeNumber());
|
||||
|
||||
|
||||
Map<String, Object> map = BeanUtil.transBeanMap(req);
|
||||
req.setSign(MD5Util.encrypt(map, thirdApply.getAppToken(), true));
|
||||
|
||||
ResponseEntity<String> response = restTemplate.postForEntity(url.concat("trans/pay"), req, String.class);
|
||||
if (response.getStatusCodeValue() == 200 && ObjectUtil.isNotEmpty(response.getBody())) {
|
||||
JSONObject object = JSONObject.parseObject(response.getBody());
|
||||
log.info("团购卷支付响应:{}",object);
|
||||
if (object.get("code").equals("0")) {
|
||||
payment.setTradeNumber(object.getJSONObject("data").get("orderNumber").toString());
|
||||
payment.setUpdatedAt(System.currentTimeMillis());
|
||||
tbOrderPaymentMapper.updateByPrimaryKeySelective(payment);
|
||||
orderInfo.setPayType(payType);
|
||||
orderInfo.setPayOrderNo(payment.getTradeNumber());
|
||||
tbGroupOrderInfoMapper.update(orderInfo);
|
||||
JSONObject jsonObject1 = new JSONObject();
|
||||
jsonObject1.put("status", "success");
|
||||
jsonObject1.put("msg", "成功");
|
||||
jsonObject1.put("type", "");
|
||||
jsonObject1.put("data", new JSONArray());
|
||||
jsonObject1.put("amount", 0);
|
||||
tbProductMapper.upGroupRealSalesNumber(orderInfo.getProId().toString(), orderInfo.getNumber());
|
||||
return Result.success(CodeEnum.SUCCESS, object.getJSONObject("data"));
|
||||
} else {
|
||||
return Result.fail(object.getString("msg"));
|
||||
}
|
||||
}
|
||||
|
||||
return Result.fail("失败");
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Result returnOrder(ReturnGroupOrderDto param) {
|
||||
TbGroupOrderInfo groupOrderInfo = tbGroupOrderInfoMapper.queryById(param.getOrderId());
|
||||
List<TbGroupOrderCoupon> tbGroupOrderCoupons = orderCouponService.queryNoRefundByOrderId(param.getOrderId());
|
||||
if (param.getNum() > tbGroupOrderCoupons.size()) {
|
||||
return Result.fail("可退数量不足");
|
||||
}
|
||||
for (int i = 0; i < param.getNum(); i++) {
|
||||
TbGroupOrderCoupon coupon = tbGroupOrderCoupons.get(i);
|
||||
coupon.setIsRefund(1);
|
||||
coupon.setRefundAmount(param.getRefundAmount());
|
||||
coupon.setRefundDesc(param.getRefundDesc());
|
||||
coupon.setRefundReason(param.getRefundReason());
|
||||
orderCouponService.update(coupon);
|
||||
}
|
||||
TbMerchantThirdApply thirdApply = tbMerchantThirdApplyMapper.selectByPrimaryKey(groupOrderInfo.getMerchantId());
|
||||
MsgException.checkNull(thirdApply, "支付参数配置错误");
|
||||
ReturnOrderReq req = new ReturnOrderReq();
|
||||
req.setAppId(thirdApply.getAppId());
|
||||
req.setTimestamp(System.currentTimeMillis());
|
||||
req.setOrderNumber(groupOrderInfo.getPayOrderNo());
|
||||
req.setAmount(param.getRefundAmount().toString());
|
||||
req.setMercRefundNo(groupOrderInfo.getOrderNo());
|
||||
req.setRefundReason("团购卷:退货");
|
||||
req.setPayPassword(thirdApply.getPayPassword());
|
||||
Map<String, Object> map = BeanUtil.transBean2Map(req);
|
||||
req.setSign(MD5Util.encrypt(map, thirdApply.getAppToken(), true));
|
||||
log.info("groupOrderReturn req:{}", JSONUtil.toJsonStr(req));
|
||||
ResponseEntity<String> response = restTemplate.postForEntity(url.concat("merchantOrder/returnOrder"), req, String.class);
|
||||
log.info("groupOrderReturn:{}", response.getBody());
|
||||
if (response.getStatusCodeValue() == 200 && ObjectUtil.isNotEmpty(response.getBody())) {
|
||||
JSONObject object = JSONObject.parseObject(response.getBody());
|
||||
if (!object.get("code").equals("0")) {
|
||||
MsgException.check(true, "退款渠道调用失败");
|
||||
}
|
||||
}
|
||||
groupOrderInfo.setRefundNumber(groupOrderInfo.getRefundNumber() + param.getNum());
|
||||
groupOrderInfo.setRefundAmount(groupOrderInfo.getRefundAmount().add(param.getRefundAmount()));
|
||||
if (groupOrderInfo.getNumber() == groupOrderInfo.getRefundNumber()) {
|
||||
groupOrderInfo.setRefundAble(0);
|
||||
groupOrderInfo.setStatus("refund");
|
||||
}
|
||||
tbGroupOrderInfoMapper.update(groupOrderInfo);
|
||||
return Result.success(CodeEnum.SUCCESS);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Result accountPay(String orderId, String userId, String shopId, String pwd) {
|
||||
if (ObjectUtil.isEmpty(orderId) || ObjectUtil.isEmpty(userId) || ObjectUtil.isEmpty(shopId) || ObjectUtil.isEmpty(pwd)) {
|
||||
return Result.fail("参数错误");
|
||||
}
|
||||
|
||||
TbOrderInfo orderInfo = tbOrderInfoMapper.selectByPrimaryKey(Integer.valueOf(orderId));
|
||||
if (ObjectUtil.isEmpty(orderInfo)) {
|
||||
return Result.fail("订单信息不存在");
|
||||
}
|
||||
|
||||
|
||||
if (!"unpaid".equals(orderInfo.getStatus())) {
|
||||
return Result.fail("订单状态异常");
|
||||
}
|
||||
|
||||
|
||||
int count = tbShopPayTypeMapper.countSelectByShopIdAndPayType(orderInfo.getShopId(), "deposit");
|
||||
if (count < 1) {
|
||||
return Result.fail("当前店铺未开通储值卡支付");
|
||||
}
|
||||
|
||||
TbShopUser user = tbShopUserMapper.selectByUserIdAndShopId(userId, shopId);
|
||||
|
||||
if (ObjectUtil.isEmpty(user) || !"1".equals(user.getIsVip().toString())) {
|
||||
return Result.fail("此用户非会员用户");
|
||||
}
|
||||
|
||||
|
||||
if ("1".equals(user.getIsPwd())) {
|
||||
return Result.fail("会员支付密码为初始化密码");
|
||||
}
|
||||
|
||||
if (!MD5Util.encrypt(pwd).equals(user.getPwd())) {
|
||||
return Result.fail("会员支付密码错误");
|
||||
}
|
||||
|
||||
if (N.gt(orderInfo.getPayAmount(), user.getAmount())) {
|
||||
return Result.fail("会员卡余额不足");
|
||||
}
|
||||
|
||||
user.setAmount(user.getAmount().subtract(orderInfo.getOrderAmount()));
|
||||
user.setConsumeAmount(user.getConsumeAmount().add(orderInfo.getPayAmount()));
|
||||
user.setConsumeNumber(user.getConsumeNumber() + 1);
|
||||
user.setUpdatedAt(System.currentTimeMillis());
|
||||
tbShopUserMapper.updateByPrimaryKeySelective(user);
|
||||
|
||||
|
||||
TbShopUserFlow flow = new TbShopUserFlow();
|
||||
flow.setShopUserId(Integer.valueOf(user.getId()));
|
||||
flow.setBizCode("accountPay");
|
||||
flow.setBizName("会员储值卡支付");
|
||||
flow.setAmount(orderInfo.getOrderAmount());
|
||||
flow.setBalance(user.getAmount());
|
||||
flow.setCreateTime(new Date());
|
||||
tbShopUserFlowMapper.insert(flow);
|
||||
|
||||
|
||||
orderInfo.setPayAmount(orderInfo.getOrderAmount());
|
||||
orderInfo.setMemberId(userId);
|
||||
orderInfo.setPayType("deposit");
|
||||
orderInfo.setStatus("closed");
|
||||
orderInfo.setPayOrderNo("deposit".concat(SnowFlakeUtil.generateOrderNo()));
|
||||
tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo);
|
||||
|
||||
|
||||
int cartCount = tbCashierCartMapper.updateStatusByOrderId(orderId.toString(), "final");
|
||||
|
||||
log.info("更新购物车:{}", cartCount);
|
||||
|
||||
//更新子单状态
|
||||
tbOrderDetailMapper.updateStatusByOrderIdAndStatus(Integer.valueOf(orderId), "closed");
|
||||
|
||||
//修改主单状态
|
||||
orderInfo.setStatus("closed");
|
||||
orderInfo.setPayType("deposit");
|
||||
orderInfo.setPayOrderNo(user.getDynamicCode());
|
||||
orderInfo.setPayAmount(orderInfo.getOrderAmount());
|
||||
tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo);
|
||||
|
||||
|
||||
JSONObject jsonObject = new JSONObject();
|
||||
jsonObject.put("token", 0);
|
||||
jsonObject.put("type", "wxcreate");
|
||||
jsonObject.put("orderId", orderInfo.getId().toString());
|
||||
|
||||
producer.putOrderCollect(jsonObject.toJSONString());
|
||||
|
||||
producer.printMechine(orderInfo.getId() + "");
|
||||
|
||||
return Result.success(CodeEnum.SUCCESS);
|
||||
}
|
||||
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Result modifyOrderStatus(Integer orderId) throws IOException {
|
||||
TbOrderInfo orderInfo = tbOrderInfoMapper.selectByPrimaryKey(Integer.valueOf(orderId));
|
||||
if (ObjectUtil.isEmpty(orderInfo)) {
|
||||
return Result.fail("订单信息不存在");
|
||||
}
|
||||
|
||||
if ("paying".equals(orderInfo.getStatus())) {
|
||||
TbOrderPayment payment = tbOrderPaymentMapper.selectByOrderId(orderInfo.getId().toString());
|
||||
if (ObjectUtil.isNotEmpty(payment) && ObjectUtil.isNotEmpty(payment.getTradeNumber())) {
|
||||
|
||||
TbMerchantThirdApply thirdApply = tbMerchantThirdApplyMapper.selectByPrimaryKey(Integer.valueOf(orderInfo.getMerchantId()));
|
||||
|
||||
if (ObjectUtil.isEmpty(thirdApply) || ObjectUtil.isNull(thirdApply)) {
|
||||
return Result.fail("支付通道不存在");
|
||||
tbOrderInfoMapper.updateByPrimaryKey(orderInfo);
|
||||
String key= RedisCst.TABLE_CART.concat(orderInfo.getTableId()).concat("-").concat(orderInfo.getShopId());
|
||||
//清除缓存购物车数据
|
||||
redisUtil.deleteByKey(key);
|
||||
JSONObject jsonObject1 = new JSONObject();
|
||||
jsonObject1.put("status", "success");
|
||||
jsonObject1.put("msg", "成功");
|
||||
jsonObject1.put("type", "");
|
||||
jsonObject1.put("data", new JSONArray());
|
||||
jsonObject1.put("amount", 0);
|
||||
AppWebSocketServer.AppSendInfo(jsonObject1,key, false);
|
||||
tbCashierCartMapper.updateStatusByOrderId(orderId.toString(),"final");
|
||||
return Result.success(CodeEnum.SUCCESS,object.getJSONObject("data"));
|
||||
}else {
|
||||
return Result.fail(object.getString("msg"));
|
||||
}
|
||||
TradeQueryReq req = new TradeQueryReq();
|
||||
req.setAppId(thirdApply.getAppId());
|
||||
req.setTimestamp(System.currentTimeMillis());
|
||||
req.setOrderNumber(payment.getTradeNumber());
|
||||
Map<String, Object> map = BeanUtil.transBeanMap(req);
|
||||
}
|
||||
}else {
|
||||
String reqbody="";
|
||||
|
||||
req.setSign(MD5Util.encrypt(map, thirdApply.getAppToken(), true));
|
||||
if(body.length()>15){
|
||||
reqbody=body.substring(0,6).concat("....").concat(body.substring(body.length()-6,body.length())).toString();
|
||||
}else {
|
||||
reqbody=body.toString();
|
||||
}
|
||||
|
||||
ResponseEntity<String> response = restTemplate.postForEntity(url.concat("merchantOrder/tradeQuery"), req, String.class);
|
||||
if (response.getStatusCodeValue() == 200 && ObjectUtil.isNotEmpty(response.getBody())) {
|
||||
JSONObject object = JSONObject.parseObject(response.getBody());
|
||||
|
||||
if (object.get("code").equals("0")) {
|
||||
JSONObject data = object.getJSONObject("data");
|
||||
String status = data.getString("status");
|
||||
String cartStatus = "";
|
||||
switch (status) {
|
||||
case "0": //交易失败
|
||||
break;
|
||||
case "1": //交易成功
|
||||
|
||||
//修改数据库中购物车数据
|
||||
int cartCount = tbCashierCartMapper.updateStatusByOrderId(orderId.toString(), "final");
|
||||
|
||||
log.info("更新购物车:{}", cartCount);
|
||||
|
||||
//更新子单状态
|
||||
tbOrderDetailMapper.updateStatusByOrderIdAndStatus(Integer.valueOf(orderId), "closed");
|
||||
|
||||
//修改主单状态
|
||||
orderInfo.setStatus("closed");
|
||||
orderInfo.setPayType("wx_lite");
|
||||
orderInfo.setPayOrderNo(payment.getTradeNumber());
|
||||
orderInfo.setPayAmount(orderInfo.getOrderAmount());
|
||||
tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo);
|
||||
PublicResp<WxScanPayResp> publicResp= thirdPayService.scanpay(thirdUrl,thirdApply.getAppId(),reqbody,reqbody,payment.getAmount().setScale(2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(100)).longValue(),"wx212769170d2c6b2a","wx212769170d2c6b2a",openId,ip,orderInfo.getOrderNo(),"S2405103298",callBack,null,thirdApply.getAppToken());
|
||||
if(ObjectUtil.isNotNull(publicResp)&&ObjectUtil.isNotEmpty(publicResp)){
|
||||
if("000000".equals(publicResp.getCode())){
|
||||
WxScanPayResp wxScanPayResp= publicResp.getObjData();
|
||||
if("TRADE_SUCCESS".equals(wxScanPayResp.getState())){
|
||||
payment.setTradeNumber(wxScanPayResp.getPayOrderId());
|
||||
payment.setUpdatedAt(System.currentTimeMillis());
|
||||
tbOrderPaymentMapper.updateByPrimaryKeySelective(payment);
|
||||
orderInfo.setStatus("paying");
|
||||
orderInfo.setPayOrderNo(payment.getTradeNumber());
|
||||
|
||||
|
||||
JSONObject jsonObject = new JSONObject();
|
||||
jsonObject.put("token", 0);
|
||||
jsonObject.put("type", "wxcreate");
|
||||
jsonObject.put("orderId", orderInfo.getId().toString());
|
||||
|
||||
producer.putOrderCollect(jsonObject.toJSONString());
|
||||
|
||||
|
||||
log.info("发送打印数据");
|
||||
producer.printMechine(orderInfo.getId() + "");
|
||||
log.info("发送赠送购物券");
|
||||
JSONObject coupons = new JSONObject();
|
||||
coupons.put("type", "buy");
|
||||
coupons.put("orderId", orderId);
|
||||
producer.printCoupons(coupons.toJSONString());
|
||||
return Result.success(CodeEnum.SUCCESS, orderId);
|
||||
case "2": //退款成功
|
||||
cartStatus = "refund";
|
||||
orderInfo.setStatus("refund");
|
||||
break;
|
||||
case "3": //退款失败
|
||||
break;
|
||||
case "4": //退款中
|
||||
cartStatus = "refunding";
|
||||
orderInfo.setStatus("refunding");
|
||||
break;
|
||||
}
|
||||
|
||||
tbCashierCartMapper.updateStatusByOrderId(orderId.toString(), cartStatus);
|
||||
orderInfo.setUpdatedAt(System.currentTimeMillis());
|
||||
tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo);
|
||||
tbOrderInfoMapper.updateByPrimaryKey(orderInfo);
|
||||
String key= RedisCst.TABLE_CART.concat(orderInfo.getTableId()).concat("-").concat(orderInfo.getShopId());
|
||||
//清除缓存购物车数据
|
||||
redisUtil.deleteByKey(key);
|
||||
JSONObject jsonObject1 = new JSONObject();
|
||||
jsonObject1.put("status", "success");
|
||||
jsonObject1.put("msg", "成功");
|
||||
jsonObject1.put("type", "");
|
||||
jsonObject1.put("data", new JSONArray());
|
||||
jsonObject1.put("amount", 0);
|
||||
AppWebSocketServer.AppSendInfo(jsonObject1,key, false);
|
||||
tbCashierCartMapper.updateStatusByOrderId(orderId.toString(),"final");
|
||||
return Result.success(CodeEnum.SUCCESS,wxScanPayResp.getPayInfo());
|
||||
}else{
|
||||
return Result.fail(publicResp.getMsg());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return Result.success(CodeEnum.SUCCESS, orderId);
|
||||
|
||||
|
||||
|
||||
return Result.fail("失败");
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Result memberIn(String openId, String userId, String amount, String shopId, String ip) {
|
||||
if (ObjectUtil.isEmpty(openId) || ObjectUtil.isEmpty(userId)) {
|
||||
public Result modifyOrderStatus(Integer orderId) throws IOException {
|
||||
TbOrderInfo orderInfo= tbOrderInfoMapper.selectByPrimaryKey(Integer.valueOf(orderId));
|
||||
if(ObjectUtil.isEmpty(orderInfo)){
|
||||
return Result.fail("订单信息不存在");
|
||||
}
|
||||
|
||||
if("paying".equals(orderInfo.getStatus())){
|
||||
TbOrderPayment payment= tbOrderPaymentMapper.selectByOrderId(orderInfo.getId().toString());
|
||||
if(ObjectUtil.isNotEmpty(payment)&&ObjectUtil.isNotEmpty(payment.getTradeNumber())){
|
||||
|
||||
TbMerchantThirdApply thirdApply= tbMerchantThirdApplyMapper.selectByPrimaryKey(Integer.valueOf(orderInfo.getMerchantId()));
|
||||
|
||||
if(ObjectUtil.isEmpty(thirdApply)||ObjectUtil.isNull(thirdApply)){
|
||||
return Result.fail("支付通道不存在");
|
||||
}
|
||||
|
||||
|
||||
|
||||
if("ysk".equals(thirdPayType)){
|
||||
TradeQueryReq req=new TradeQueryReq();
|
||||
req.setAppId(thirdApply.getAppId());
|
||||
req.setTimestamp(System.currentTimeMillis());
|
||||
req.setOrderNumber(payment.getTradeNumber());
|
||||
Map<String,Object> map= BeanUtil.transBeanMap(req);
|
||||
|
||||
req.setSign(MD5Util.encrypt(map,thirdApply.getAppToken(),true));
|
||||
|
||||
ResponseEntity<String> response= restTemplate.postForEntity(url.concat("merchantOrder/tradeQuery"),req,String.class);
|
||||
if(response.getStatusCodeValue()==200&&ObjectUtil.isNotEmpty(response.getBody())){
|
||||
JSONObject object=JSONObject.parseObject(response.getBody());
|
||||
|
||||
if(object.get("code").equals("0")){
|
||||
JSONObject data=object.getJSONObject("data");
|
||||
String status=data.getString("status");
|
||||
String cartStatus="";
|
||||
switch (status){
|
||||
case "0": //交易失败
|
||||
break;
|
||||
case "1": //交易成功
|
||||
|
||||
//修改数据库中购物车数据
|
||||
int cartCount= tbCashierCartMapper.updateStatusByOrderId(orderId.toString(),"final");
|
||||
|
||||
log.info("更新购物车:{}",cartCount);
|
||||
|
||||
//更新子单状态
|
||||
tbOrderDetailMapper.updateStatusByOrderIdAndStatus(Integer.valueOf(orderId),"closed");
|
||||
|
||||
//修改主单状态
|
||||
orderInfo.setStatus("closed");
|
||||
orderInfo.setPayType("wx_lite");
|
||||
orderInfo.setPayOrderNo(payment.getTradeNumber());
|
||||
orderInfo.setPayAmount(orderInfo.getOrderAmount());
|
||||
tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo);
|
||||
|
||||
|
||||
JSONObject jsonObject=new JSONObject();
|
||||
jsonObject.put("token",0);
|
||||
jsonObject.put("type","wxcreate");
|
||||
jsonObject.put("orderId",orderInfo.getId().toString());
|
||||
|
||||
producer.putOrderCollect(jsonObject.toJSONString());
|
||||
|
||||
|
||||
|
||||
log.info("发送打印数据");
|
||||
producer.printMechine(orderInfo.getId() + "");
|
||||
|
||||
return Result.success(CodeEnum.SUCCESS,orderId);
|
||||
case "2": //退款成功
|
||||
cartStatus="refund";
|
||||
orderInfo.setStatus("refund");
|
||||
break;
|
||||
case "3": //退款失败
|
||||
break;
|
||||
case "4": //退款中
|
||||
cartStatus="refunding";
|
||||
orderInfo.setStatus("refunding");
|
||||
break;
|
||||
}
|
||||
|
||||
tbCashierCartMapper.updateStatusByOrderId(orderId.toString(),cartStatus);
|
||||
orderInfo.setUpdatedAt(System.currentTimeMillis());
|
||||
tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo);
|
||||
}
|
||||
}
|
||||
}else {
|
||||
PublicResp<OrderStatusQueryResp> publicResp=thirdPayService.queryOrder(thirdUrl,thirdApply.getAppId(),orderInfo.getOrderNo(),null,thirdApply.getAppToken());
|
||||
if(ObjectUtil.isNotNull(publicResp)&&ObjectUtil.isNotEmpty(publicResp)){
|
||||
if("000000".equals(publicResp.getCode())){
|
||||
String cartStatus="";
|
||||
switch (publicResp.getObjData().getState()){
|
||||
case "TRADE_SUCCESS":
|
||||
//修改数据库中购物车数据
|
||||
int cartCount= tbCashierCartMapper.updateStatusByOrderId(orderId.toString(),"final");
|
||||
|
||||
log.info("更新购物车:{}",cartCount);
|
||||
|
||||
//更新子单状态
|
||||
tbOrderDetailMapper.updateStatusByOrderIdAndStatus(Integer.valueOf(orderId),"closed");
|
||||
|
||||
//修改主单状态
|
||||
orderInfo.setStatus("closed");
|
||||
orderInfo.setPayType("wx_lite");
|
||||
orderInfo.setPayOrderNo(payment.getTradeNumber());
|
||||
orderInfo.setPayAmount(orderInfo.getOrderAmount());
|
||||
tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo);
|
||||
|
||||
|
||||
JSONObject jsonObject=new JSONObject();
|
||||
jsonObject.put("token",0);
|
||||
jsonObject.put("type","wxcreate");
|
||||
jsonObject.put("orderId",orderInfo.getId().toString());
|
||||
|
||||
producer.putOrderCollect(jsonObject.toJSONString());
|
||||
|
||||
|
||||
|
||||
log.info("发送打印数据");
|
||||
producer.printMechine(orderInfo.getId() + "");
|
||||
|
||||
return Result.success(CodeEnum.SUCCESS,orderId);
|
||||
case "REFUND_ING":
|
||||
cartStatus="refunding";
|
||||
orderInfo.setStatus("refunding");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
return Result.success(CodeEnum.SUCCESS,orderId);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Result memberIn(String openId,String userId,String amount,String shopId,String ip){
|
||||
if(ObjectUtil.isEmpty(openId)||ObjectUtil.isEmpty(userId)){
|
||||
return Result.fail("用户信息允许为空");
|
||||
}
|
||||
|
||||
|
||||
TbShopUser tbShopUser = tbShopUserMapper.selectByUserIdAndShopId(userId, shopId);
|
||||
if (ObjectUtil.isEmpty(tbShopUser)) {
|
||||
TbShopUser tbShopUser= tbShopUserMapper.selectByUserIdAndShopId(userId,shopId);
|
||||
if(ObjectUtil.isEmpty(tbShopUser)){
|
||||
return Result.fail("对应的用户信息不存在");
|
||||
}
|
||||
|
||||
if(ObjectUtil.isEmpty(tbShopUser.getIsVip())||!"1".equals(tbShopUser.getIsVip().toString())){
|
||||
return Result.fail("非会员用户不允许充值");
|
||||
}
|
||||
|
||||
TbShopInfo shopInfo = tbShopInfoMapper.selectByPrimaryKey(Integer.valueOf(shopId));
|
||||
if (ObjectUtil.isEmpty(shopInfo)) {
|
||||
|
||||
TbShopInfo shopInfo= tbShopInfoMapper.selectByPrimaryKey(Integer.valueOf(shopId));
|
||||
if(ObjectUtil.isEmpty(shopInfo)){
|
||||
return Result.fail("对应的店铺信息不存在");
|
||||
}
|
||||
|
||||
|
||||
TbMerchantThirdApply thirdApply = tbMerchantThirdApplyMapper.selectByPrimaryKey(Integer.valueOf(shopInfo.getMerchantId()));
|
||||
if (ObjectUtil.isEmpty(thirdApply) || ObjectUtil.isNull(thirdApply)) {
|
||||
|
||||
TbMerchantThirdApply thirdApply= tbMerchantThirdApplyMapper.selectByPrimaryKey(Integer.valueOf(shopInfo.getMerchantId()));
|
||||
if(ObjectUtil.isEmpty(thirdApply)||ObjectUtil.isNull(thirdApply)){
|
||||
return Result.fail("支付通道不存在");
|
||||
}
|
||||
|
||||
BigDecimal payAmount = new BigDecimal(amount).setScale(2, BigDecimal.ROUND_DOWN);
|
||||
BigDecimal payAmount= new BigDecimal(amount).setScale(2,BigDecimal.ROUND_DOWN);
|
||||
|
||||
TbMemberIn memberIn = new TbMemberIn();
|
||||
TbMemberIn memberIn=new TbMemberIn();
|
||||
memberIn.setAmount(payAmount);
|
||||
memberIn.setUserId(Integer.valueOf(tbShopUser.getUserId()));
|
||||
memberIn.setCode(tbShopUser.getDynamicCode());
|
||||
memberIn.setCode(tbShopUser.getCode());
|
||||
memberIn.setShopId(shopInfo.getId());
|
||||
memberIn.setStatus("7");
|
||||
memberIn.setMerchantId(Integer.valueOf(shopInfo.getMerchantId()));
|
||||
|
|
@ -585,7 +453,8 @@ public class PayService {
|
|||
tbMemberInMapper.insert(memberIn);
|
||||
|
||||
|
||||
PayReq req = new PayReq();
|
||||
|
||||
PayReq req=new PayReq();
|
||||
|
||||
req.setAppId(thirdApply.getAppId());
|
||||
req.setTimestamp(System.currentTimeMillis());
|
||||
|
|
@ -599,51 +468,26 @@ public class PayService {
|
|||
req.setUserId(openId);
|
||||
|
||||
|
||||
Map<String, Object> map = BeanUtil.transBeanMap(req);
|
||||
req.setSign(MD5Util.encrypt(map, thirdApply.getAppToken(), true));
|
||||
Map<String,Object> map= BeanUtil.transBeanMap(req);
|
||||
req.setSign(MD5Util.encrypt(map,thirdApply.getAppToken(),true));
|
||||
|
||||
ResponseEntity<String> response = restTemplate.postForEntity(url.concat("trans/pay"), req, String.class);
|
||||
if (response.getStatusCodeValue() == 200 && ObjectUtil.isNotEmpty(response.getBody())) {
|
||||
JSONObject object = JSONObject.parseObject(response.getBody());
|
||||
if (object.get("code").equals("0")) {
|
||||
ResponseEntity<String> response= restTemplate.postForEntity(url.concat("trans/pay"),req,String.class);
|
||||
if(response.getStatusCodeValue()==200&&ObjectUtil.isNotEmpty(response.getBody())){
|
||||
JSONObject object=JSONObject.parseObject(response.getBody());
|
||||
if(object.get("code").equals("0")){
|
||||
memberIn.setOrderNo(object.getJSONObject("data").get("orderNumber").toString());
|
||||
memberIn.setUpdateTime(new Date());
|
||||
tbMemberInMapper.updateByPrimaryKeySelective(memberIn);
|
||||
|
||||
return Result.success(CodeEnum.SUCCESS, object.getJSONObject("data"));
|
||||
} else {
|
||||
return Result.success(CodeEnum.SUCCESS,object.getJSONObject("data"));
|
||||
}else {
|
||||
return Result.fail(object.getString("msg"));
|
||||
}
|
||||
}
|
||||
return Result.fail("失败");
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public String callBackGroupPay(String payOrderNO) {
|
||||
TbGroupOrderInfo orderInfo = tbGroupOrderInfoMapper.selectByPayOrderNo(payOrderNO);
|
||||
if (ObjectUtil.isEmpty(orderInfo)) {
|
||||
return "订单信息不存在";
|
||||
}
|
||||
|
||||
if ("unpaid".equals(orderInfo.getStatus())) {
|
||||
for (int i = 0; i < orderInfo.getNumber(); i++) {
|
||||
TbGroupOrderCoupon groupOrderCoupon = new TbGroupOrderCoupon();
|
||||
groupOrderCoupon.setOrderId(orderInfo.getId());
|
||||
groupOrderCoupon.setCouponNo(genCouponNumber());
|
||||
groupOrderCoupon.setIsRefund(0);
|
||||
groupOrderCouponService.insert(groupOrderCoupon);
|
||||
}
|
||||
orderInfo.setExpDate(getNextMonDate());
|
||||
//修改主单状态
|
||||
orderInfo.setStatus("unused");
|
||||
orderInfo.setPayAmount(orderInfo.getOrderAmount());
|
||||
tbGroupOrderInfoMapper.update(orderInfo);
|
||||
return "SUCCESS";
|
||||
}else {
|
||||
log.error("支付回调异常,订单状态为{}",orderInfo);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public String callBackPay(String payOrderNO) {
|
||||
|
|
@ -668,10 +512,10 @@ public class PayService {
|
|||
tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo);
|
||||
|
||||
|
||||
JSONObject jsonObject = new JSONObject();
|
||||
jsonObject.put("token", 0);
|
||||
jsonObject.put("type", "wxcreate");
|
||||
jsonObject.put("orderId", orderInfo.getId().toString());
|
||||
JSONObject jsonObject=new JSONObject();
|
||||
jsonObject.put("token",0);
|
||||
jsonObject.put("type","wxcreate");
|
||||
jsonObject.put("orderId",orderInfo.getId().toString());
|
||||
|
||||
producer.putOrderCollect(jsonObject.toJSONString());
|
||||
|
||||
|
|
@ -686,10 +530,10 @@ public class PayService {
|
|||
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public String minsuccess(String payOrderNO, String tradeNo) {
|
||||
public String minsuccess(String payOrderNO,String tradeNo){
|
||||
|
||||
TbMemberIn memberIn = tbMemberInMapper.selectByOrderNo(payOrderNO);
|
||||
if (ObjectUtil.isEmpty(memberIn)) {
|
||||
TbMemberIn memberIn= tbMemberInMapper.selectByOrderNo(payOrderNO);
|
||||
if(ObjectUtil.isEmpty(memberIn)){
|
||||
return "充值记录不存在";
|
||||
}
|
||||
|
||||
|
|
@ -698,18 +542,21 @@ public class PayService {
|
|||
memberIn.setUpdateTime(new Date());
|
||||
tbMemberInMapper.updateByPrimaryKeySelective(memberIn);
|
||||
|
||||
TbShopUser tbShopUser = tbShopUserMapper.selectByUserIdAndShopId(memberIn.getUserId().toString(), memberIn.getShopId().toString());
|
||||
if (ObjectUtil.isEmpty(tbShopUser)) {
|
||||
TbShopUser tbShopUser= tbShopUserMapper.selectByUserIdAndShopId(memberIn.getUserId().toString(),memberIn.getShopId().toString());
|
||||
if(ObjectUtil.isEmpty(tbShopUser)){
|
||||
return "用户信息不存在";
|
||||
}
|
||||
|
||||
if(!"1".equals(tbShopUser.getIsVip().toString())){
|
||||
tbShopUser.setIsVip(Byte.parseByte("1"));
|
||||
}
|
||||
|
||||
//修改客户资金
|
||||
tbShopUser.setIsVip(Byte.parseByte("1"));
|
||||
tbShopUser.setAmount(tbShopUser.getAmount().add(memberIn.getAmount()));
|
||||
tbShopUser.setUpdatedAt(System.currentTimeMillis());
|
||||
tbShopUserMapper.updateByPrimaryKeySelective(tbShopUser);
|
||||
|
||||
TbShopUserFlow flow = new TbShopUserFlow();
|
||||
TbShopUserFlow flow=new TbShopUserFlow();
|
||||
flow.setShopUserId(Integer.valueOf(tbShopUser.getId()));
|
||||
flow.setBizCode("scanMemberIn");
|
||||
flow.setBizName("会员扫码充值");
|
||||
|
|
@ -725,76 +572,52 @@ public class PayService {
|
|||
//
|
||||
// }
|
||||
|
||||
/**
|
||||
* 生成长度为12的随机串
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public static String genCouponNumber() {
|
||||
Random random = new Random();
|
||||
long min = 10000000000L;
|
||||
long max = 19999999999L;
|
||||
// 生成介于min和max之间的随机整数
|
||||
long randomNumber = min + ((long) (random.nextDouble() * (max - min)));
|
||||
// 将随机整数转换为字符串,并在前面补0,直到长度为12位
|
||||
return String.format("%012d", randomNumber);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取一个月后的时间
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public Date getNextMonDate() {
|
||||
// 获取当前日期和时间
|
||||
LocalDateTime currentDateTime = LocalDateTime.now();
|
||||
// 计算一个月后的日期和时间
|
||||
LocalDateTime nextMonthDateTime = currentDateTime.plusMonths(1);
|
||||
return java.sql.Timestamp.valueOf(nextMonthDateTime);
|
||||
}
|
||||
public static void main(String[] args){
|
||||
|
||||
RestTemplate restTemplate1= new RestTemplate();
|
||||
JSONObject param=new JSONObject();
|
||||
|
||||
String priv="MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAIqNqTqhN8zE7eFZnwKcyBTENce2wdAtl/gaDHNuNVgg33dS27Jx0fKl9QSHXyzyxbAdG8F94niYbRBstrMymFRjuO72jH+rIH62Ym1k7l8JSLVK2dKHXt8lHDaQGUP10q0EEocnDQ9cL93oBNG1ttsV6vOAu1TPvRK9TGihRAe1AgMBAAECgYBmI8KCl0DkcrSOsRvYuC2DqZWf8el1B3eFjeZp3e/zVOCIPYv6Q5ArWg6DVSxjnWEA0KSagqvGjU+xkQMqnXzPcPMhsIS+1wyR/pP+pwiatO2ioHaQpEqHg9eXhxrgA477/xuKVw9zl5GNqaIgd++2NDXnqLh0Y6OR73f0OB5eDQJBAPihEm+UWLOam/Q/k2+k4Lm2dvxJTBur1fslBiJpgMhgcz/PlwRwpL7aPD0AuPv0NqLouuoTiKpq9icnUv12tgsCQQCOqTANw0IErCHUNdinjXewmG3ui1j9XgM41rSn5ZeTrPL4GhZc2zbS/pZT4PBKUL6NLGkfPHmw4rOmNL/Xc5E/AkBqAwQBX5eSvVHSC2mqKPtJNGv3lqlFAzfyJg8/jQzEY5vAkZsq4Xzdg+A7gptdkvvY6rMIK9wSDhl3CGVyfbORAkA1N+g1OiHmnFACWhP4bU25EyPvWQxZeDi7e1zpRTzGWj5JT3IIMb7B9zcdE0yQbI6pG2gbvvOmiOt7lTH7raEBAkBas2gugvR3f0aGqQcqMpyM627pyRppQ2h58/7KBylP3oR2BReqMUcXeiJ8TuBXzbRXpeVQ0DWOva5CWZJmBMdz";
|
||||
|
||||
PayReq req=new PayReq();
|
||||
|
||||
req.setAppId("M8002023120892f1e4");
|
||||
req.setTimestamp(System.currentTimeMillis());
|
||||
req.setIp("127.0.0.1");
|
||||
req.setMercOrderNo(System.currentTimeMillis()+"");
|
||||
req.setNotifyUrl("https");
|
||||
req.setPayAmt("0.01");
|
||||
req.setPayType("03");
|
||||
req.setPayWay("WXZF");
|
||||
req.setSubject("ddd");
|
||||
req.setUserId("or1l864NBOoJZhC5x_yeziZ26j6c");
|
||||
|
||||
Map<String,Object> map= BeanUtil.transBeanMap(req);
|
||||
|
||||
req.setSign(MD5Util.encrypt(map,priv,true));
|
||||
|
||||
|
||||
// public static void main(String[] args) {
|
||||
//
|
||||
// RestTemplate restTemplate1 = new RestTemplate();
|
||||
// JSONObject param = new JSONObject();
|
||||
//
|
||||
// String priv = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAIqNqTqhN8zE7eFZnwKcyBTENce2wdAtl/gaDHNuNVgg33dS27Jx0fKl9QSHXyzyxbAdG8F94niYbRBstrMymFRjuO72jH+rIH62Ym1k7l8JSLVK2dKHXt8lHDaQGUP10q0EEocnDQ9cL93oBNG1ttsV6vOAu1TPvRK9TGihRAe1AgMBAAECgYBmI8KCl0DkcrSOsRvYuC2DqZWf8el1B3eFjeZp3e/zVOCIPYv6Q5ArWg6DVSxjnWEA0KSagqvGjU+xkQMqnXzPcPMhsIS+1wyR/pP+pwiatO2ioHaQpEqHg9eXhxrgA477/xuKVw9zl5GNqaIgd++2NDXnqLh0Y6OR73f0OB5eDQJBAPihEm+UWLOam/Q/k2+k4Lm2dvxJTBur1fslBiJpgMhgcz/PlwRwpL7aPD0AuPv0NqLouuoTiKpq9icnUv12tgsCQQCOqTANw0IErCHUNdinjXewmG3ui1j9XgM41rSn5ZeTrPL4GhZc2zbS/pZT4PBKUL6NLGkfPHmw4rOmNL/Xc5E/AkBqAwQBX5eSvVHSC2mqKPtJNGv3lqlFAzfyJg8/jQzEY5vAkZsq4Xzdg+A7gptdkvvY6rMIK9wSDhl3CGVyfbORAkA1N+g1OiHmnFACWhP4bU25EyPvWQxZeDi7e1zpRTzGWj5JT3IIMb7B9zcdE0yQbI6pG2gbvvOmiOt7lTH7raEBAkBas2gugvR3f0aGqQcqMpyM627pyRppQ2h58/7KBylP3oR2BReqMUcXeiJ8TuBXzbRXpeVQ0DWOva5CWZJmBMdz";
|
||||
//
|
||||
// PayReq req = new PayReq();
|
||||
//
|
||||
// req.setAppId("M8002023120892f1e4");
|
||||
ResponseEntity<String> response= restTemplate1.postForEntity("https://gatewaytestapi.sxczgkj.cn/gate-service/trans/pay",req,String.class);
|
||||
|
||||
|
||||
|
||||
// TradeQueryReq req=new TradeQueryReq();
|
||||
// req.setAppId("M800202305094c170c");
|
||||
// req.setTimestamp(System.currentTimeMillis());
|
||||
// req.setIp("127.0.0.1");
|
||||
// req.setMercOrderNo(System.currentTimeMillis() + "");
|
||||
// req.setNotifyUrl("https");
|
||||
// req.setPayAmt("0.01");
|
||||
// req.setPayType("03");
|
||||
// req.setPayWay("WXZF");
|
||||
// req.setSubject("ddd");
|
||||
// req.setUserId("or1l864NBOoJZhC5x_yeziZ26j6c");
|
||||
// req.setOrderNumber("SXF_W_MERC_20240205182102491");
|
||||
// Map<String,Object> map= BeanUtil.transBeanMap(req);
|
||||
//
|
||||
// Map<String, Object> map = BeanUtil.transBeanMap(req);
|
||||
// req.setSign(MD5Util.encrypt(map,priv,true));
|
||||
//
|
||||
// req.setSign(MD5Util.encrypt(map, priv, true));
|
||||
// ResponseEntity<String> response= restTemplate1.postForEntity("https://gateway.api.sxczgkj.cn/gate-service/merchantOrder/tradeQuery",req,String.class);
|
||||
//
|
||||
//
|
||||
// ResponseEntity<String> response = restTemplate1.postForEntity("https://gatewaytestapi.sxczgkj.cn/gate-service/trans/pay", req, String.class);
|
||||
//
|
||||
//
|
||||
//// TradeQueryReq req=new TradeQueryReq();
|
||||
//// req.setAppId("M800202305094c170c");
|
||||
//// req.setTimestamp(System.currentTimeMillis());
|
||||
//// req.setOrderNumber("SXF_W_MERC_20240205182102491");
|
||||
//// Map<String,Object> map= BeanUtil.transBeanMap(req);
|
||||
////
|
||||
//// req.setSign(MD5Util.encrypt(map,priv,true));
|
||||
////
|
||||
//// ResponseEntity<String> response= restTemplate1.postForEntity("https://gateway.api.sxczgkj.cn/gate-service/merchantOrder/tradeQuery",req,String.class);
|
||||
////
|
||||
////
|
||||
// System.out.println(">>>>>>>>>>>>>>>" + response.getBody());
|
||||
// }
|
||||
System.out.println(">>>>>>>>>>>>>>>"+response.getBody());
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,16 @@
|
|||
package com.chaozhanggui.system.cashierservice.thirdpay.constants;
|
||||
|
||||
public enum SignTypeEnum {
|
||||
|
||||
MD5("MD5"),RSA2("RSA2");
|
||||
|
||||
private final String value;
|
||||
|
||||
SignTypeEnum(String value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public String getValue() {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
package com.chaozhanggui.system.cashierservice.thirdpay.req;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
public class MainScanReq implements Serializable {
|
||||
|
||||
private String subject;
|
||||
|
||||
private String body;
|
||||
|
||||
private Long amount;
|
||||
|
||||
private String subAppid;
|
||||
|
||||
private String currency;
|
||||
|
||||
private String authCode;
|
||||
|
||||
private String mchOrderNo;
|
||||
|
||||
private String storeId;
|
||||
|
||||
private String notifyUrl;
|
||||
|
||||
public MainScanReq(String subject, String body, Long amount, String subAppid, String currency, String authCode, String mchOrderNo, String storeId, String notifyUrl) {
|
||||
this.subject = subject;
|
||||
this.body = body;
|
||||
this.amount = amount;
|
||||
this.subAppid = subAppid;
|
||||
this.currency = currency;
|
||||
this.authCode = authCode;
|
||||
this.mchOrderNo = mchOrderNo;
|
||||
this.storeId = storeId;
|
||||
this.notifyUrl = notifyUrl;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
package com.chaozhanggui.system.cashierservice.thirdpay.req;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
@Data
|
||||
public class OrderRefundReq implements Serializable {
|
||||
|
||||
private String mchRefundNo;
|
||||
|
||||
private String payOrderId;
|
||||
|
||||
private String mchOrderNo;
|
||||
|
||||
private String refundReason;
|
||||
|
||||
private Long refundAmount;
|
||||
|
||||
private String notifyUrl;
|
||||
|
||||
private String extParam;
|
||||
|
||||
public OrderRefundReq(String mchRefundNo, String payOrderId, String mchOrderNo, String refundReason, Long refundAmount, String notifyUrl, String extParam) {
|
||||
this.mchRefundNo = mchRefundNo;
|
||||
this.payOrderId = payOrderId;
|
||||
this.mchOrderNo = mchOrderNo;
|
||||
this.refundReason = refundReason;
|
||||
this.refundAmount = refundAmount;
|
||||
this.notifyUrl = notifyUrl;
|
||||
this.extParam = extParam;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
package com.chaozhanggui.system.cashierservice.thirdpay.req;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
public class OrderReturnQueryReq implements Serializable {
|
||||
|
||||
private String mchRefundNo;
|
||||
|
||||
private String refundOrderId;
|
||||
|
||||
public OrderReturnQueryReq(String mchRefundNo, String refundOrderId) {
|
||||
this.mchRefundNo = mchRefundNo;
|
||||
this.refundOrderId = refundOrderId;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
package com.chaozhanggui.system.cashierservice.thirdpay.req;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
public class OrderStatusQueryReq implements Serializable {
|
||||
|
||||
private String payOrderId;
|
||||
|
||||
private String mchOrderNo;
|
||||
|
||||
public OrderStatusQueryReq(String payOrderId, String mchOrderNo) {
|
||||
this.payOrderId = payOrderId;
|
||||
this.mchOrderNo = mchOrderNo;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
package com.chaozhanggui.system.cashierservice.thirdpay.req;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
public class PublicParam implements Serializable {
|
||||
|
||||
private String appId;
|
||||
|
||||
private String sign;
|
||||
|
||||
private String signType;
|
||||
|
||||
private String bizData;
|
||||
|
||||
private String reqTime;
|
||||
|
||||
private String version;
|
||||
|
||||
private String reqId;
|
||||
|
||||
public PublicParam(String appId, String sign, String signType, String bizData, String reqTime, String version, String reqId) {
|
||||
this.appId = appId;
|
||||
this.sign = sign;
|
||||
this.signType = signType;
|
||||
this.bizData = bizData;
|
||||
this.reqTime = reqTime;
|
||||
this.version = version;
|
||||
this.reqId = reqId;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,49 @@
|
|||
package com.chaozhanggui.system.cashierservice.thirdpay.req;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
public class WxScanPayReq implements Serializable {
|
||||
|
||||
private String subject;
|
||||
|
||||
private String body;
|
||||
|
||||
private Long amount;
|
||||
|
||||
private String currency;
|
||||
|
||||
private String payType;
|
||||
|
||||
|
||||
private String subAppid;
|
||||
|
||||
private String userId;
|
||||
|
||||
private String clientIp;
|
||||
|
||||
private String mchOrderNo;
|
||||
|
||||
private String storeId;
|
||||
|
||||
private String notifyUrl;
|
||||
|
||||
private String returnUrl;
|
||||
|
||||
public WxScanPayReq(String subject, String body, Long amount, String currency, String payType, String subAppid, String userId, String clientIp, String mchOrderNo, String storeId, String notifyUrl, String returnUrl) {
|
||||
this.subject = subject;
|
||||
this.body = body;
|
||||
this.amount = amount;
|
||||
this.currency = currency;
|
||||
this.payType = payType;
|
||||
this.subAppid = subAppid;
|
||||
this.userId = userId;
|
||||
this.clientIp = clientIp;
|
||||
this.mchOrderNo = mchOrderNo;
|
||||
this.storeId = storeId;
|
||||
this.notifyUrl = notifyUrl;
|
||||
this.returnUrl = returnUrl;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
package com.chaozhanggui.system.cashierservice.thirdpay.resp;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
public class MainScanResp implements Serializable {
|
||||
|
||||
private Long amount;
|
||||
|
||||
private String mchOrderNo;
|
||||
|
||||
private String payOrderId;
|
||||
|
||||
private String mercNo;
|
||||
|
||||
private String channelSendNo;
|
||||
|
||||
private String channelTradeNo;
|
||||
|
||||
private String state;
|
||||
|
||||
private String payType;
|
||||
|
||||
private String ifCode;
|
||||
|
||||
private String extParam;
|
||||
|
||||
private String note;
|
||||
|
||||
private String tradeFee;
|
||||
|
||||
private String storeId;
|
||||
|
||||
private String subject;
|
||||
|
||||
private String drType;
|
||||
|
||||
private Long refundAmt;
|
||||
|
||||
private Integer refundState;
|
||||
|
||||
private Long cashFee;
|
||||
|
||||
private String settlementType;
|
||||
}
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
package com.chaozhanggui.system.cashierservice.thirdpay.resp;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
public class OderReturnQueyResp implements Serializable {
|
||||
|
||||
|
||||
private String mchRefundNo;
|
||||
|
||||
private String refundOrderId;
|
||||
|
||||
private String state;
|
||||
|
||||
private String oriPayOrderId;
|
||||
|
||||
private String mercNo;
|
||||
|
||||
private Long oriAmount;
|
||||
|
||||
private Long refundAmt;
|
||||
|
||||
private String refundReason;
|
||||
|
||||
private String ifCode;
|
||||
|
||||
private String note;
|
||||
|
||||
private String refundTime;
|
||||
|
||||
private String extParam;
|
||||
|
||||
private String payType;
|
||||
}
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
package com.chaozhanggui.system.cashierservice.thirdpay.resp;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
public class OrderReturnResp implements Serializable {
|
||||
|
||||
private String mchRefundNo;
|
||||
|
||||
private String refundOrderId;
|
||||
|
||||
private String state;
|
||||
|
||||
private String oriPayOrderId;
|
||||
|
||||
private String mercNo;
|
||||
|
||||
private Long oriAmount;
|
||||
|
||||
private Long refundAmt;
|
||||
|
||||
private String refundReason;
|
||||
|
||||
private String ifCode;
|
||||
|
||||
private String refundTime;
|
||||
|
||||
private String extParam;
|
||||
|
||||
private String payType;
|
||||
}
|
||||
|
|
@ -0,0 +1,49 @@
|
|||
package com.chaozhanggui.system.cashierservice.thirdpay.resp;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
public class OrderStatusQueryResp implements Serializable {
|
||||
|
||||
private Long amount;
|
||||
|
||||
private String channelSendNo;
|
||||
|
||||
private String ifCode;
|
||||
|
||||
private String mercNo;
|
||||
|
||||
private String mchOrderNo;
|
||||
|
||||
private String payOrderId;
|
||||
|
||||
private String payType;
|
||||
|
||||
private String channelTradeNo;
|
||||
|
||||
private String state;
|
||||
|
||||
private String refundAmt;
|
||||
|
||||
private String refundState;
|
||||
|
||||
private String drType;
|
||||
|
||||
private String extParam;
|
||||
|
||||
private String payTime;
|
||||
|
||||
private String subject;
|
||||
|
||||
private String tradeFee;
|
||||
|
||||
private String cashFee;
|
||||
|
||||
private String storeId;
|
||||
|
||||
private String userId;
|
||||
|
||||
private String settlementType;
|
||||
}
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
package com.chaozhanggui.system.cashierservice.thirdpay.resp;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
@Data
|
||||
public class PublicResp <T> implements Serializable {
|
||||
|
||||
private String code;
|
||||
|
||||
private String msg;
|
||||
|
||||
private String sign;
|
||||
|
||||
private String bizData;
|
||||
|
||||
private T objData;
|
||||
|
||||
private String signType;
|
||||
|
||||
private String timestamp;
|
||||
}
|
||||
|
|
@ -0,0 +1,51 @@
|
|||
package com.chaozhanggui.system.cashierservice.thirdpay.resp;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
public class WxScanPayResp implements Serializable {
|
||||
|
||||
private Long amount;
|
||||
|
||||
private String mchOrderNo;
|
||||
|
||||
private String payOrderId;
|
||||
|
||||
private String mercNo;
|
||||
|
||||
private String channelSendNo;
|
||||
|
||||
private String channelTradeNo;
|
||||
|
||||
private String state;
|
||||
|
||||
private String payType;
|
||||
|
||||
private String ifCode;
|
||||
|
||||
private String extParam;
|
||||
|
||||
private String payInfo;
|
||||
|
||||
private String liteInfo;
|
||||
|
||||
private String note;
|
||||
|
||||
private String tradeFee;
|
||||
|
||||
private String storeId;
|
||||
|
||||
private String subject;
|
||||
|
||||
private String drType;
|
||||
|
||||
private String refundAmt;
|
||||
|
||||
private String refundState;
|
||||
|
||||
private String cashFee;
|
||||
|
||||
private String settlementType;
|
||||
}
|
||||
|
|
@ -0,0 +1,300 @@
|
|||
package com.chaozhanggui.system.cashierservice.thirdpay.service;
|
||||
|
||||
import cn.hutool.http.HttpRequest;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.TypeReference;
|
||||
import com.chaozhanggui.system.cashierservice.thirdpay.constants.SignTypeEnum;
|
||||
import com.chaozhanggui.system.cashierservice.thirdpay.req.*;
|
||||
import com.chaozhanggui.system.cashierservice.thirdpay.resp.*;
|
||||
import com.chaozhanggui.system.cashierservice.util.DateUtils;
|
||||
import com.chaozhanggui.system.cashierservice.util.JSONUtil;
|
||||
import com.chaozhanggui.system.cashierservice.util.MD5Util;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.Arrays;
|
||||
import java.util.Comparator;
|
||||
import java.util.LinkedHashMap;
|
||||
|
||||
@Service
|
||||
@Slf4j
|
||||
public class ThirdPayService {
|
||||
|
||||
private static String micropay="/api/open/payment/micropay";
|
||||
|
||||
private static String ltpay="/api/open/payment/ltpay";
|
||||
|
||||
private static String trade="/api/open/query/trade";
|
||||
|
||||
/**
|
||||
* 被扫接口
|
||||
* @param url
|
||||
* @param appId
|
||||
* @param subject
|
||||
* @param body
|
||||
* @param amount
|
||||
* @param subAppId
|
||||
* @param authCode
|
||||
* @param orderNo
|
||||
* @param storeId
|
||||
* @param notifyUrl
|
||||
* @param key
|
||||
* @return
|
||||
*/
|
||||
public PublicResp<MainScanResp> mainScan(String url,String appId, String subject, String body, Long amount, String subAppId, String authCode, String orderNo, String storeId, String notifyUrl,
|
||||
String key
|
||||
) {
|
||||
|
||||
MainScanReq mainScanReq = new MainScanReq(subject, body, amount, subAppId, "cny", authCode, orderNo, storeId, notifyUrl);
|
||||
PublicParam param = new PublicParam(appId, "", SignTypeEnum.MD5.getValue(), null, DateUtils.getSdfTimes(), "1.0", String.valueOf(System.currentTimeMillis()));
|
||||
|
||||
|
||||
try {
|
||||
String str = JSONUtil.toJSONString(sortFields(mainScanReq));
|
||||
param.setBizData(str);
|
||||
String tt = sortFieldsAndPrint(param);
|
||||
String MD5 = tt.concat("appSecret=" + key);
|
||||
log.info("加签原传:{}", MD5);
|
||||
String sign = MD5Util.encrypt(MD5);
|
||||
param.setSign(sign);
|
||||
String reqbody = JSONUtil.toJSONString(param);
|
||||
log.info("请求参数:{}", reqbody);
|
||||
String response = HttpRequest.post(url.concat(micropay)).body(reqbody).execute().body();
|
||||
log.info("返回结果:{}", response);
|
||||
PublicResp<MainScanResp> resp =JSONUtil.parseJSONStr2T(response,PublicResp.class);
|
||||
|
||||
resp.setObjData(JSONUtil.parseJSONStr2T(resp.getBizData(),MainScanResp.class));
|
||||
return resp;
|
||||
} catch (IllegalAccessException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 主扫接口(小程序)
|
||||
* @param url
|
||||
* @param appId
|
||||
* @param subject
|
||||
* @param body
|
||||
* @param amount
|
||||
* @param payType
|
||||
* @param subAppId
|
||||
* @param userId
|
||||
* @param clinetIp
|
||||
* @param orderNo
|
||||
* @param storeId
|
||||
* @param notifyUrl
|
||||
* @param returnUrl
|
||||
* @param key
|
||||
* @return
|
||||
*/
|
||||
|
||||
public PublicResp<WxScanPayResp> scanpay(String url,String appId, String subject, String body, Long amount,String payType, String subAppId, String userId,
|
||||
|
||||
String clinetIp,String orderNo, String storeId, String notifyUrl,String returnUrl,
|
||||
String key){
|
||||
WxScanPayReq scanPayReq=new WxScanPayReq(subject,body,amount,"cny",payType,subAppId,userId,clinetIp,orderNo,storeId,notifyUrl,returnUrl);
|
||||
PublicParam param=new PublicParam(appId,null,SignTypeEnum.MD5.getValue(),null,DateUtils.getSdfTimes(), "1.0", String.valueOf(System.currentTimeMillis()));
|
||||
|
||||
|
||||
try {
|
||||
String str = JSONUtil.toJSONString(sortFields(scanPayReq));
|
||||
param.setBizData(str);
|
||||
String tt = sortFieldsAndPrint(param);
|
||||
String MD5 = tt.concat("appSecret=" + key);
|
||||
log.info("加签原传:{}", MD5);
|
||||
String sign = MD5Util.encrypt(MD5);
|
||||
param.setSign(sign);
|
||||
String reqbody = JSONUtil.toJSONString(param);
|
||||
log.info("请求参数:{}", reqbody);
|
||||
String response = HttpRequest.post(url.concat(ltpay)).body(reqbody).execute().body();
|
||||
log.info("返回结果:{}", response);
|
||||
PublicResp<WxScanPayResp> resp =JSONUtil.parseJSONStr2T(response,PublicResp.class);
|
||||
resp.setObjData(JSONUtil.parseJSONStr2T(resp.getBizData(),WxScanPayResp.class));
|
||||
return resp;
|
||||
} catch (IllegalAccessException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询订单状态
|
||||
* @param url
|
||||
* @param appId
|
||||
* @param payOrderId
|
||||
* @param mchOrderNo
|
||||
* @param key
|
||||
* @return
|
||||
*/
|
||||
public PublicResp<OrderStatusQueryResp> queryOrder(String url,String appId, String payOrderId,String mchOrderNo,String key){
|
||||
OrderStatusQueryReq req=new OrderStatusQueryReq(payOrderId,mchOrderNo);
|
||||
PublicParam param=new PublicParam(appId,null,SignTypeEnum.MD5.getValue(), null,DateUtils.getSdfTimes(), "1.0", String.valueOf(System.currentTimeMillis()));
|
||||
try {
|
||||
String str = JSONUtil.toJSONString(sortFields(req));
|
||||
param.setBizData(str);
|
||||
String tt = sortFieldsAndPrint(param);
|
||||
String MD5 = tt.concat("appSecret=" + key);
|
||||
log.info("加签原传:{}", MD5);
|
||||
String sign = MD5Util.encrypt(MD5);
|
||||
param.setSign(sign);
|
||||
String reqbody = JSONUtil.toJSONString(param);
|
||||
log.info("请求参数:{}", reqbody);
|
||||
String response = HttpRequest.post(url.concat(trade)).body(reqbody).execute().body();
|
||||
log.info("返回结果:{}", response);
|
||||
PublicResp<OrderStatusQueryResp> resp =JSONUtil.parseJSONStr2T(response,PublicResp.class);
|
||||
resp.setObjData(JSONUtil.parseJSONStr2T(resp.getBizData(),OrderStatusQueryResp.class));
|
||||
return resp;
|
||||
} catch (IllegalAccessException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 退款
|
||||
* @param url
|
||||
* @param appId
|
||||
* @param mchRefundNo
|
||||
* @param payOrderId
|
||||
* @param mchOrderNo
|
||||
* @param refundReason
|
||||
* @param refundAmount
|
||||
* @param notifyUrl
|
||||
* @param extParam
|
||||
* @param key
|
||||
* @return
|
||||
*/
|
||||
public PublicResp<OrderReturnResp> returnOrder(String url,String appId, String mchRefundNo, String payOrderId, String mchOrderNo, String refundReason, Long refundAmount, String notifyUrl, String extParam,String key){
|
||||
OrderRefundReq req=new OrderRefundReq(mchRefundNo, payOrderId, mchOrderNo, refundReason, refundAmount, notifyUrl, extParam);
|
||||
PublicParam param=new PublicParam(appId,null,SignTypeEnum.MD5.getValue(), null,DateUtils.getSdfTimes(), "1.0", String.valueOf(System.currentTimeMillis()));
|
||||
try {
|
||||
String str = JSONUtil.toJSONString(sortFields(req));
|
||||
param.setBizData(str);
|
||||
String tt = sortFieldsAndPrint(param);
|
||||
String MD5 = tt.concat("appSecret=" + key);
|
||||
log.info("加签原传:{}", MD5);
|
||||
String sign = MD5Util.encrypt(MD5);
|
||||
param.setSign(sign);
|
||||
String reqbody = JSONUtil.toJSONString(param);
|
||||
log.info("请求参数:{}", reqbody);
|
||||
String response = HttpRequest.post(url.concat(trade)).body(reqbody).execute().body();
|
||||
log.info("返回结果:{}", response);
|
||||
PublicResp<OrderReturnResp> resp =JSONUtil.parseJSONStr2T(response,PublicResp.class);
|
||||
resp.setObjData(JSONUtil.parseJSONStr2T(resp.getBizData(),OrderReturnResp.class));
|
||||
return resp;
|
||||
} catch (IllegalAccessException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 查询退款订单
|
||||
* @param url
|
||||
* @param appId
|
||||
* @param mchRefundNo
|
||||
* @param refundOrderId
|
||||
* @param key
|
||||
* @return
|
||||
*/
|
||||
public PublicResp<OrderReturnQueryReq> returnOrderQuery(String url,String appId,String mchRefundNo, String refundOrderId,String key){
|
||||
OrderReturnQueryReq req=new OrderReturnQueryReq(mchRefundNo,refundOrderId);
|
||||
PublicParam param=new PublicParam(appId,null,SignTypeEnum.MD5.getValue(), null,DateUtils.getSdfTimes(), "1.0", String.valueOf(System.currentTimeMillis()));
|
||||
try {
|
||||
String str = JSONUtil.toJSONString(sortFields(req));
|
||||
param.setBizData(str);
|
||||
String tt = sortFieldsAndPrint(param);
|
||||
String MD5 = tt.concat("appSecret=" + key);
|
||||
log.info("加签原传:{}", MD5);
|
||||
String sign = MD5Util.encrypt(MD5);
|
||||
param.setSign(sign);
|
||||
String reqbody = JSONUtil.toJSONString(param);
|
||||
log.info("请求参数:{}", reqbody);
|
||||
String response = HttpRequest.post(url.concat(trade)).body(reqbody).execute().body();
|
||||
log.info("返回结果:{}", response);
|
||||
PublicResp<OrderReturnQueryReq> resp =JSONUtil.parseJSONStr2T(response,PublicResp.class);
|
||||
resp.setObjData(JSONUtil.parseJSONStr2T(resp.getBizData(),OrderReturnQueryReq.class));
|
||||
return resp;
|
||||
} catch (IllegalAccessException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public static String sortFieldsAndPrint(Object obj) throws IllegalAccessException {
|
||||
StringBuffer sb = new StringBuffer();
|
||||
Class<?> clazz = obj.getClass();
|
||||
Field[] fields = clazz.getDeclaredFields();
|
||||
|
||||
// 按字段名称排序
|
||||
Arrays.sort(fields, Comparator.comparing(Field::getName));
|
||||
|
||||
for (Field field : fields) {
|
||||
// 可能需要设置访问权限
|
||||
field.setAccessible(true);
|
||||
if ("sign".equals(field.getName())) {
|
||||
continue;
|
||||
}
|
||||
Object value = field.get(obj);
|
||||
|
||||
|
||||
StringBuffer param = new StringBuffer();
|
||||
param.append(field.getName());
|
||||
param.append("=");
|
||||
if (value instanceof String) {
|
||||
param.append(value);
|
||||
|
||||
} else if (value instanceof Integer) {
|
||||
param.append(value);
|
||||
} else if (value instanceof Long) {
|
||||
param.append(value);
|
||||
}
|
||||
|
||||
param.append("&");
|
||||
sb.append(param);
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
|
||||
public static LinkedHashMap<String, Object> sortFields(Object obj) throws IllegalAccessException {
|
||||
|
||||
LinkedHashMap<String, Object> map = new LinkedHashMap<>();
|
||||
Class<?> clazz = obj.getClass();
|
||||
Field[] fields = clazz.getDeclaredFields();
|
||||
|
||||
// 按字段名称排序
|
||||
Arrays.sort(fields, Comparator.comparing(Field::getName));
|
||||
|
||||
for (Field field : fields) {
|
||||
// 可能需要设置访问权限
|
||||
field.setAccessible(true);
|
||||
Object value = field.get(obj);
|
||||
if(value==null){
|
||||
continue;
|
||||
}
|
||||
|
||||
map.put(field.getName(), value);
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public static void main(String[] args) {
|
||||
// mainScan("https://paymentapi.sxczgkj.cn","6639fdc9fdf6f35856a23b3c", "测试支付", "测试支付", 1L, "wx212769170d2c6b2a", "131112206836873461", "CZ".concat(String.valueOf(System.currentTimeMillis())), "S2405103298", "https://", "fEu7tJgqaoPCA5QevafnSHfqHtO7rWcvhyfA0ltuab7rbpgOlab7CFCmqxMIbssUvbOnFKLdQqW5xUvhzb7FoxJNMAkIf2KDzlgDl6Diw1oBq56agSAFHhgYr3bLxXXI");
|
||||
}
|
||||
}
|
||||
|
|
@ -1,3 +1,5 @@
|
|||
server:
|
||||
port: 9888
|
||||
spring:
|
||||
datasource:
|
||||
url: jdbc:mysql://rm-bp1b572nblln4jho2po.mysql.rds.aliyuncs.com/fycashier?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&useJDBCCompliantTimezoneShift=true&serverTimezone=Asia/Shanghai&useSSL=false
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
server:
|
||||
# port: 9889
|
||||
port: 9889
|
||||
servlet:
|
||||
context-path: /cashierService/
|
||||
wx:
|
||||
|
|
@ -51,7 +51,8 @@ logging:
|
|||
aliyun:
|
||||
keyid: LTAI5tPdEfYSZcqHbjCrtPRD
|
||||
keysecret: DZjyHBq3nTujF0NMLxnZgsecU8ZCvy
|
||||
oss:
|
||||
bucketname: cashier-oss
|
||||
endpoint: oss-cn-beijing.aliyuncs.com
|
||||
|
||||
thirdPay:
|
||||
payType: fushangtong
|
||||
callBack: https://cashierclient.sxczgkj.cn/cashier-client/notify/notifyPay
|
||||
url: https://paymentapi.sxczgkj.cn
|
||||
|
|
|
|||
Loading…
Reference in New Issue