oying-common/src/main/java/com/oying/utils/SecurityUtils.java
@@ -75,6 +75,18 @@ } /** * 获取当前用户openid * * @return / */ public static String getCurrentOpenid() { UserDetails userDetails = getCurrentUser(); // 将 Java 对象转换为 JSONObject 对象 JSONObject jsonObject = (JSONObject) JSON.toJSON(userDetails); return jsonObject.getJSONObject("user").getString("openid"); } /** * 获取用户ID * @return 系统用户ID */ oying-common/src/main/java/com/oying/utils/enums/OrderStatusEnum.java
New file @@ -0,0 +1,43 @@ package com.oying.utils.enums; import lombok.AllArgsConstructor; import lombok.Getter; @Getter @AllArgsConstructor public enum OrderStatusEnum { ZERO(0, "订单已提交"), ONE(1, "支付成功"), TWO(2, "商家已接单"), THREE(3, "骑手已接单"), FOUR(4, "商家已接单"), FIVE(5, "商家已备货"), SIX(6, "骑手已到店"), SEVEN(7, "骑手已取货"), EIGHT(8, "商品已送达"), NINE(9, "订单已完成"), UNKNOWN(99, "未知枚举"); private final Integer key; private final String value; public static OrderStatusEnum find(Integer val) { for (OrderStatusEnum value : OrderStatusEnum.values()) { if (val.equals(value.getKey())) { return value; } } return UNKNOWN; } public static String getValue(Integer val) { for (OrderStatusEnum value : OrderStatusEnum.values()) { if (val.equals(value.getKey())) { return value.getValue(); } } return UNKNOWN.getValue(); } } oying-common/src/main/java/com/oying/utils/enums/StatusEnum.java
File was deleted oying-system/src/main/java/com/oying/modules/hwc/service/SwiftPassService.java
@@ -24,7 +24,7 @@ * @see [类、类#方法、类#成员] */ HwcResponse pay(String ip, String total, String timeExpire, String description, String openId, String orderNum, PayTypeEnum status) throws IOException; String orderNum, PayTypeEnum status); /** * <一句话功能简述> oying-system/src/main/java/com/oying/modules/hwc/service/impl/SwiftPassServiceImpl.java
@@ -11,6 +11,7 @@ import com.oying.modules.security.config.WeiXinProperties; import com.oying.modules.sh.service.OrderReturnService; import com.oying.modules.sh.service.OrderService; import com.oying.utils.CloseUtil; import com.oying.utils.enums.PayTypeEnum; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -54,7 +55,7 @@ @Override @Transactional(rollbackFor = Exception.class) public HwcResponse pay(String ip, String total, String timeExpire, String description, String openId, String orderNum, PayTypeEnum status) throws IOException { String orderNum, PayTypeEnum status) { SortedMap<String, String> map = new TreeMap<>(); map.put("service", service_pay); map.put("version", version); @@ -117,15 +118,15 @@ throw new BadRequestException("操作失败"); } } catch (Exception e) { log.error("请求参数:{}", params); log.error("返回参数:{}", resultMap); throw new BadRequestException("系统异常:" + e.getMessage()); log.error("汇旺财下单错误请求参数:{}", params); log.error("汇旺财下单错误返回参数:{}", resultMap); throw new BadRequestException("汇旺财下单错误:" + e.getMessage()); } finally { if (response != null) { response.close(); CloseUtil.close(response); } if (client != null) { client.close(); CloseUtil.close(client); } } } oying-system/src/main/java/com/oying/modules/sh/domain/Order.java
@@ -91,7 +91,7 @@ private String payTime; @NotBlank @ApiModelProperty(value = "订单失效时间RFC3339") @ApiModelProperty(value = "订单失效时间") private String expireTime; @NotBlank oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderServiceImpl.java
@@ -2,10 +2,13 @@ import com.alibaba.fastjson2.JSONObject; import com.oying.exception.BadRequestException; import com.oying.modules.hwc.domain.HwcResponse; import com.oying.modules.hwc.service.SwiftPassService; import com.oying.modules.pc.product.domain.Product; import com.oying.modules.pc.product.domain.enums.ProductStatusEnum; import com.oying.modules.pc.product.service.ProductService; import com.oying.modules.pc.store.domain.Store; import com.oying.modules.pc.store.service.StoreService; import com.oying.modules.sh.domain.Order; import com.oying.modules.sh.domain.OrderProductSnapshot; import com.oying.modules.sh.domain.request.GeneratorOrder; @@ -17,6 +20,7 @@ import com.oying.modules.sh.service.UserAddressService; import com.oying.utils.*; import com.oying.utils.enums.GenerateEnum; import com.oying.utils.enums.OrderStatusEnum; import com.oying.utils.enums.PayStateEnum; import com.oying.utils.enums.PayTypeEnum; import lombok.RequiredArgsConstructor; @@ -50,6 +54,8 @@ private final SwiftPassService swiftPassService; private final OrderProductSnapshotService productSnapshotService; private final RedisUtils redisUtils; private final StoreService storeService; private final static String DESCRIBE = "哦应:"; @Override public PageResult<Order> queryAll(OrderQueryCriteria criteria, Page<Object> page) { @@ -98,12 +104,55 @@ snapshot.setPayState(PayStateEnum.NOTPAY.getKey()); snapshots.add(snapshot); } Timestamp now = DateUtil.getTimeStamp(); // 下单后30分钟失效 Timestamp time = DateUtil.addMinute(DateUtil.getTimeStamp(), 30); Timestamp time = DateUtil.addMinute(now, 30); String expire = DateUtil.localDateTimeFormat(time.toLocalDateTime(), DateUtil.SDF_YMDHMS); swiftPassService.pay(StringUtils.getIp(request), BigDecimalUtils.yuanToCents(amount).toString(), expire,SecurityUtils.getCurrentUserId()); String openid = SecurityUtils.getCurrentOpenid(); if (openid == null || openid.isEmpty()) { throw new BadRequestException("OPENID错误"); } // 订单信息 Order order = new Order(); order.setOrderNum(orderNum); order.setOrderStatus(OrderStatusEnum.ZERO.getKey()); order.setOrderStatusDescribe(OrderStatusEnum.ZERO.getValue()); order.setUserId(SecurityUtils.getCurrentUserId()); order.setUsername(SecurityUtils.getCurrentUsername()); Store store = storeService.getMerchantStore(submit.getStoreId()); order.setStoreId(submit.getStoreId()); order.setStoreName(store.getStoreName()); order.setStoreLogo(store.getLogoImageUrl()); order.setOrderDescribe(DESCRIBE + submit.getStoreId()); order.setOriginalPrice(amount); order.setPaidPrice(amount); order.setActuallyPayPrice(amount); order.setOpenid(openid); order.setPayType(submit.getPayType().getKey()); order.setExpireTime(expire); order.setOpenid(openid); Long total = BigDecimalUtils.yuanToCents(amount); if (total > 0) { HwcResponse response = swiftPassService.pay(StringUtils.getIp(request), total.toString(), expire, DESCRIBE + submit.getStoreId(), openid, orderNum, submit.getPayType()); //微信支付下单放回值 order.setAppId(response.getAppId()); order.setTimestamp(response.getTimeStamp()); order.setNonceStr(response.getNonceStr()); order.setPackageVal(response.getPackageVal()); order.setSignType(response.getSignType()); order.setPaySign(response.getPaySign()); order.setPayState(PayStateEnum.NOTPAY.getKey()); order.setPayMessage(PayStateEnum.NOTPAY.getValue()); order.setPayTime(null); } else { order.setPayState(PayStateEnum.SUCCESS.getKey()); order.setPayMessage(PayStateEnum.SUCCESS.getValue()); order.setPayTime(DateUtil.localDateTimeFormat(now.toLocalDateTime(), DateUtil.SDF_YMDHMS)); } orderMapper.insert(order); productSnapshotService.saveBatch(snapshots); return null; return order; } @Override oying-system/src/main/resources/config/application-dev.yml
@@ -167,9 +167,9 @@ # 请求url req-url: https://pay.hstypay.com/v2/pay/gateway # 支付通知地址 notify-url: http://1.95.124.88:8088/api/swiftPass/alipayCallback notify-url: http://1.95.124.88:8088/oying/api/swiftPass/alipayCallback # 退款通知地址 refund-url: https://1.95.124.88:8088/api/swiftPass/returnNotify refund-url: https://1.95.124.88:8088/oying/api/swiftPass/returnNotify obs: access_key_id: RZ1UIOZDZ58DD4NWPD6Q oying-system/src/main/resources/config/application-prod.yml
@@ -93,6 +93,8 @@ online-key: "online_token:" # 验证码 code-key: "captcha_code:" # 自定义redis key generate-order-sn: oying:generate:sn # token 续期检查时间范围(默认30分钟,单位默认毫秒),在token即将过期的一段时间内用户操作了,则给用户的token续期 detect: 1800000 # 续期时间范围,默认 1小时,这里单位毫秒 @@ -127,6 +129,7 @@ # 文件大小 /M maxSize: 100 avatarMaxSize: 5 # 短信验证码key 时间 sms: key: oying-sms-key- @@ -158,28 +161,26 @@ # 汇旺财 swift-pass: # 密钥1 key: qqqqqqqqqqqqqqqqqqqq # 密钥 key: vJB6683s4NtQtXBgHTvE1hWOUtcre7nj # 私钥 mch-private-key: qqqqqqqqqqqq mch-private-key: MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC2YNuGqSAFcIVOc9mnmIbnVfQoyyMBoyGqTD3beiy/UsXZrGF4OIrPEevwXnwHktURupjHAKvt92PL4L9wTz7cknaQkF0NH5saOdY3sL88xH7F3qSgIwHPvkRileFeEHx+pKnXBms8yiliDqPk0MV3iRRoXKhRnojrWAYJhyz+1iJ13qWXCWcpr9hf77Uu/r1N7wsJKN4Z75M2qQC6LgRTaHoBroLGVtld4PM30ee6o9RR8yiFVx4FDVukinGR15nTsrNh+sUx3piVXqYrq23UPjUWVtJlf9cEvfNVXCMsa71LGEzUl0zxDfeyXRQhel3E27p2oovEYvhl5s+pZhtXAgMBAAECggEBAKXZLKinccwgh8lRBrQmuz7x5ieWms3pWDryPCozTy/pCKyq2rQlzu0BIiqi8W09tG773eTSEodDOkhzqANsvQB+XD2YWlYN0NEnmUtpem67TYGItvI9A2+0WaHBJIGSwnO0MBKu7qQIP1vBbn8s7vWF/b3tzM70ORSzJkJR37QY435+ZG9rKMKyL/tuGW7E5AgrHmyl2aK9me3vgUrZct2e9l5XLrn9oU1niEmbDbFARhphXDCEPIvFiu7WtFDBmp/jEOc4u/y/sYMjS1RWpO9iOyTZDO8Mi9iofXugmoot4Tn0lBckeR6YVRb/I3EcVADoMfk1iaN1aWv1u+Ska8ECgYEA3ZFYMvo5y7SztrEbyLpWGsp6aM4a5ght8p52/rFhSHD5CGS7Uywhp4LxxIjLTRBNa/UkBzOq1Xt1+PVDNHf0E1yYZqEv9OXWC0yiCsnwO6b7o9hc3VnnX4jw7FkS0+pjfgCK4/A9hFj9xUI+qX3L3+pOCseioUeYofqTc2bn7ncCgYEA0rhvvNO30EisLACdOIem8XgbL4LjKJ47FnYS/TEZ9cDhJW5G2pAxgyFsqhN/GuTVg8uSQ7a6PlcBxzTuOwdZg05RcCAdmsXUdGjVbKk2i4CBp0K1j4QYfr8Wt18x0RLfzIQDrZQajWssVGjo8sfMn8qmjbRNbMmokRTflGIkEiECgYEAxChaYn9fzbYEaRixlWtKsdtSthjKfZ8239ZlWSVnEEBcaY7svTzT6r6mFq5Y9rgZIxvbsriOZQQxtKBGyFvubXnLvwizMWiNsGE/ELgphFZYcH0r8hgXHGBbk5NkdNMNFE+cpyJZBCPZP9tfKKUjavC/+RE3LPv66GS0SDXx3g8CgYAYOIT3cmqFcWUA5c0si0MgLEsLqgLMT2vBSC8klTlDqzj14XgZdUuLpBLmdbk9cSIttP+J8v3zXnLg3++mL1EVq7HmrnpYqPajrs0hYU3YuRuuCxfteCSMpRBKYZHLU10QF/iIQibPLIt65FgqV9boYxXD4f6oS4Gps3mDh8hXoQKBgBKojPBWgp4/WBMfh8nUzFzTiW7ACyG2jAxGtu0dtqfwx2LkesUKGhD1JGlxdDQ6jSv9tbhAgbZjTAULSo03626ZaiSDF+nCwFsobd3wRiij8LiL9amW5t6XBeX6bS5SCh45GbgnNBtzBqUI19/CGH09YXNpCYnADsY4fab4wNpR # 公钥 plat-public-key: qqqqq # 门店编号1 mch-id: 1111 plat-public-key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmDbhqkgBXCFTnPZp5iG51X0KMsjAaMhqkw923osv1LF2axheDiKzxHr8F58B5LVEbqYxwCr7fdjy+C/cE8+3JJ2kJBdDR+bGjnWN7C/PMR+xd6koCMBz75EYpXhXhB8fqSp1wZrPMopYg6j5NDFd4kUaFyoUZ6I61gGCYcs/tYidd6llwlnKa/YX++1Lv69Te8LCSjeGe+TNqkAui4EU2h6Aa6CxlbZXeDzN9HnuqPUUfMohVceBQ1bpIpxkdeZ07KzYfrFMd6YlV6mK6tt1D41FlbSZX/XBL3zVVwjLGu9SxhM1JdM8Q33sl0UIXpdxNu6dqKLxGL4ZebPqWYbVwIDAQAB # 门店编号 mch-id: 1030238092 # 签名方式 sign-type: MD5 # 原生JS is-raw: 1 # 是否小程序支付 is-minipg: 1 # AppID app-id: wx2273296a5569cbad # 请求url req-url: https://pay.hstypay.com/v2/pay/gateway # 支付通知地址 notify-url: https://localhost/oying/api/swiftPass/alipayCallback notify-url: http://1.95.124.88:8088/oying/api/swiftPass/alipayCallback # 退款通知地址 refund-url: https://localhost/oying/api/swiftPass/returnNotify refund-url: https://1.95.124.88:8088/oying/api/swiftPass/returnNotify obs: access_key_id: RZ1UIOZDZ58DD4NWPD6Q