|
@@ -0,0 +1,79 @@
|
|
|
+package cn.iocoder.yudao.framework.pay.core.client.impl.alipay;
|
|
|
+
|
|
|
+import cn.hutool.core.bean.BeanUtil;
|
|
|
+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.impl.AbstractPayClient;
|
|
|
+import cn.iocoder.yudao.framework.pay.core.client.dto.PayOrderUnifiedReqDTO;
|
|
|
+import com.alipay.api.AlipayApiException;
|
|
|
+import com.alipay.api.AlipayConfig;
|
|
|
+import com.alipay.api.DefaultAlipayClient;
|
|
|
+import com.alipay.api.domain.AlipayTradePrecreateModel;
|
|
|
+import com.alipay.api.request.AlipayTradePrecreateRequest;
|
|
|
+import com.alipay.api.response.AlipayTradePrecreateResponse;
|
|
|
+import lombok.SneakyThrows;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 支付宝的 PayClient 实现类
|
|
|
+ */
|
|
|
+public class AlipayPayClient extends AbstractPayClient {
|
|
|
+
|
|
|
+ private final DefaultAlipayClient client;
|
|
|
+
|
|
|
+ @SneakyThrows
|
|
|
+ public AlipayPayClient(AlipayPayConfig config) {
|
|
|
+ // 创建 DefaultAlipayClient 对象
|
|
|
+ AlipayConfig alipayConfig = new AlipayConfig();
|
|
|
+ BeanUtil.copyProperties(config, alipayConfig, false);
|
|
|
+ this.client = new DefaultAlipayClient(alipayConfig);
|
|
|
+
|
|
|
+ // 创建 AlipayPayCodeMapping 对象
|
|
|
+ super.codeMapping = new AlipayPayCodeMapping();
|
|
|
+ }
|
|
|
+
|
|
|
+ // TODO 芋艿:暂时是扫码支付,需要调整成 wap https://opendocs.alipay.com/apis/api_1/alipay.trade.wap.pay
|
|
|
+ @Override
|
|
|
+ public CommonResult<Object> unifiedOrder(PayOrderUnifiedReqDTO reqDTO) {
|
|
|
+ // 构建 AlipayTradePrecreateModel 请求
|
|
|
+ AlipayTradePrecreateModel model = new AlipayTradePrecreateModel();
|
|
|
+ model.setOutTradeNo(reqDTO.getMerchantOrderId());
|
|
|
+ model.setSubject(reqDTO.getSubject());
|
|
|
+ model.setBody(reqDTO.getBody());
|
|
|
+ model.setTotalAmount(calculateAmount(reqDTO.getAmount()).toString());
|
|
|
+ // TODO 芋艿:clientIp + expireTime
|
|
|
+ // 构建 AlipayTradePrecreateRequest
|
|
|
+ AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();
|
|
|
+ request.setBizModel(model);
|
|
|
+
|
|
|
+ // 执行请求
|
|
|
+ AlipayTradePrecreateResponse response = null;
|
|
|
+ try {
|
|
|
+ response = client.execute(request);
|
|
|
+ } catch (AlipayApiException e) {
|
|
|
+ return PayCommonResult.build(e.getErrCode(), e.getErrMsg(), null, codeMapping);
|
|
|
+ }
|
|
|
+
|
|
|
+ System.out.println(response.getBody());
|
|
|
+ System.out.println(response.getQrCode());
|
|
|
+
|
|
|
+ // TODO 芋艿:sub Code
|
|
|
+ return PayCommonResult.build(response.getCode(), response.getMsg(), response, codeMapping);
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void main(String[] args) {
|
|
|
+ AlipayPayConfig config = new AlipayPayConfig();
|
|
|
+ config.setAppId("2021000118634035");
|
|
|
+ config.setServerUrl(AlipayPayConfig.SERVER_URL_SANDBOX);
|
|
|
+ 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.setAlipayPublicKey("MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnq90KnF4dTnlzzmxpujbI05OYqi5WxAS6cL0gnZFv2gK51HExF8v/BaP7P979PhFMgWTqmOOI+Dtno5s+yD09XTY1WkshbLk6i4g2Xlr8fyW9ODnkU88RI2w9UdPhQU4cPPwBNlrsYhKkVK2OxwM3kFqjoBBY0CZoZCsSQ3LDH5WeZqPArlsS6xa2zqJBuuoKjMrdpELl3eXSjP8K54eDJCbeetCZNKWLL3DPahTPB7LZikfYmslb0QUvCgGapD0xkS7eVq70NaL1G57MWABs4tbfWgxike4Daj3EfUrzIVspQxj7w8HEj9WozJPgL88kSJSits0pqD3n5r8HSuseQIDAQAB");
|
|
|
+ AlipayPayClient client = new AlipayPayClient(config);
|
|
|
+
|
|
|
+ PayOrderUnifiedReqDTO reqDTO = new PayOrderUnifiedReqDTO();
|
|
|
+ reqDTO.setAmount(123);
|
|
|
+ reqDTO.setSubject("IPhone 13");
|
|
|
+ reqDTO.setMerchantOrderId(String.valueOf(System.currentTimeMillis()));
|
|
|
+ client.unifiedOrder(reqDTO);
|
|
|
+ }
|
|
|
+
|
|
|
+}
|