diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/ali/AliMicropayDto.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/ali/AliMicropayDto.java
new file mode 100644
index 000000000..ffb329347
--- /dev/null
+++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/ali/AliMicropayDto.java
@@ -0,0 +1,42 @@
+package com.bsd.pjcloud.hard.api.dto.ali;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 付款码支付入参
+ */
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class AliMicropayDto {
+
+ /**
+ * 商户id
+ */
+ private Long merId;
+
+ /**
+ * 订单id
+ */
+ private Long orderId;
+
+ /**
+ * 订单支付金额(分)
+ */
+ private Integer price;
+
+ /**
+ * 订单标题
+ */
+ private String subject;
+
+ /**
+ * 支付授权码
+ */
+ private String authCode;
+
+}
diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/ali/AliQueryDto.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/ali/AliQueryDto.java
new file mode 100644
index 000000000..89ce8e49a
--- /dev/null
+++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/ali/AliQueryDto.java
@@ -0,0 +1,24 @@
+package com.bsd.pjcloud.hard.api.dto.ali;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class AliQueryDto {
+
+ /**
+ * 订单id
+ */
+ private String orderId;
+
+ /**
+ * 阿里订单id
+ */
+ private String aliOrderId;
+
+}
diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/ali/AliRefundDto.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/ali/AliRefundDto.java
new file mode 100644
index 000000000..5b1e35497
--- /dev/null
+++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/ali/AliRefundDto.java
@@ -0,0 +1,37 @@
+package com.bsd.pjcloud.hard.api.dto.ali;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 支付宝退款入参
+ */
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class AliRefundDto {
+
+ /**
+ * 退款金额(分)
+ */
+ private Integer refundPrice;
+
+ /**
+ * 订单id
+ */
+ private Long orderId;
+
+ /**
+ * 支付宝订单id
+ */
+ private String aliOrderId;
+
+ /**
+ * 退款id
+ */
+ private Long refundId;
+
+}
diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/ali/AliRefundQueryDto.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/ali/AliRefundQueryDto.java
new file mode 100644
index 000000000..c3c04de84
--- /dev/null
+++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/ali/AliRefundQueryDto.java
@@ -0,0 +1,22 @@
+package com.bsd.pjcloud.hard.api.dto.ali;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 支付宝退款查询入参
+ */
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class AliRefundQueryDto {
+
+ /**
+ * 退款单号
+ */
+ private Long refundId;
+
+}
diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/ali/AliReverseDto.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/ali/AliReverseDto.java
new file mode 100644
index 000000000..ccd23a257
--- /dev/null
+++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/ali/AliReverseDto.java
@@ -0,0 +1,25 @@
+package com.bsd.pjcloud.hard.api.dto.ali;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 支付宝订单撤销入参
+ */
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class AliReverseDto {
+ /**
+ * 订单id
+ */
+ private Long orderId;
+
+ /**
+ * 阿里订单id
+ */
+ private String aliOrderId;
+}
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/pom.xml b/pjcloud-hardware/pjcloud-hardware-biz/pom.xml
index 240860ee9..e704d33a7 100644
--- a/pjcloud-hardware/pjcloud-hardware-biz/pom.xml
+++ b/pjcloud-hardware/pjcloud-hardware-biz/pom.xml
@@ -160,6 +160,11 @@
2.12.7
compile
+
+ com.alipay.sdk
+ alipay-sdk-java
+ 4.40.251.ALL
+
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/config/AlipayConf.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/config/AlipayConf.java
new file mode 100644
index 000000000..c0d7c82ed
--- /dev/null
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/config/AlipayConf.java
@@ -0,0 +1,30 @@
+package com.bsd.pjcloud.hard.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * 支付宝支付配置
+ */
+@Component
+@ConfigurationProperties(prefix = "ali-pay")
+@Data
+public class AlipayConf {
+
+ /**
+ * 应用ID
+ */
+ private String appId;
+
+ /**
+ * 私钥
+ */
+ private String privateKey;
+
+ /**
+ * 公钥
+ */
+ private String alipayPublicKey;
+
+}
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/AlipayService.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/AlipayService.java
new file mode 100644
index 000000000..1490154e5
--- /dev/null
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/AlipayService.java
@@ -0,0 +1,42 @@
+package com.bsd.pjcloud.hard.service;
+
+
+import com.alipay.api.response.*;
+import com.bsd.pjcloud.hard.api.dto.ali.*;
+import org.springframework.http.HttpEntity;
+import org.springframework.web.bind.annotation.RequestHeader;
+
+import java.util.Map;
+
+public interface AlipayService {
+
+ /**
+ * 付款码支付
+ */
+ AlipayTradePayResponse micropay(AliMicropayDto dto);
+
+ /**
+ * 查询订单
+ */
+ AlipayTradeQueryResponse query(AliQueryDto dto);
+
+ /**
+ * 撤销订单
+ */
+ AlipayTradeCancelResponse reverse(AliReverseDto dto);
+
+ /**
+ * 申请退款
+ */
+ AlipayTradeRefundResponse refund(AliRefundDto dto);
+
+ /**
+ * 查询退款
+ */
+ AlipayTradeFastpayRefundQueryResponse refundQuery(AliRefundQueryDto dto);
+
+ /**
+ * 退款回调
+ */
+ String refundCallback(HttpEntity httpEntity, @RequestHeader Map headers);
+}
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/ali/AlipayServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/ali/AlipayServiceImpl.java
new file mode 100644
index 000000000..b25b64275
--- /dev/null
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/ali/AlipayServiceImpl.java
@@ -0,0 +1,197 @@
+package com.bsd.pjcloud.hard.service.impl.ali;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.alipay.api.AlipayClient;
+import com.alipay.api.AlipayConfig;
+import com.alipay.api.DefaultAlipayClient;
+import com.alipay.api.domain.*;
+import com.alipay.api.request.*;
+import com.alipay.api.response.*;
+import com.bsd.pjcloud.hard.api.dto.ali.*;
+import com.bsd.pjcloud.hard.config.AlipayConf;
+import com.bsd.pjcloud.hard.service.AlipayService;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.HttpEntity;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.Map;
+
+/**
+ * 支付宝支付
+ */
+@Service
+@AllArgsConstructor
+@Slf4j
+public class AlipayServiceImpl implements AlipayService {
+
+ private final AlipayConf conf;
+
+ static private AlipayClient client = null;
+
+ private void initClient() {
+ AlipayConfig alipayConfig = new AlipayConfig();
+ alipayConfig.setServerUrl("https://openapi.alipay.com/gateway.do");
+ alipayConfig.setAppId(conf.getAppId());
+ alipayConfig.setPrivateKey(conf.getPrivateKey());
+ alipayConfig.setFormat("json");
+ alipayConfig.setCharset("UTF-8");
+ alipayConfig.setAlipayPublicKey(conf.getAlipayPublicKey());
+ alipayConfig.setSignType("RSA2");
+ try {
+ AlipayServiceImpl.client = new DefaultAlipayClient(alipayConfig);
+ } catch (Exception e) {
+ log.error("初始化支付宝客户端异常", e);
+ }
+ }
+
+ private AlipayClient getClient() {
+ if (ObjectUtil.isEmpty(AlipayServiceImpl.client)) initClient();
+ return AlipayServiceImpl.client;
+ }
+
+ /**
+ * 付款码支付
+ */
+ public AlipayTradePayResponse micropay(AliMicropayDto dto) {
+ AlipayClient alipayClient = getClient();
+ AlipayTradePayRequest request = new AlipayTradePayRequest();
+ AlipayTradePayModel model = new AlipayTradePayModel();
+ BigDecimal payPrice = BigDecimal.valueOf(dto.getPrice()).divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP);
+ // 订单号
+ model.setOutTradeNo(String.valueOf(dto.getOrderId()));
+ // 支付金额单位元
+ model.setTotalAmount(payPrice.toString());
+ // 订单标题
+ model.setSubject(dto.getSubject());
+ // 支付授权码
+ model.setAuthCode(dto.getAuthCode());
+ // 支付场景
+ model.setScene("bar_code");
+ request.setBizModel(model);
+ try {
+ AlipayTradePayResponse response = alipayClient.execute(request);
+ String body = response.getBody();
+ log.debug("申请退款,json|{}", body);
+ return response;
+ } catch (Exception e) {
+ log.error("支付宝支付异常", e);
+ return null;
+ }
+ }
+
+ /**
+ * 查询订单
+ */
+ @Override
+ public AlipayTradeQueryResponse query(AliQueryDto dto) {
+ AlipayClient alipayClient = getClient();
+ AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();
+ AlipayTradeQueryModel model = new AlipayTradeQueryModel();
+ // 订单号
+ model.setOutTradeNo(dto.getOrderId());
+ // 支付宝订单号
+ model.setTradeNo(dto.getAliOrderId());
+ request.setBizModel(model);
+ try {
+ AlipayTradeQueryResponse response = alipayClient.execute(request);
+ String body = response.getBody();
+ log.debug("查询订单,json|{}", body);
+ return response;
+ } catch (Exception e) {
+ log.error("查询订单异常", e);
+ }
+ return null;
+ }
+
+ /**
+ * 撤销订单
+ */
+ @Override
+ public AlipayTradeCancelResponse reverse(AliReverseDto dto) {
+ AlipayClient alipayClient = getClient();
+ AlipayTradeCancelRequest request = new AlipayTradeCancelRequest();
+ AlipayTradeCancelModel model = new AlipayTradeCancelModel();
+ // 订单号
+ model.setOutTradeNo(String.valueOf(dto.getOrderId()));
+ // 支付宝订单号
+ model.setTradeNo(dto.getAliOrderId());
+ request.setBizModel(model);
+ try {
+ AlipayTradeCancelResponse response = alipayClient.execute(request);
+ String body = response.getBody();
+ log.debug("撤销订单,json|{}", body);
+ return response;
+ } catch (Exception e) {
+ log.error("撤销订单", e);
+ }
+ return null;
+ }
+
+ /**
+ * 申请退款
+ */
+ @Override
+ public AlipayTradeRefundResponse refund(AliRefundDto dto) {
+ AlipayClient alipayClient = getClient();
+ AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
+ AlipayTradeRefundModel model = new AlipayTradeRefundModel();
+ BigDecimal refundPrice = BigDecimal.valueOf(dto.getRefundPrice()).divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP);
+ // 退款金额(元)
+ model.setRefundAmount(String.valueOf(refundPrice));
+ // 订单号
+ model.setOutTradeNo(String.valueOf(dto.getOrderId()));
+ // 支付宝订单id
+ model.setTradeNo(dto.getAliOrderId());
+ // 退款单号
+ model.setOutRequestNo(String.valueOf(dto.getRefundId()));
+ request.setBizModel(model);
+ try {
+ AlipayTradeRefundResponse response = alipayClient.execute(request);
+ String body = response.getBody();
+ log.debug("申请退款,json|{}", body);
+ return response;
+ } catch (Exception e) {
+ log.error("申请退款", e);
+ }
+ return null;
+ }
+
+ /**
+ * 查询退款
+ */
+ @Override
+ public AlipayTradeFastpayRefundQueryResponse refundQuery(AliRefundQueryDto dto) {
+ AlipayClient alipayClient = getClient();
+ AlipayTradeFastpayRefundQueryRequest request = new AlipayTradeFastpayRefundQueryRequest();
+ AlipayTradeFastpayRefundQueryModel model = new AlipayTradeFastpayRefundQueryModel();
+ // 退款单号
+ model.setOutRequestNo(String.valueOf(dto.getRefundId()));
+ request.setBizModel(model);
+ try {
+ AlipayTradeFastpayRefundQueryResponse response = alipayClient.execute(request);
+ String body = response.getBody();
+ log.debug("查询退款,json|{}", body);
+ return response;
+ } catch (Exception e) {
+ log.error("查询退款", e);
+ }
+ return null;
+ }
+
+ /**
+ * 退款回调
+ */
+ @Override
+ public String refundCallback(HttpEntity httpEntity, Map headers) {
+ AlipayClient alipayClient = getClient();
+ try {
+
+ } catch (Exception e) {
+ log.error("退款回调", e);
+ }
+ return "";
+ }
+}
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java
index 9d73f71cf..a297f7cc4 100644
--- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java
@@ -4,6 +4,7 @@ import cn.hutool.core.util.ObjectUtil;
import cn.hutool.extra.spring.SpringUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
+import com.alipay.api.response.AlipayTradePayResponse;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -27,6 +28,8 @@ import com.bsd.pjcloud.hard.api.constant.HardTypeEnum;
import com.bsd.pjcloud.hard.api.constant.order.HardOrderStatusEnum;
import com.bsd.pjcloud.hard.api.constant.order.HardOrderTypeEnum;
import com.bsd.pjcloud.hard.api.constant.order.HardPayTypeEnum;
+import com.bsd.pjcloud.hard.api.dto.ali.AliMicropayDto;
+import com.bsd.pjcloud.hard.api.dto.ali.AliReverseDto;
import com.bsd.pjcloud.hard.api.dto.manager.HardManagerDto;
import com.bsd.pjcloud.hard.api.dto.hard.HandCancelCodeDto;
import com.bsd.pjcloud.hard.api.dto.hard.HardCreateOrderDto;
@@ -36,7 +39,6 @@ import com.bsd.pjcloud.hard.api.dto.order.app.HardAppCreateOrderDto;
import com.bsd.pjcloud.hard.api.dto.spu.DeductionSpuStockDto;
import com.bsd.pjcloud.hard.api.dto.wechat.WechantReverseDto;
import com.bsd.pjcloud.hard.api.dto.wechat.WechatMicropayDto;
-import com.bsd.pjcloud.hard.api.dto.wechat.WechatRefundDto;
import com.bsd.pjcloud.hard.api.entity.HardApptEntity;
import com.bsd.pjcloud.hard.api.entity.manager.HardManagerEntity;
import com.bsd.pjcloud.hard.api.entity.order.HardCarEntity;
@@ -48,9 +50,7 @@ import com.bsd.pjcloud.hard.api.vo.HardDoorFlowVo;
import com.bsd.pjcloud.hard.api.vo.manager.HardManagerVo;
import com.bsd.pjcloud.hard.api.vo.order.HardCarVo;
import com.bsd.pjcloud.hard.api.vo.order.HardOrderVo;
-import com.bsd.pjcloud.hard.api.vo.wechat.WechantReverseVo;
import com.bsd.pjcloud.hard.api.vo.wechat.WechatMicropayVo;
-import com.bsd.pjcloud.hard.api.vo.wechat.WechatRefundVo;
import com.bsd.pjcloud.hard.mapper.manager.HardManagerMapper;
import com.bsd.pjcloud.hard.mapper.order.HardOrderMapper;
import com.bsd.pjcloud.hard.service.*;
@@ -112,6 +112,7 @@ public class HardOrderServiceImpl extends ServiceImpl