|
@@ -0,0 +1,85 @@
|
|
|
+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.dto.PayOrderUnifiedReqDTO;
|
|
|
+import cn.iocoder.yudao.framework.pay.core.client.impl.AbstractPayClient;
|
|
|
+import com.alipay.api.AlipayApiException;
|
|
|
+import com.alipay.api.AlipayConfig;
|
|
|
+import com.alipay.api.DefaultAlipayClient;
|
|
|
+import com.alipay.api.domain.AlipayTradeWapPayModel;
|
|
|
+import com.alipay.api.request.AlipayTradeWapPayRequest;
|
|
|
+import com.alipay.api.response.AlipayTradeWapPayResponse;
|
|
|
+import lombok.SneakyThrows;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 支付宝【手机网站】的 PayClient 实现类
|
|
|
+ * 文档:https://opendocs.alipay.com/apis/api_1/alipay.trade.wap.pay
|
|
|
+ *
|
|
|
+ * @author 芋道源码
|
|
|
+ */
|
|
|
+public class AlipayWapPayClient extends AbstractPayClient<AlipayPayConfig> {
|
|
|
+
|
|
|
+ private DefaultAlipayClient client;
|
|
|
+
|
|
|
+ public AlipayWapPayClient(Long channelId, String channelCode, AlipayPayConfig config) {
|
|
|
+ super(channelId, channelCode, config, new AlipayPayCodeMapping());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @SneakyThrows
|
|
|
+ protected void doInit() {
|
|
|
+ AlipayConfig alipayConfig = new AlipayConfig();
|
|
|
+ BeanUtil.copyProperties(config, alipayConfig, false);
|
|
|
+ this.client = new DefaultAlipayClient(alipayConfig);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public CommonResult<Object> unifiedOrder(PayOrderUnifiedReqDTO reqDTO) {
|
|
|
+ // 构建 AlipayTradeWapPayModel 请求
|
|
|
+ AlipayTradeWapPayModel model = new AlipayTradeWapPayModel();
|
|
|
+ model.setOutTradeNo(reqDTO.getMerchantOrderId());
|
|
|
+ model.setSubject(reqDTO.getSubject());
|
|
|
+ model.setBody(reqDTO.getBody());
|
|
|
+ model.setTotalAmount(calculateAmount(reqDTO.getAmount()).toString());
|
|
|
+ model.setProductCode("QUICK_WAP_PAY"); // TODO 芋艿:这里咋整
|
|
|
+ model.setSellerId("2088102147948060"); // TODO 芋艿:这里咋整
|
|
|
+ // TODO 芋艿:clientIp + expireTime
|
|
|
+ // 构建 AlipayTradeWapPayRequest
|
|
|
+ AlipayTradeWapPayRequest request = new AlipayTradeWapPayRequest();
|
|
|
+ request.setBizModel(model);
|
|
|
+
|
|
|
+ // 执行请求
|
|
|
+ AlipayTradeWapPayResponse response;
|
|
|
+ try {
|
|
|
+ response = client.pageExecute(request);
|
|
|
+ } catch (AlipayApiException e) {
|
|
|
+ return PayCommonResult.build(e.getErrCode(), e.getErrMsg(), null, codeMapping);
|
|
|
+ }
|
|
|
+
|
|
|
+ System.out.println(response.getBody());
|
|
|
+
|
|
|
+// 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");
|
|
|
+ AlipayWapPayClient client = new AlipayWapPayClient(1L, "biubiubiu", config);
|
|
|
+ client.init();
|
|
|
+
|
|
|
+ PayOrderUnifiedReqDTO reqDTO = new PayOrderUnifiedReqDTO();
|
|
|
+ reqDTO.setAmount(123);
|
|
|
+ reqDTO.setSubject("IPhone 13");
|
|
|
+ reqDTO.setMerchantOrderId(String.valueOf(System.currentTimeMillis()));
|
|
|
+ client.unifiedOrder(reqDTO);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+}
|