|
@@ -3,8 +3,8 @@ package cn.iocoder.yudao.framework.pay.core.client.impl.alipay;
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
|
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
|
import cn.iocoder.yudao.framework.pay.core.client.PayCommonResult;
|
|
import cn.iocoder.yudao.framework.pay.core.client.PayCommonResult;
|
|
-import cn.iocoder.yudao.framework.pay.core.client.impl.AbstractPayClient;
|
|
|
|
import cn.iocoder.yudao.framework.pay.core.client.dto.PayOrderUnifiedReqDTO;
|
|
import cn.iocoder.yudao.framework.pay.core.client.dto.PayOrderUnifiedReqDTO;
|
|
|
|
+import cn.iocoder.yudao.framework.pay.core.client.impl.AbstractPayClient;
|
|
import com.alipay.api.AlipayApiException;
|
|
import com.alipay.api.AlipayApiException;
|
|
import com.alipay.api.AlipayConfig;
|
|
import com.alipay.api.AlipayConfig;
|
|
import com.alipay.api.DefaultAlipayClient;
|
|
import com.alipay.api.DefaultAlipayClient;
|
|
@@ -14,24 +14,27 @@ import com.alipay.api.response.AlipayTradePrecreateResponse;
|
|
import lombok.SneakyThrows;
|
|
import lombok.SneakyThrows;
|
|
|
|
|
|
/**
|
|
/**
|
|
- * 支付宝的 PayClient 实现类
|
|
|
|
|
|
+ * 支付宝【扫码支付】的 PayClient 实现类
|
|
|
|
+ * 文档:https://opendocs.alipay.com/apis/02890k
|
|
|
|
+ *
|
|
|
|
+ * @author 芋道源码
|
|
*/
|
|
*/
|
|
-public class AlipayPayClient extends AbstractPayClient {
|
|
|
|
|
|
+public class AlipayQrPayClient extends AbstractPayClient<AlipayPayConfig> {
|
|
|
|
|
|
- private final DefaultAlipayClient client;
|
|
|
|
|
|
+ private DefaultAlipayClient client;
|
|
|
|
+
|
|
|
|
+ public AlipayQrPayClient(Long channelId, String channelCode, AlipayPayConfig config) {
|
|
|
|
+ super(channelId, channelCode, config, new AlipayPayCodeMapping());
|
|
|
|
+ }
|
|
|
|
|
|
|
|
+ @Override
|
|
@SneakyThrows
|
|
@SneakyThrows
|
|
- public AlipayPayClient(AlipayPayConfig config) {
|
|
|
|
- // 创建 DefaultAlipayClient 对象
|
|
|
|
|
|
+ protected void doInit() {
|
|
AlipayConfig alipayConfig = new AlipayConfig();
|
|
AlipayConfig alipayConfig = new AlipayConfig();
|
|
BeanUtil.copyProperties(config, alipayConfig, false);
|
|
BeanUtil.copyProperties(config, alipayConfig, false);
|
|
this.client = new DefaultAlipayClient(alipayConfig);
|
|
this.client = new DefaultAlipayClient(alipayConfig);
|
|
-
|
|
|
|
- // 创建 AlipayPayCodeMapping 对象
|
|
|
|
- super.codeMapping = new AlipayPayCodeMapping();
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- // TODO 芋艿:暂时是扫码支付,需要调整成 wap https://opendocs.alipay.com/apis/api_1/alipay.trade.wap.pay
|
|
|
|
@Override
|
|
@Override
|
|
public CommonResult<Object> unifiedOrder(PayOrderUnifiedReqDTO reqDTO) {
|
|
public CommonResult<Object> unifiedOrder(PayOrderUnifiedReqDTO reqDTO) {
|
|
// 构建 AlipayTradePrecreateModel 请求
|
|
// 构建 AlipayTradePrecreateModel 请求
|
|
@@ -46,7 +49,7 @@ public class AlipayPayClient extends AbstractPayClient {
|
|
request.setBizModel(model);
|
|
request.setBizModel(model);
|
|
|
|
|
|
// 执行请求
|
|
// 执行请求
|
|
- AlipayTradePrecreateResponse response = null;
|
|
|
|
|
|
+ AlipayTradePrecreateResponse response;
|
|
try {
|
|
try {
|
|
response = client.execute(request);
|
|
response = client.execute(request);
|
|
} catch (AlipayApiException e) {
|
|
} catch (AlipayApiException e) {
|
|
@@ -67,7 +70,8 @@ public class AlipayPayClient extends AbstractPayClient {
|
|
config.setSignType(AlipayPayConfig.SIGN_TYPE_DEFAULT);
|
|
config.setSignType(AlipayPayConfig.SIGN_TYPE_DEFAULT);
|
|
config.setPrivateKey("MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCHsEV1cDupwJv890x84qbppUtRIfhaKSwSVN0thCcsDCaAsGR5MZslDkO8NCT9V4r2SVXjyY7eJUZlZd1M0C8T01Tg4UOx5LUbic0O3A1uJMy6V1n9IyYwbAW3AEZhBd5bSbPgrqvmv3NeWSTQT6Anxnllf+2iDH6zyA2fPl7cYyQtbZoDJQFGqr4F+cGh2R6akzRKNoBkAeMYwoY6es2lX8sJxCVPWUmxNUoL3tScwlSpd7Bxw0q9c/X01jMwuQ0+Va358zgFiGERTE6yD01eu40OBDXOYO3z++y+TAYHlQQ2toMO63trepo88X3xV3R44/1DH+k2pAm2IF5ixiLrAgMBAAECggEAPx3SoXcseaD7rmcGcE0p4SMfbsUDdkUSmBBbtfF0GzwnqNLkWa+mgE0rWt9SmXngTQH97vByAYmLPl1s3G82ht1V7Sk7yQMe74lhFllr8eEyTjeVx3dTK1EEM4TwN+936DTXdFsr4TELJEcJJdD0KaxcCcfBLRDs2wnitEFZ9N+GoZybVmY8w0e0MI7PLObUZ2l0X4RurQnfG9ZxjXjC7PkeMVv7cGGylpNFi3BbvkRhdhLPDC2E6wqnr9e7zk+hiENivAezXrtxtwKovzCtnWJ1r0IO14Rh47H509Ic0wFnj+o5YyUL4LdmpL7yaaH6fM7zcSLFjNZPHvZCKPwYcQKBgQDQFho98QvnL8ex4v6cry4VitGpjSXm1qP3vmMQk4rTsn8iPWtcxPjqGEqOQJjdi4Mi0VZKQOLFwlH0kl95wNrD/isJ4O1yeYfX7YAXApzHqYNINzM79HemO3Yx1qLMW3okRFJ9pPRzbQ9qkTpsaegsmyX316zOBhzGRYjKbutTYwKBgQCm7phr9XdFW5Vh+XR90mVs483nrLmMiDKg7YKxSLJ8amiDjzPejCn7i95Hah08P+2MIZLIPbh2VLacczR6ltRRzN5bg5etFuqSgfkuHyxpoDmpjbe08+Q2h8JBYqcC5Nhv1AKU4iOUhVLHo/FBAQliMcGc/J3eiYTFC7EsNx382QKBgClb20doe7cttgFTXswBvaUmfFm45kmla924B7SpvrQpDD/f+VDtDZRp05fGmxuduSjYdtA3aVtpLiTwWu22OUUvZZqHDGruYOO4Hvdz23mL5b4ayqImCwoNU4bAZIc9v18p/UNf3/55NNE3oGcf/bev9rH2OjCQ4nM+Ktwhg8CFAoGACSgvbkShzUkv0ZcIf9ppu+ZnJh1AdGgINvGwaJ8vQ0nm/8h8NOoFZ4oNoGc+wU5Ubops7dUM6FjPR5e+OjdJ4E7Xp7d5O4J1TaIZlCEbo5OpdhaTDDcQvrkFu+Z4eN0qzj+YAKjDAOOrXc4tbr5q0FsgXscwtcNfaBuzFVTUrUkCgYEAwzPnMNhWG3zOWLUs2QFA2GP4Y+J8cpUYfj6pbKKzeLwyG9qBwF1NJpN8m+q9q7V9P2LY+9Lp9e1mGsGeqt5HMEA3P6vIpcqLJLqE/4PBLLRzfccTcmqb1m71+erxTRhHBRkGS+I7dZEb3olQfnS1Y1tpMBxiwYwR3LW4oXuJwj8=");
|
|
config.setPrivateKey("MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCHsEV1cDupwJv890x84qbppUtRIfhaKSwSVN0thCcsDCaAsGR5MZslDkO8NCT9V4r2SVXjyY7eJUZlZd1M0C8T01Tg4UOx5LUbic0O3A1uJMy6V1n9IyYwbAW3AEZhBd5bSbPgrqvmv3NeWSTQT6Anxnllf+2iDH6zyA2fPl7cYyQtbZoDJQFGqr4F+cGh2R6akzRKNoBkAeMYwoY6es2lX8sJxCVPWUmxNUoL3tScwlSpd7Bxw0q9c/X01jMwuQ0+Va358zgFiGERTE6yD01eu40OBDXOYO3z++y+TAYHlQQ2toMO63trepo88X3xV3R44/1DH+k2pAm2IF5ixiLrAgMBAAECggEAPx3SoXcseaD7rmcGcE0p4SMfbsUDdkUSmBBbtfF0GzwnqNLkWa+mgE0rWt9SmXngTQH97vByAYmLPl1s3G82ht1V7Sk7yQMe74lhFllr8eEyTjeVx3dTK1EEM4TwN+936DTXdFsr4TELJEcJJdD0KaxcCcfBLRDs2wnitEFZ9N+GoZybVmY8w0e0MI7PLObUZ2l0X4RurQnfG9ZxjXjC7PkeMVv7cGGylpNFi3BbvkRhdhLPDC2E6wqnr9e7zk+hiENivAezXrtxtwKovzCtnWJ1r0IO14Rh47H509Ic0wFnj+o5YyUL4LdmpL7yaaH6fM7zcSLFjNZPHvZCKPwYcQKBgQDQFho98QvnL8ex4v6cry4VitGpjSXm1qP3vmMQk4rTsn8iPWtcxPjqGEqOQJjdi4Mi0VZKQOLFwlH0kl95wNrD/isJ4O1yeYfX7YAXApzHqYNINzM79HemO3Yx1qLMW3okRFJ9pPRzbQ9qkTpsaegsmyX316zOBhzGRYjKbutTYwKBgQCm7phr9XdFW5Vh+XR90mVs483nrLmMiDKg7YKxSLJ8amiDjzPejCn7i95Hah08P+2MIZLIPbh2VLacczR6ltRRzN5bg5etFuqSgfkuHyxpoDmpjbe08+Q2h8JBYqcC5Nhv1AKU4iOUhVLHo/FBAQliMcGc/J3eiYTFC7EsNx382QKBgClb20doe7cttgFTXswBvaUmfFm45kmla924B7SpvrQpDD/f+VDtDZRp05fGmxuduSjYdtA3aVtpLiTwWu22OUUvZZqHDGruYOO4Hvdz23mL5b4ayqImCwoNU4bAZIc9v18p/UNf3/55NNE3oGcf/bev9rH2OjCQ4nM+Ktwhg8CFAoGACSgvbkShzUkv0ZcIf9ppu+ZnJh1AdGgINvGwaJ8vQ0nm/8h8NOoFZ4oNoGc+wU5Ubops7dUM6FjPR5e+OjdJ4E7Xp7d5O4J1TaIZlCEbo5OpdhaTDDcQvrkFu+Z4eN0qzj+YAKjDAOOrXc4tbr5q0FsgXscwtcNfaBuzFVTUrUkCgYEAwzPnMNhWG3zOWLUs2QFA2GP4Y+J8cpUYfj6pbKKzeLwyG9qBwF1NJpN8m+q9q7V9P2LY+9Lp9e1mGsGeqt5HMEA3P6vIpcqLJLqE/4PBLLRzfccTcmqb1m71+erxTRhHBRkGS+I7dZEb3olQfnS1Y1tpMBxiwYwR3LW4oXuJwj8=");
|
|
config.setAlipayPublicKey("MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnq90KnF4dTnlzzmxpujbI05OYqi5WxAS6cL0gnZFv2gK51HExF8v/BaP7P979PhFMgWTqmOOI+Dtno5s+yD09XTY1WkshbLk6i4g2Xlr8fyW9ODnkU88RI2w9UdPhQU4cPPwBNlrsYhKkVK2OxwM3kFqjoBBY0CZoZCsSQ3LDH5WeZqPArlsS6xa2zqJBuuoKjMrdpELl3eXSjP8K54eDJCbeetCZNKWLL3DPahTPB7LZikfYmslb0QUvCgGapD0xkS7eVq70NaL1G57MWABs4tbfWgxike4Daj3EfUrzIVspQxj7w8HEj9WozJPgL88kSJSits0pqD3n5r8HSuseQIDAQAB");
|
|
config.setAlipayPublicKey("MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnq90KnF4dTnlzzmxpujbI05OYqi5WxAS6cL0gnZFv2gK51HExF8v/BaP7P979PhFMgWTqmOOI+Dtno5s+yD09XTY1WkshbLk6i4g2Xlr8fyW9ODnkU88RI2w9UdPhQU4cPPwBNlrsYhKkVK2OxwM3kFqjoBBY0CZoZCsSQ3LDH5WeZqPArlsS6xa2zqJBuuoKjMrdpELl3eXSjP8K54eDJCbeetCZNKWLL3DPahTPB7LZikfYmslb0QUvCgGapD0xkS7eVq70NaL1G57MWABs4tbfWgxike4Daj3EfUrzIVspQxj7w8HEj9WozJPgL88kSJSits0pqD3n5r8HSuseQIDAQAB");
|
|
- AlipayPayClient client = new AlipayPayClient(config);
|
|
|
|
|
|
+ AlipayQrPayClient client = new AlipayQrPayClient(1L, "biu", config);
|
|
|
|
+ client.init();
|
|
|
|
|
|
PayOrderUnifiedReqDTO reqDTO = new PayOrderUnifiedReqDTO();
|
|
PayOrderUnifiedReqDTO reqDTO = new PayOrderUnifiedReqDTO();
|
|
reqDTO.setAmount(123);
|
|
reqDTO.setAmount(123);
|
|
@@ -75,5 +79,4 @@ public class AlipayPayClient extends AbstractPayClient {
|
|
reqDTO.setMerchantOrderId(String.valueOf(System.currentTimeMillis()));
|
|
reqDTO.setMerchantOrderId(String.valueOf(System.currentTimeMillis()));
|
|
client.unifiedOrder(reqDTO);
|
|
client.unifiedOrder(reqDTO);
|
|
}
|
|
}
|
|
-
|
|
|
|
}
|
|
}
|