xiongzhu 4 years ago
parent
commit
3dd96b70e5

+ 6 - 0
src/main/java/com/izouma/nineth/repo/AssetRepo.java

@@ -48,4 +48,10 @@ public interface AssetRepo extends JpaRepository<Asset, Long>, JpaSpecificationE
 
     @Query("select id from Asset where status = ?1")
     List<Long> findAllByStatus(AssetStatus status);
+
+    @Query(nativeQuery = true, value = "select asset.* from asset " +
+            "join collection_info on asset.collection_id = collection_info.id " +
+            "where asset.number > collection_info.total and status = 'NORMAL'")
+    List<Asset> findOverNumber();
+
 }

+ 4 - 0
src/main/java/com/izouma/nineth/repo/CollectionRepo.java

@@ -126,4 +126,8 @@ public interface CollectionRepo extends JpaRepository<Collection, Long>, JpaSpec
     @Transactional
     @Modifying
     int updateSale(Long id, int sale);
+
+    @Transactional
+    @Modifying
+    int deleteByAssetId(Long assetId);
 }

+ 12 - 1
src/main/java/com/izouma/nineth/service/AdapayService.java

@@ -34,7 +34,15 @@ public class AdapayService {
         memberParams.put("cert_id", idNo);
         Map<String, Object> member = AdapayCommon.requestAdapay(memberParams);
         log.info("createMember\n{}", JSON.toJSONString(member, SerializerFeature.PrettyFormat));
-        checkSuccess(member);
+        try {
+            checkSuccess(member);
+        } catch (BusinessException e) {
+            if ("member_id_exists".equals(e.getMessage())) {
+                return id.toString();
+            } else {
+                throw e;
+            }
+        }
         return MapUtils.getString(member, "member_id");
     }
 
@@ -81,6 +89,9 @@ public class AdapayService {
 
     public static void checkSuccess(Map<String, Object> map) {
         if (!"succeeded".equals(MapUtils.getString(map, "status"))) {
+            if ("member_id_exists".equals(MapUtils.getString(map, "error_code"))) {
+                throw new BusinessException("member_id_exists");
+            }
             String errMsg = MapUtils.getString(map, "error_msg");
             String errCode = MapUtils.getString(map, "error_code");
             throw new BusinessException(errMsg + "(" + errCode + ")");

+ 3 - 0
src/main/java/com/izouma/nineth/service/OrderService.java

@@ -602,6 +602,9 @@ public class OrderService {
 
     @Scheduled(fixedRate = 30000)
     public void batchCancel() {
+        if (Arrays.asList(env.getActiveProfiles()).contains("dev")) {
+            return;
+        }
         List<Order> orders = orderRepo.findByStatusAndCreatedAtBeforeAndDelFalse(OrderStatus.NOT_PAID,
                 LocalDateTime.now().minusSeconds(210));
         orders.forEach(o -> {

+ 14 - 3
src/main/resources/application.yaml

@@ -204,12 +204,23 @@ alipay:
 #  app-public-key: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCwN6xgd6Ad8v2hIIsQVnbt8a3JituR8o4Tc3B5WlcFR55bz4OMqrG/356Ur3cPbc2Fe8ArNd/0gZbC9q56Eb16JTkVNA/fye4SXznWxdyBPR7+guuJZHc/VW2fKH2lfZ2P3Tt0QkKZZoawYOGSMdIvO+WqK44updyax0ikK6JlNQIDAQAB
 #  wx-app-id:
 #  notify-url: https://nfttest.9space.vip/notify/adapay
+#adapay:
+#  app-id: app_843a743d-744e-4d73-bd60-3ebbee15d383
+#  debug: true
+#  prod: true
+#  api-key: api_live_c9db942a-b6d6-4cf7-b1b1-ec1e2873a7e7
+#  mock-key: api_test_129dbafc-080a-4a36-94b6-68f3ed2ed217
+#  public-key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApyGiKxT+ffKnH/7Nxal8TE461QHr539cOQgDHSanERb9Fr3SxJjUccagGEi5f4kPAMlOMqlcJMGKr5/2hDQYNIkOYeam6MW/E+sZq2S3LZPe04iLglMG3e0OTQRyV8x5WinNadSgb0wiQzMPPrdCYd7AZAb7u5dCj5YhEB7TywQ5Cr8tzQUA+gTMuO5D3q7I0lB+dxwbzaXI3D2RqVF/05i90jZEvfEZKHmxcbqKyuVHWs2Decb2q433GM4koSI1N1iGSW+dgxlMWFk5OrySmayYcOwIViBEKR+6icb5pfwfETEOILh3bad6I8cJBw7WXT1Pa2PIuhB8G2uKjmIKGwIDAQAB
+#  priv-key: MIIEuwIBADANBgkqhkiG9w0BAQEFAASCBKUwggShAgEAAoIBAQCnIaIrFP598qcf/s3FqXxMTjrVAevnf1w5CAMdJqcRFv0WvdLEmNRxxqAYSLl/iQ8AyU4yqVwkwYqvn/aENBg0iQ5h5qboxb8T6xmrZLctk97TiIuCUwbd7Q5NBHJXzHlaKc1p1KBvTCJDMw8+t0Jh3sBkBvu7l0KPliEQHtPLBDkKvy3NBQD6BMy47kPersjSUH53HBvNpcjcPZGpUX/TmL3SNkS98RkoebFxuorK5UdazYN5xvarjfcYziShIjU3WIZJb52DGUxYWTk6vJKZrJhw7AhWIEQpH7qJxvml/B8RMQ4guHdtp3ojxwkHDtZdPU9rY8i6EHwba4qOYgobAgMBAAECggEAT36L5/oAYl+8ZleIAHBxEspS6WYUkvPdJbNN59uus04/60U2rxQSWFulYmeU87h5TmJxs18i2MjF8msfkhpFORfHo4FV+nm0PQEiIIezKRagcfUMhlx/c6eBmdh3mpNDVUN01NWxyb5ovZXXtnjsNikBUZKQwdVcb3d1GnnPO0xtt6/0xwiduCkA2ihS1tgnsYYDhMHgukIdZ3eczn3stRPQ+QyCt1JWS6DDd1nS3S2RyPZw8P9Z1zzJFVKH8z3bGqk3/98Lw7Hw+rKFnKhIA6/H9ZVORKw5OuGC3Ozy6cVbmUn8tuw3sC0NdR7w56dedB+fjJB8od0nahX1Cc6eQQKBgQDckcenslWqjs2PbncwW1wqlw7FdJX9rzJAg7kp9ItpHCoNi/kSgXeLphHXWJmyj7a1BkWynmTGxO48X3dPXUrDPFKJc42fSbxMgAQdtc/A2z+v7Ga/oUpH8jajKfKmcgeRX026R7gd9W0yi0EW+C0WdFhrzNKKY4shvnYy9lc+QwKBgQDB+mHSllqLqYru0bLrtKOKJXaR3N3INxDBZKnRqba4tUKN35IVIexiEMkHmC51jtjoRyA5Y+fc/8P11i9FbuShtRVGHWeyDibKlwff5zrETveSLTpSULBKZ6MsFSm0Fo1krSUC1QTUGG5VX/wwWm9AB2UKJqG5cMDd3i3RiPeDSQKBgBs1ED+rS83iF5Eduy4H1vKZ94R7wRSty7ERjoGSXK/2fWl2Xp7dwXVEYucBUtQnzg2+XFKQHzY1jH19+SWdCF/UzQmPa2S+n6+ACwHvL1VGtjBpJLN2nccKJZsyzW+imTRhYSEdP6TSZUnay4idzFH8v/tsJHxVkw/ygnn+0PwpAn8uOHsWsrzgioWQYmc/wss1H7ghCX/PNU/IxTOxwb7IRGiXZa5pWqv4sgc0yA5J9L+6mTgUdLnK7ybCbUbWRJY18fAfxOHwi26y10oJEA/wtuBG9H/xHUjkcc1vs5s8TiNi2d73zcpYv3mK3lQ5MVNQ7nIk+Q+QIE3UkBxa0UgpAoGBAMDwg0ebzBEZsV2cr/Er2b25LsXteDJ+V67plBNrv+A1/omA9a52sWek4bY0D+Uu6zPTDaLj9BhHC2wJmThYl0eLRKyDKYQslBR3h253Gsn3If6RH9/tSyDsQ88iAEI1f6QH27bGHL9VDrsLGEFg5E7ZEzFQuJPqoUvBOoURNwa6
+#  app-public-key: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCwN6xgd6Ad8v2hIIsQVnbt8a3JituR8o4Tc3B5WlcFR55bz4OMqrG/356Ur3cPbc2Fe8ArNd/0gZbC9q56Eb16JTkVNA/fye4SXznWxdyBPR7+guuJZHc/VW2fKH2lfZ2P3Tt0QkKZZoawYOGSMdIvO+WqK44updyax0ikK6JlNQIDAQAB
+#  wx-app-id:
+#  notify-url: https://nfttest.9space.vip/notify/adapay
 adapay:
-  app-id: app_843a743d-744e-4d73-bd60-3ebbee15d383
+  app-id: app_dcf563b9-14cf-4583-a023-b41eb7a88f22
   debug: true
   prod: true
-  api-key: api_live_c9db942a-b6d6-4cf7-b1b1-ec1e2873a7e7
-  mock-key: api_test_129dbafc-080a-4a36-94b6-68f3ed2ed217
+  api-key: api_live_ed24cd9d-b188-46dd-97f7-45e1000dc72d
+  mock-key: api_test_3c41a1ae-14f6-4e9c-8123-b121ef19644e
   public-key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApyGiKxT+ffKnH/7Nxal8TE461QHr539cOQgDHSanERb9Fr3SxJjUccagGEi5f4kPAMlOMqlcJMGKr5/2hDQYNIkOYeam6MW/E+sZq2S3LZPe04iLglMG3e0OTQRyV8x5WinNadSgb0wiQzMPPrdCYd7AZAb7u5dCj5YhEB7TywQ5Cr8tzQUA+gTMuO5D3q7I0lB+dxwbzaXI3D2RqVF/05i90jZEvfEZKHmxcbqKyuVHWs2Decb2q433GM4koSI1N1iGSW+dgxlMWFk5OrySmayYcOwIViBEKR+6icb5pfwfETEOILh3bad6I8cJBw7WXT1Pa2PIuhB8G2uKjmIKGwIDAQAB
   priv-key: MIIEuwIBADANBgkqhkiG9w0BAQEFAASCBKUwggShAgEAAoIBAQCnIaIrFP598qcf/s3FqXxMTjrVAevnf1w5CAMdJqcRFv0WvdLEmNRxxqAYSLl/iQ8AyU4yqVwkwYqvn/aENBg0iQ5h5qboxb8T6xmrZLctk97TiIuCUwbd7Q5NBHJXzHlaKc1p1KBvTCJDMw8+t0Jh3sBkBvu7l0KPliEQHtPLBDkKvy3NBQD6BMy47kPersjSUH53HBvNpcjcPZGpUX/TmL3SNkS98RkoebFxuorK5UdazYN5xvarjfcYziShIjU3WIZJb52DGUxYWTk6vJKZrJhw7AhWIEQpH7qJxvml/B8RMQ4guHdtp3ojxwkHDtZdPU9rY8i6EHwba4qOYgobAgMBAAECggEAT36L5/oAYl+8ZleIAHBxEspS6WYUkvPdJbNN59uus04/60U2rxQSWFulYmeU87h5TmJxs18i2MjF8msfkhpFORfHo4FV+nm0PQEiIIezKRagcfUMhlx/c6eBmdh3mpNDVUN01NWxyb5ovZXXtnjsNikBUZKQwdVcb3d1GnnPO0xtt6/0xwiduCkA2ihS1tgnsYYDhMHgukIdZ3eczn3stRPQ+QyCt1JWS6DDd1nS3S2RyPZw8P9Z1zzJFVKH8z3bGqk3/98Lw7Hw+rKFnKhIA6/H9ZVORKw5OuGC3Ozy6cVbmUn8tuw3sC0NdR7w56dedB+fjJB8od0nahX1Cc6eQQKBgQDckcenslWqjs2PbncwW1wqlw7FdJX9rzJAg7kp9ItpHCoNi/kSgXeLphHXWJmyj7a1BkWynmTGxO48X3dPXUrDPFKJc42fSbxMgAQdtc/A2z+v7Ga/oUpH8jajKfKmcgeRX026R7gd9W0yi0EW+C0WdFhrzNKKY4shvnYy9lc+QwKBgQDB+mHSllqLqYru0bLrtKOKJXaR3N3INxDBZKnRqba4tUKN35IVIexiEMkHmC51jtjoRyA5Y+fc/8P11i9FbuShtRVGHWeyDibKlwff5zrETveSLTpSULBKZ6MsFSm0Fo1krSUC1QTUGG5VX/wwWm9AB2UKJqG5cMDd3i3RiPeDSQKBgBs1ED+rS83iF5Eduy4H1vKZ94R7wRSty7ERjoGSXK/2fWl2Xp7dwXVEYucBUtQnzg2+XFKQHzY1jH19+SWdCF/UzQmPa2S+n6+ACwHvL1VGtjBpJLN2nccKJZsyzW+imTRhYSEdP6TSZUnay4idzFH8v/tsJHxVkw/ygnn+0PwpAn8uOHsWsrzgioWQYmc/wss1H7ghCX/PNU/IxTOxwb7IRGiXZa5pWqv4sgc0yA5J9L+6mTgUdLnK7ybCbUbWRJY18fAfxOHwi26y10oJEA/wtuBG9H/xHUjkcc1vs5s8TiNi2d73zcpYv3mK3lQ5MVNQ7nIk+Q+QIE3UkBxa0UgpAoGBAMDwg0ebzBEZsV2cr/Er2b25LsXteDJ+V67plBNrv+A1/omA9a52sWek4bY0D+Uu6zPTDaLj9BhHC2wJmThYl0eLRKyDKYQslBR3h253Gsn3If6RH9/tSyDsQ88iAEI1f6QH27bGHL9VDrsLGEFg5E7ZEzFQuJPqoUvBOoURNwa6
   app-public-key: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCwN6xgd6Ad8v2hIIsQVnbt8a3JituR8o4Tc3B5WlcFR55bz4OMqrG/356Ur3cPbc2Fe8ArNd/0gZbC9q56Eb16JTkVNA/fye4SXznWxdyBPR7+guuJZHc/VW2fKH2lfZ2P3Tt0QkKZZoawYOGSMdIvO+WqK44updyax0ikK6JlNQIDAQAB

+ 134 - 0
src/test/java/com/izouma/nineth/FixOverSale.java

@@ -0,0 +1,134 @@
+package com.izouma.nineth;
+
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.serializer.SerializerFeature;
+import com.huifu.adapay.model.Refund;
+import com.izouma.nineth.domain.Asset;
+import com.izouma.nineth.domain.Order;
+import com.izouma.nineth.enums.AssetStatus;
+import com.izouma.nineth.enums.CollectionSource;
+import com.izouma.nineth.exception.BusinessException;
+import com.izouma.nineth.repo.AssetRepo;
+import com.izouma.nineth.repo.CollectionRepo;
+import com.izouma.nineth.repo.OrderRepo;
+import com.izouma.nineth.repo.TokenHistoryRepo;
+import com.izouma.nineth.utils.SnowflakeIdWorker;
+import org.apache.commons.collections.MapUtils;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.io.File;
+import java.io.IOException;
+import java.math.RoundingMode;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class FixOverSale extends ApplicationTests {
+    @Autowired
+    private OrderRepo         orderRepo;
+    @Autowired
+    private AssetRepo         assetRepo;
+    @Autowired
+    private TokenHistoryRepo  tokenHistoryRepo;
+    @Autowired
+    private SnowflakeIdWorker snowflakeIdWorker;
+    @Autowired
+    private CollectionRepo    collectionRepo;
+
+    @Test
+    public void fix() throws IOException {
+        List<Asset> assets = assetRepo.findOverNumber();
+        List<Order> successOrders = new ArrayList<>();
+        List<Asset> successAssets = new ArrayList<>();
+        List<TokenHistory> successHistory = new ArrayList<>();
+        List<Order> error = new ArrayList<>();
+        assets.parallelStream().forEach(asset -> {
+            Order order = null;
+            if (asset.getOrderId() != null) {
+                order = orderRepo.findById(asset.getOrderId()).orElse(null);
+            }
+            if (order != null && order.getSource() == CollectionSource.OFFICIAL
+                    && asset.getStatus() == AssetStatus.NORMAL) {
+                System.out.println(order.getTransactionId());
+                try {
+                    Map<String, Object> refundParams = new HashMap<>();
+                    refundParams.put("refund_amt", order.getTotalPrice()
+                            .setScale(2, RoundingMode.HALF_UP)
+                            .toPlainString());
+                    refundParams.put("refund_order_no", snowflakeIdWorker.nextId() + "");
+                    Map<String, Object> response = Refund.create(order.getTransactionId(), refundParams);
+                    System.out.println(JSON.toJSONString(response, SerializerFeature.PrettyFormat));
+                    if (StringUtils.isEmpty(MapUtils.getString(response, "id"))) {
+                        throw new BusinessException("err");
+                    }
+                    successOrders.add(order);
+                    successAssets.add(asset);
+                    successHistory.addAll(tokenHistoryRepo.findByTokenIdOrderByCreatedAtDesc(asset.getTokenId()));
+                    collectionRepo.deleteByAssetId(asset.getId());
+                    assetRepo.delete(asset);
+                    orderRepo.delete(order);
+                    tokenHistoryRepo.deleteByTokenId(asset.getTokenId());
+                } catch (Exception e) {
+                    error.add(order);
+                }
+            }
+        });
+        FileUtils.write(new File("/Users/drew/Desktop/0301Fix/success_orders.json"),
+                JSON.toJSONString(successOrders, SerializerFeature.PrettyFormat), StandardCharsets.UTF_8);
+        FileUtils.write(new File("/Users/drew/Desktop/0301Fix/success_assets.json"),
+                JSON.toJSONString(successAssets, SerializerFeature.PrettyFormat), StandardCharsets.UTF_8);
+        FileUtils.write(new File("/Users/drew/Desktop/0301Fix/success_history.json"),
+                JSON.toJSONString(successHistory, SerializerFeature.PrettyFormat), StandardCharsets.UTF_8);
+        FileUtils.write(new File("/Users/drew/Desktop/0301Fix/error.json"),
+                JSON.toJSONString(error, SerializerFeature.PrettyFormat), StandardCharsets.UTF_8);
+    }
+
+
+    @Test
+    public void verify() throws IOException {
+        List<Order> errors = new ArrayList<>();
+        JSON.parseArray(FileUtils.readFileToString(new File("/Users/drew/Desktop/0301Fix/error.json"), StandardCharsets.UTF_8), Order.class)
+                .parallelStream().forEach(order -> {
+                    try {
+                        Map<String, Object> refundParams = new HashMap<>(2);
+                        refundParams.put("payment_id", order.getTransactionId());
+                        Map<String, Object> refund = Refund.query(refundParams);
+                        JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(refund));
+                        if ("S".equals(jsonObject.getJSONArray("refunds")
+                                .getJSONObject(jsonObject.getJSONArray("refunds").size() - 1)
+                                .getString("trans_status"))) {
+
+                            Asset asset = assetRepo.findByOrderId(order.getId()).stream().findAny().orElse(null);
+                            if (asset != null) {
+                                tokenHistoryRepo.findByTokenIdOrderByCreatedAtDesc(asset.getTokenId());
+                                collectionRepo.deleteByAssetId(asset.getId());
+                                assetRepo.delete(asset);
+                                orderRepo.delete(order);
+                                tokenHistoryRepo.deleteByTokenId(asset.getTokenId());
+                            } else {
+                                errors.add(order);
+                            }
+                        }
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                        errors.add(order);
+                    }
+                });
+        FileUtils.write(new File("/Users/drew/Desktop/0301Fix/verify_error.json"),
+                JSON.toJSONString(errors, SerializerFeature.PrettyFormat), StandardCharsets.UTF_8);
+
+    }
+
+    @Test
+    public void fixOverNumber() {
+        List<Asset> assets = assetRepo.findOverNumber();
+
+    }
+}

+ 4 - 4
src/test/java/com/izouma/nineth/service/AdapayTest.java

@@ -26,14 +26,14 @@ import java.util.List;
 import java.util.Map;
 
 public class AdapayTest {
-    private final String appId = "app_f8760acc-f4d8-46f6-8f70-d80e36517075";
+    private final String appId = "app_843a743d-744e-4d73-bd60-3ebbee15d383";
 
     public AdapayTest() {
         Adapay.debug = false;
         Adapay.prodMode = true;
 
         MerConfig merConfig = new MerConfig();
-        merConfig.setApiKey("api_live_8818cac1-894b-40bc-ac77-803e02e9c260");
+        merConfig.setApiKey("api_live_c9db942a-b6d6-4cf7-b1b1-ec1e2873a7e7");
         merConfig.setApiMockKey("api_test_0b1b0eb9-30e1-4acd-8e03-10b529de1856");
         merConfig.setRSAPrivateKey("MIIEuwIBADANBgkqhkiG9w0BAQEFAASCBKUwggShAgEAAoIBAQCnIaIrFP598qcf/s3FqXxMTjrVAevnf1w5CAMdJqcRFv0WvdLEmNRxxqAYSLl/iQ8AyU4yqVwkwYqvn/aENBg0iQ5h5qboxb8T6xmrZLctk97TiIuCUwbd7Q5NBHJXzHlaKc1p1KBvTCJDMw8+t0Jh3sBkBvu7l0KPliEQHtPLBDkKvy3NBQD6BMy47kPersjSUH53HBvNpcjcPZGpUX/TmL3SNkS98RkoebFxuorK5UdazYN5xvarjfcYziShIjU3WIZJb52DGUxYWTk6vJKZrJhw7AhWIEQpH7qJxvml/B8RMQ4guHdtp3ojxwkHDtZdPU9rY8i6EHwba4qOYgobAgMBAAECggEAT36L5/oAYl+8ZleIAHBxEspS6WYUkvPdJbNN59uus04/60U2rxQSWFulYmeU87h5TmJxs18i2MjF8msfkhpFORfHo4FV+nm0PQEiIIezKRagcfUMhlx/c6eBmdh3mpNDVUN01NWxyb5ovZXXtnjsNikBUZKQwdVcb3d1GnnPO0xtt6/0xwiduCkA2ihS1tgnsYYDhMHgukIdZ3eczn3stRPQ+QyCt1JWS6DDd1nS3S2RyPZw8P9Z1zzJFVKH8z3bGqk3/98Lw7Hw+rKFnKhIA6/H9ZVORKw5OuGC3Ozy6cVbmUn8tuw3sC0NdR7w56dedB+fjJB8od0nahX1Cc6eQQKBgQDckcenslWqjs2PbncwW1wqlw7FdJX9rzJAg7kp9ItpHCoNi/kSgXeLphHXWJmyj7a1BkWynmTGxO48X3dPXUrDPFKJc42fSbxMgAQdtc/A2z+v7Ga/oUpH8jajKfKmcgeRX026R7gd9W0yi0EW+C0WdFhrzNKKY4shvnYy9lc+QwKBgQDB+mHSllqLqYru0bLrtKOKJXaR3N3INxDBZKnRqba4tUKN35IVIexiEMkHmC51jtjoRyA5Y+fc/8P11i9FbuShtRVGHWeyDibKlwff5zrETveSLTpSULBKZ6MsFSm0Fo1krSUC1QTUGG5VX/wwWm9AB2UKJqG5cMDd3i3RiPeDSQKBgBs1ED+rS83iF5Eduy4H1vKZ94R7wRSty7ERjoGSXK/2fWl2Xp7dwXVEYucBUtQnzg2+XFKQHzY1jH19+SWdCF/UzQmPa2S+n6+ACwHvL1VGtjBpJLN2nccKJZsyzW+imTRhYSEdP6TSZUnay4idzFH8v/tsJHxVkw/ygnn+0PwpAn8uOHsWsrzgioWQYmc/wss1H7ghCX/PNU/IxTOxwb7IRGiXZa5pWqv4sgc0yA5J9L+6mTgUdLnK7ybCbUbWRJY18fAfxOHwi26y10oJEA/wtuBG9H/xHUjkcc1vs5s8TiNi2d73zcpYv3mK3lQ5MVNQ7nIk+Q+QIE3UkBxa0UgpAoGBAMDwg0ebzBEZsV2cr/Er2b25LsXteDJ+V67plBNrv+A1/omA9a52sWek4bY0D+Uu6zPTDaLj9BhHC2wJmThYl0eLRKyDKYQslBR3h253Gsn3If6RH9/tSyDsQ88iAEI1f6QH27bGHL9VDrsLGEFg5E7ZEzFQuJPqoUvBOoURNwa6");
         merConfig.setRSAPublicKey("MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApyGiKxT+ffKnH/7Nxal8TE461QHr539cOQgDHSanERb9Fr3SxJjUccagGEi5f4kPAMlOMqlcJMGKr5/2hDQYNIkOYeam6MW/E+sZq2S3LZPe04iLglMG3e0OTQRyV8x5WinNadSgb0wiQzMPPrdCYd7AZAb7u5dCj5YhEB7TywQ5Cr8tzQUA+gTMuO5D3q7I0lB+dxwbzaXI3D2RqVF/05i90jZEvfEZKHmxcbqKyuVHWs2Decb2q433GM4koSI1N1iGSW+dgxlMWFk5OrySmayYcOwIViBEKR+6icb5pfwfETEOILh3bad6I8cJBw7WXT1Pa2PIuhB8G2uKjmIKGwIDAQAB");
@@ -198,9 +198,9 @@ public class AdapayTest {
     @Test
     public void singleRefund() throws BaseAdaPayException {
         Map<String, Object> refundParams = new HashMap<>();
-        refundParams.put("refund_amt", "250.00");
+        refundParams.put("refund_amt", "0.01");
         refundParams.put("refund_order_no", new SnowflakeIdWorker(0, 0).nextId() + "");
-        Map<String, Object> response = Refund.create("002112022022011030310341306906502942720", refundParams);
+        Map<String, Object> response = Refund.create("002112022030111085110344569856421703680", refundParams);
         System.out.println(JSON.toJSONString(response, SerializerFeature.PrettyFormat));
     }