Browse Source

Changes

master
主管理员 3 weeks ago
parent
commit
721f977f02
9 changed files with 150 additions and 87 deletions
  1. +6
    -2
      ruoyi-admin/src/main/resources/application-druid-root.yml
  2. +1
    -1
      ruoyi-admin/src/main/resources/application.yml
  3. +1
    -1
      ruoyi-catdog/src/main/java/com/ruoyi/applet/contoller/ApiMallOrderController.java
  4. +1
    -1
      ruoyi-catdog/src/main/java/com/ruoyi/applet/contoller/H5AppointmentController.java
  5. +1
    -1
      ruoyi-catdog/src/main/java/com/ruoyi/applet/service/IApiMallOrderService.java
  6. +57
    -39
      ruoyi-catdog/src/main/java/com/ruoyi/applet/service/impl/IApiMallOrderServiceImpl.java
  7. +1
    -1
      ruoyi-mall/src/main/java/com/cyl/h5/controller/PayNotifyController.java
  8. +54
    -35
      ruoyi-mall/src/main/java/com/cyl/h5/service/H5OrderService.java
  9. +28
    -6
      ruoyi-mall/src/main/java/com/cyl/wechat/pay/MpWxPayService.java

+ 6
- 2
ruoyi-admin/src/main/resources/application-druid-root.yml View File

@ -6,8 +6,8 @@ spring:
druid:
# 主库数据源 jdbc:mysql://localhost:3306/catmdogf?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true
master:
# url: jdbc:mysql://47.97.158.59:3306/catmdogf_test20250624?useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
url: jdbc:mysql://47.97.158.59:3306/catmdogf_prod20250624?useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
url: jdbc:mysql://47.97.158.59:3306/catmdogf_test20250624?useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
# url: jdbc:mysql://47.97.158.59:3306/catmdogf_prod20250624?useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
username: root
password: Qweruiop@123
# 从库数据源
@ -77,6 +77,10 @@ wechat:
staffAppId: wx01f0f43759922fda
staffSecret: b0a5617e6e4c387262a32af2b355c8b6
publicKeyId: PUB_KEY_ID_0116656396912025062400291558001601
publicKeyPath: E:\\git_java\\api_java\\pet-admin\\pet-admin\\pet-admin\\ruoyi-admin\\src\\main\\resources\\pub_key.pem
# publicKeyPath: E:\\file\\2025\\1\pet-admin\\ruoyi-admin\\src\\main\\resources\\pub_key.pem
# publicKeyPath: E:\\file\\2025\\project\\1\pet-admin\\ruoyi-admin\\src\\main\\resources\\pub_key.pem
# publicKeyPath: /data/software/app/key/pub_key.pem
pay:
v3:
# 租户id


+ 1
- 1
ruoyi-admin/src/main/resources/application.yml View File

@ -20,7 +20,7 @@ ruoyi:
# 开发环境配置.0
server:
# 服务器的HTTP端口,默认为8080
port: 8080
port: 8002
servlet:
# 应用的访问路径
context-path: /


+ 1
- 1
ruoyi-catdog/src/main/java/com/ruoyi/applet/contoller/ApiMallOrderController.java View File

@ -319,7 +319,7 @@ public class ApiMallOrderController extends BaseController {
@ApiOperation("mall-查询-再次支付")
@PostMapping("/orderPay")
public ResponseEntity<OrderPayResponse> orderPay(@RequestBody OrderPayRequest req){
public ResponseEntity<Object> orderPay(@RequestBody OrderPayRequest req){
log.info("订单支付","提交的数据:"+ JSONObject.toJSONString(req));
String redisKey = "h5_oms_order_pay_"+req.getPayId();
String redisValue = req.getPayId()+"_"+System.currentTimeMillis();


+ 1
- 1
ruoyi-catdog/src/main/java/com/ruoyi/applet/contoller/H5AppointmentController.java View File

@ -117,7 +117,7 @@ public class H5AppointmentController {
// orderService.submitOrderService(order.getId(), form.getPetOrderServices());
//TODO 4创建支付预付单
log.info("4 创建支付预付单......");
OrderPayResponse response = orderService.orderCreateAndPay(order, member, form.getOpenId());
Object response = orderService.orderCreateAndPay(order, member, form.getOpenId());
log.info("5 创建订单完成:" + response);
return AjaxResult.successData(response);


+ 1
- 1
ruoyi-catdog/src/main/java/com/ruoyi/applet/service/IApiMallOrderService.java View File

@ -32,5 +32,5 @@ public interface IApiMallOrderService {
//再次支付
OrderPayResponse orderPay(OrderPayRequest req);
Object orderPay(OrderPayRequest req);
}

+ 57
- 39
ruoyi-catdog/src/main/java/com/ruoyi/applet/service/impl/IApiMallOrderServiceImpl.java View File

@ -35,6 +35,7 @@ import com.cyl.tencent.OrderMessageModel;
import com.cyl.wechat.WechatPayData;
import com.cyl.wechat.WechatPayService;
import com.cyl.wechat.WechatPayUtil;
import com.cyl.wechat.pay.MpWxPayService;
import com.github.pagehelper.PageHelper;
import com.ruoyi.applet.service.IApiMallOrderService;
import com.ruoyi.applet.utils.WechatRefundUtil;
@ -110,7 +111,8 @@ public class IApiMallOrderServiceImpl implements IApiMallOrderService {
// @Lazy
private WechatPayService wechatPayService;
@Autowired
private MpWxPayService mpWxPayService;
@Autowired
@ -494,7 +496,7 @@ public class IApiMallOrderServiceImpl implements IApiMallOrderService {
@Override
public OrderPayResponse orderPay(OrderPayRequest req) {
public Object orderPay(OrderPayRequest req) {
QueryWrapper<Order> qw = new QueryWrapper<>();
qw.eq("pay_id", req.getPayId());
qw.eq("status", 0);
@ -566,48 +568,64 @@ public class IApiMallOrderServiceImpl implements IApiMallOrderService {
openId = memberWechat.getRoutineOpenid();
appId = WechatPayData.miniProgramAppId;
}
String prepayId = wechatPayService.jsapiPay(
String.valueOf(req.getPayId()),
Object order1 = mpWxPayService.createOrder(
orderDesc,
"127.0.0.1",
String.valueOf(req.getPayId()),
price,
String.valueOf(req.getPayId()),
openId,
req.getMemberId(),
appId
"{}",
WechatPayData.notifyUrl,
String.valueOf(req.getMemberId())
);
/*
String prepayId = wechatPayService.jsapiPay(
String.valueOf(order.getPayId()),
orderDesc,
Integer.valueOf(payAmount),
openId,
member.getId(),
appId
);
**/
OrderPayResponse response = new OrderPayResponse();
response.setPayType(2);
String nonceStr = WechatPayUtil.generateNonceStr();
long timeStamp = WechatPayUtil.getCurrentTimestamp();
prepayId = "prepay_id=" + prepayId;
String signType = "RSA";
String paySign = null;
String signatureStr = Stream.of(appId, String.valueOf(timeStamp), nonceStr, prepayId)
.collect(Collectors.joining("\n", "", "\n"));
try {
paySign = WechatPayUtil.getSign(signatureStr, WechatPayData.privateKeyPath);
} catch (Exception e) {
throw new RuntimeException("支付失败");
}
response.setAppId(appId);
response.setTimeStamp(String.valueOf(timeStamp));
response.setNonceStr(nonceStr);
response.setSignType(signType);
response.setPackage_(prepayId);
response.setPaySign(paySign);
response.setOrderId(orderList.get(0).getId());
return response;
return order1;
//
// String prepayId = wechatPayService.jsapiPay(
// String.valueOf(req.getPayId()),
// orderDesc,
// price,
// openId,
// req.getMemberId(),
// appId
// );
//
// /*
// String prepayId = wechatPayService.jsapiPay(
// String.valueOf(order.getPayId()),
// orderDesc,
// Integer.valueOf(payAmount),
// openId,
// member.getId(),
// appId
// );
// **/
//
// OrderPayResponse response = new OrderPayResponse();
// response.setPayType(2);
// String nonceStr = WechatPayUtil.generateNonceStr();
// long timeStamp = WechatPayUtil.getCurrentTimestamp();
// prepayId = "prepay_id=" + prepayId;
// String signType = "RSA";
// String paySign = null;
// String signatureStr = Stream.of(appId, String.valueOf(timeStamp), nonceStr, prepayId)
// .collect(Collectors.joining("\n", "", "\n"));
// try {
// paySign = WechatPayUtil.getSign(signatureStr, WechatPayData.privateKeyPath);
// } catch (Exception e) {
// throw new RuntimeException("支付失败");
// }
// response.setAppId(appId);
// response.setTimeStamp(String.valueOf(timeStamp));
// response.setNonceStr(nonceStr);
// response.setSignType(signType);
// response.setPackage_(prepayId);
// response.setPaySign(paySign);
// response.setOrderId(orderList.get(0).getId());
// return response;
}
}

+ 1
- 1
ruoyi-mall/src/main/java/com/cyl/h5/controller/PayNotifyController.java View File

@ -166,7 +166,7 @@ public class PayNotifyController {
message.setTradeStatus(Transaction.TradeStateEnum.SUCCESS);
message.setPayTime(new Date());
message.setTradeNo(notify.getTransactionId());
h5OrderService.payCallBack(message);
h5OrderService.payCallBackForBCHSHI(message);
log.info("新版本微信公钥的支付回调成功:{}", notify);
return;


+ 54
- 35
ruoyi-mall/src/main/java/com/cyl/h5/service/H5OrderService.java View File

@ -45,6 +45,7 @@ import com.cyl.tencent.OrderMessageModel;
import com.cyl.wechat.WechatPayData;
import com.cyl.wechat.WechatPayService;
import com.cyl.wechat.WechatPayUtil;
import com.cyl.wechat.pay.MpWxPayService;
import com.github.pagehelper.PageHelper;
import com.google.gson.Gson;
import com.ruoyi.common.constant.Constants;
@ -91,6 +92,9 @@ public class H5OrderService {
@Autowired
private MemberAddressMapper memberAddressMapper;
@Autowired
private MpWxPayService mpWxPayService;
@Autowired
private H5MemberAddressService h5MemberAddressService;
@ -1084,7 +1088,7 @@ public class H5OrderService {
}
public OrderPayResponse orderCreateAndPay(Order order, Member member, String openId) {
public Object orderCreateAndPay(Order order, Member member, String openId) {
log.info("【支付】开始组装支付参数");
QueryWrapper<OrderItem> orderItemQw = new QueryWrapper<>();
orderItemQw.eq("order_id", order.getId());
@ -1120,48 +1124,63 @@ public class H5OrderService {
String appId = WechatPayData.miniProgramAppId;
//TODO
String payAmount = order.getPayAmount().multiply(new BigDecimal(100)).stripTrailingZeros().toPlainString();
int payAmount = order.getPayAmount().multiply(new BigDecimal(100)).intValueExact();
// String payAmount = order.getPayAmount().multiply(new BigDecimal(100)).stripTrailingZeros().toPlainString();
if (payMangeDev){
payAmount = "1";//支付一分钱
payAmount = 1;//支付一分钱
}
String prepayId = wechatPayService.jsapiPay(
String.valueOf(order.getPayId()),
Object order1 = mpWxPayService.createOrder(
orderDesc,
Integer.valueOf(payAmount),
"127.0.0.1",
String.valueOf(order.getPayId()),
payAmount,
String.valueOf(order.getPayId()),
openId,
member.getId(),
appId
"{}",
WechatPayData.notifyUrl,
String.valueOf(member.getId())
);
// String prepayId = "TODO";
log.info("【支付】jsapiPay支付成功,预付单ID:" + prepayId);
OrderPayResponse response = new OrderPayResponse();
response.setPayType(2);
String nonceStr = WechatPayUtil.generateNonceStr();
long timeStamp = WechatPayUtil.getCurrentTimestamp();
prepayId = "prepay_id=" + prepayId;
String signType = "RSA";
String paySign = null;
String signatureStr = Stream.of(appId, String.valueOf(timeStamp), nonceStr, prepayId)
.collect(Collectors.joining("\n", "", "\n"));
//TODO
// paySign = "TODO";
try {
paySign = WechatPayUtil.getSign(signatureStr, WechatPayData.privateKeyPath);
} catch (Exception e) {
log.error("获取签名失败,");
throw new RuntimeException("支付失败");
}
response.setAppId(appId);
response.setTimeStamp(String.valueOf(timeStamp));
response.setNonceStr(nonceStr);
response.setSignType(signType);
response.setPackage_(prepayId);
response.setPaySign(paySign);
response.setOrderId(order.getId());
return response;
return order1;
// String prepayId = wechatPayService.jsapiPay(
// String.valueOf(order.getPayId()),
// orderDesc,
// Integer.valueOf(payAmount),
// openId,
// member.getId(),
// appId
// );
//// String prepayId = "TODO";
//
// log.info("【支付】jsapiPay支付成功,预付单ID:" + prepayId);
// OrderPayResponse response = new OrderPayResponse();
// response.setPayType(2);
// String nonceStr = WechatPayUtil.generateNonceStr();
// long timeStamp = WechatPayUtil.getCurrentTimestamp();
// prepayId = "prepay_id=" + prepayId;
// String signType = "RSA";
// String paySign = null;
// String signatureStr = Stream.of(appId, String.valueOf(timeStamp), nonceStr, prepayId)
// .collect(Collectors.joining("\n", "", "\n"));
// //TODO
//// paySign = "TODO";
// try {
// paySign = WechatPayUtil.getSign(signatureStr, WechatPayData.privateKeyPath);
// } catch (Exception e) {
// log.error("获取签名失败,");
// throw new RuntimeException("支付失败");
// }
// response.setAppId(appId);
// response.setTimeStamp(String.valueOf(timeStamp));
// response.setNonceStr(nonceStr);
// response.setSignType(signType);
// response.setPackage_(prepayId);
// response.setPaySign(paySign);
// response.setOrderId(order.getId());
// return response;
}


+ 28
- 6
ruoyi-mall/src/main/java/com/cyl/wechat/pay/MpWxPayService.java View File

@ -1,20 +1,29 @@
package com.cyl.wechat.pay;
import com.cyl.h5.pojo.response.OrderPayResponse;
import com.cyl.wechat.pay.config.WxPay;
import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult;
import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
import com.github.binarywang.wxpay.constant.WxPayConstants;
import com.github.binarywang.wxpay.exception.WxPayException;
import com.github.binarywang.wxpay.service.WxPayService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.io.File;
import java.util.Map;
@Slf4j
@Component
public class MpWxPayService {
public boolean dev = true;
@Autowired
public WxPay wxPay;
@Autowired
public WxPayService wxPayService;
@ -85,8 +94,8 @@ public class MpWxPayService {
* @return
*/
public Object createOrder(String productName, String clientIp,
String productId, Integer price, String orderNo,
String openId, String body){
String productId, Integer price, String orderNo,
String openId, String body, String notifyOneUrl, String attach){
WxPayUnifiedOrderRequest request = new WxPayUnifiedOrderRequest();
request.setDeviceInfo("WEB"); //设备号
request.setTradeType("JSAPI"); //交易类型
@ -95,19 +104,30 @@ public class MpWxPayService {
request.setDetail(productName); //商品详情
request.setTotalFee(price); //总金额|分计
request.setSpbillCreateIp(clientIp); //终端IP
request.setNotifyUrl(wxPay.notifyOneUrl);//设置回调路径
request.setNotifyUrl(notifyOneUrl);//设置回调路径
request.setProductId(productId); //商品id
request.setOpenid(openId); //JSAPI OPENID
request.setAttach(attach);
if (dev){
request.setTotalFee(price);
request.setNotifyUrl(wxPay.notifyUrlOneDev);
request.setNotifyUrl(notifyOneUrl);
}
try {
Object order = wxPayService.createOrder(request);
Object order = wxPayService.<Map>createOrder(request);
// OrderPayResponse response = new OrderPayResponse();
// response.setPackage_(order.get("packageValue"));
// response.setPayType(2);
// response.setTimeStamp(order.get("timeStamp"));
// response.setPaySign(order.get("paySign"));
// response.setNonceStr(order.get("nonceStr"));
// response.setAppId(order.get("appId"));
// response.setSignType(order.get("signType"));
return order;
} catch (WxPayException e) {
e.printStackTrace();
return e.getLocalizedMessage();
throw new RuntimeException(e.getMessage());
}
}
@ -115,9 +135,11 @@ public class MpWxPayService {
public WxPayOrderNotifyResult notify(String requestBody){
WxPayOrderNotifyResult notify = null;
try {
log.info("微信回调参数:{}", requestBody);
notify = wxPayService.parseOrderNotifyResult(requestBody);
} catch (WxPayException e) {
e.printStackTrace();
throw new RuntimeException(e.getMessage());
}
return notify;
}


Loading…
Cancel
Save