AdapayTest.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. package com.izouma.nineth.service;
  2. import com.alibaba.excel.EasyExcel;
  3. import com.alibaba.excel.annotation.ExcelProperty;
  4. import com.alibaba.fastjson.JSON;
  5. import com.alibaba.fastjson.JSONArray;
  6. import com.alibaba.fastjson.serializer.SerializerFeature;
  7. import com.huifu.adapay.Adapay;
  8. import com.huifu.adapay.core.exception.BaseAdaPayException;
  9. import com.huifu.adapay.model.*;
  10. import com.izouma.nineth.utils.SnowflakeIdWorker;
  11. import com.izouma.nineth.utils.excel.BigIntegerConverter;
  12. import com.izouma.nineth.utils.excel.LocalDateConverter;
  13. import com.izouma.nineth.utils.excel.LocalDateTimeConverter;
  14. import lombok.Data;
  15. import org.apache.commons.collections.MapUtils;
  16. import org.apache.commons.lang3.StringUtils;
  17. import org.junit.jupiter.api.Test;
  18. import java.math.BigDecimal;
  19. import java.time.LocalDateTime;
  20. import java.time.ZoneId;
  21. import java.util.ArrayList;
  22. import java.util.HashMap;
  23. import java.util.List;
  24. import java.util.Map;
  25. public class AdapayTest {
  26. private final String appId = "app_0e8d3acb-3d95-4ebb-8445-e470c378a787";
  27. public AdapayTest() {
  28. Adapay.debug = false;
  29. Adapay.prodMode = true;
  30. MerConfig merConfig = new MerConfig();
  31. merConfig.setApiKey("api_live_dc298e47-c0be-4acf-a962-a2c2988e4cae");
  32. merConfig.setApiMockKey("api_test_26e9eee7-6695-4169-90a1-203c6d2cf196");
  33. merConfig.setRSAPrivateKey("MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCLeSEu8CXg4iwpRtAapIGpbuoJdyAh3E2FgIqOJSME/0+DscuIUVzfQzMWgXT98Zd8aKQLmjTWHx6Tg60DCFJzJBkISZYaqF9Oc+YdPe15TINpp5syKDk72WeUEW/jlXiLwKyeFxzCvedbpbdAUi0cP64US/LslGohHGWUrgj/WBR33vgwA2NAHR+ziGp8IhFUXHoWtXdBjwGsWuZ6Wt9mWOVeGIHP6OyUYzhkVuDyFMZ6wlA60PqxPAQrvZG3VP2mSlpWTs7xQHM9nk8Rn2pQDUmexHmKS/wn4XZvl3S9KRs6/l8wDqlBW5QhmEZNRwiOG8n/FpqxUMIhFFj4SSq1AgMBAAECggEAVwmWXbZbzQUXzgJ058t1ZwjiYFnI4ZibgA6BaMdgHUQ+mM6hV0Z/EIzdGtRa8AaOJIMgrGTlSCJPcHshwty0p0oFnRhe5e/g2hKVrfXxdlr7PznrLdfQL7syWkKvcnTar0vj7Rw7RIRCFv1JaIhfwlszBVOIG39a46LW+XvJ/Z5Lk5wB8tkt0xWDUghAU1xP10P8OHcr/x3aFhiyAvmWWr7syYKD1rDAtC+n+6Imb8MvTxwk4Gz1wpM+a7gHeYk2n91yR94G6A2wMSeM80T4hCbYKutD5rkdi5i3hoeIiPiq5qbR0rmI/dudVbGkVT+xkh1z1IsKeYiD2ef4Ddy2QQKBgQDIqOuaml9bnJpKie9Z0ysiPWxc771byxhgx7bwsoJey4x5bcLx+G9IAvkGwWFUl+25jgpeVn/LZ6147e9ozeip7WSKvStniND+CB7SvA5ZDRm7CfqFQub//9Q1DWNfl+ThGAXHMlKgS7DanLqvpUsRdhUOceZwwrdkV93v7by8nQKBgQCx8EdYbxNIEnVI3Y98YCAWtvgBCCa8yurL+9IXe9VKCFGdGRZ4b61GWDNyjUAfiboXY4ByzvX4cdlZ1euVmqMYsEv28xXEFdGxSDpa+oeETbv1U2GEGL4Ups3z28Sx4TGGSyvReyQOhZftIF6vCZtZ8dZMEf8IdxyudJkcJp+u+QKBgBFtemkHF1khlNT8felTSd/DbfH0cIHUdd2R+vWUy3XoP98cBV52sVOTzoUjroxmVaNUDtp6sMa9znc+UxjLKXX4xE64d1iarWwi0GqFIsnhNWblSvjgAqghVBD3hLX8v0g9ieLvH/YEHOwfyKcQuCBgHRwQEG+iucLhTslT4JyRAoGAHa25CKwGKEhD3bJuw0z5LTC5btqgM28Y+Ir5AMe7zIxUqIJNuCrQWOJPOnUK0/fR3SLQgtW4OwcqPIysrZhMScrl8Luczsbg4dPtP813mv6oMgQFSNYjpigoQ9tNFGo+K2sQVPFYEz//FiMHB+TvT3JBzxBVXGEZnJOAEizzB2kCgYEAxUFRiJMcmp5IyGcFlmGP219OcEfzt8BV8s3yoPHPpgYX/zPsH9764UMSZb+FRXFLd8HC+UqqppQ4cq2RmMu5X7H/DWoj9FqXgusjOmZUyWiJgTPC4ktFesuhJhCHuk/50/nXmc6O8rWLwXqXf1XNaoNfzDmZNQ20jRZGr8eVc4g=");
  34. merConfig.setRSAPublicKey("MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAi3khLvAl4OIsKUbQGqSBqW7qCXcgIdxNhYCKjiUjBP9Pg7HLiFFc30MzFoF0/fGXfGikC5o01h8ek4OtAwhScyQZCEmWGqhfTnPmHT3teUyDaaebMig5O9lnlBFv45V4i8Csnhccwr3nW6W3QFItHD+uFEvy7JRqIRxllK4I/1gUd974MANjQB0fs4hqfCIRVFx6FrV3QY8BrFrmelrfZljlXhiBz+jslGM4ZFbg8hTGesJQOtD6sTwEK72Rt1T9pkpaVk7O8UBzPZ5PEZ9qUA1JnsR5ikv8J+F2b5d0vSkbOv5fMA6pQVuUIZhGTUcIjhvJ/xaasVDCIRRY+EkqtQIDAQAB");
  35. Adapay.publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCwN6xgd6Ad8v2hIIsQVnbt8a3JituR8o4Tc3B5WlcFR55bz4OMqrG/356Ur3cPbc2Fe8ArNd/0gZbC9q56Eb16JTkVNA/fye4SXznWxdyBPR7+guuJZHc/VW2fKH2lfZ2P3Tt0QkKZZoawYOGSMdIvO+WqK44updyax0ikK6JlNQIDAQAB";
  36. try {
  37. Adapay.initWithMerConfig(merConfig);
  38. } catch (Exception e) {
  39. }
  40. }
  41. @Test
  42. public void testPay() throws BaseAdaPayException {
  43. Map<String, Object> paymentParams = new HashMap<String, Object>(10);
  44. List<Map<String, Object>> divMembers = new ArrayList<>();
  45. divMembers.add(new HashMap<>() {{
  46. put("member_id", "0");
  47. put("amount", BigDecimal.valueOf(0.05));
  48. put("fee_flag", "Y");
  49. }});
  50. divMembers.add(new HashMap<>() {{
  51. put("member_id", "1110");
  52. put("amount", BigDecimal.valueOf(0.05));
  53. }});
  54. paymentParams.put("app_id", appId);
  55. paymentParams.put("order_no", "jsdk_payment" + System.currentTimeMillis());
  56. paymentParams.put("pay_channel", "wx_pub");
  57. paymentParams.put("pay_amt", "0.10");
  58. paymentParams.put("goods_title", "your goods title");
  59. paymentParams.put("goods_desc", "your goods desc");
  60. paymentParams.put("notify_url", "http://9th.frp.izouma.com/notify/adapay/order/1");
  61. paymentParams.put("description", "orderId=1");
  62. Map<String, Object> expend = new HashMap<>();
  63. expend.put("open_id", "oWJG55wLnwdVzXoKka1-DzQKOd_Y");
  64. paymentParams.put("expend", expend);
  65. Map<String, Object> payment = Payment.create(paymentParams);
  66. System.out.println("payment result=" + JSON.toJSONString(payment, SerializerFeature.PrettyFormat));
  67. }
  68. @Test
  69. public void testWxPay() throws BaseAdaPayException {
  70. Map<String, Object> params = new HashMap<String, Object>();
  71. params.put("order_no", "host_wx_lite_params_sdk_" + System.currentTimeMillis());
  72. params.put("adapay_func_code", "wxpay.createOrder");
  73. params.put("pay_amt", "0.02");
  74. params.put("app_id", appId);
  75. params.put("currency", "cny");
  76. params.put("goods_title", "Your goods_title");
  77. params.put("goods_desc", "Your goods_desc");
  78. params.put("description", "payment Discription");
  79. params.put("callback_url", "/9th/orders");
  80. Map<String, Object> response = AdapayCommon.requestAdapayUits(params);
  81. System.out.println("payment result=" + JSON.toJSONString(response, SerializerFeature.PrettyFormat));
  82. }
  83. @Data
  84. public static class RefundOrder {
  85. @ExcelProperty("交易时间")
  86. private LocalDateTime time;
  87. @ExcelProperty("订单号")
  88. private String id;
  89. @ExcelProperty("支付流水号")
  90. private String serial;
  91. @ExcelProperty("第三方订单号")
  92. private String thirdId;
  93. @ExcelProperty("支付宝/微信订单号")
  94. private String txId;
  95. @ExcelProperty("交易金额")
  96. private String amount;
  97. private String refundId;
  98. }
  99. @Test
  100. public void refund() throws BaseAdaPayException {
  101. List<RefundOrder> orders = EasyExcel.read("/Users/drew/Downloads/merTransDetail_0284905900625472_20211201_20211215_1639557451.xlsx")
  102. .head(RefundOrder.class)
  103. .registerConverter(new LocalDateConverter())
  104. .registerConverter(new LocalDateTimeConverter())
  105. .registerConverter(new BigIntegerConverter())
  106. .sheet().doReadSync();
  107. System.out.println(orders.size());
  108. for (RefundOrder order : orders) {
  109. String refundId = new SnowflakeIdWorker(0, 0).nextId() + "";
  110. Map<String, Object> refundParams = new HashMap<>();
  111. refundParams.put("refund_amt", order.getAmount());
  112. refundParams.put("refund_order_no", new SnowflakeIdWorker(0, 0).nextId() + "");
  113. Map<String, Object> response = Refund.create(order.getId(), refundParams);
  114. order.setRefundId(refundId);
  115. }
  116. EasyExcel.write("/Users/drew/Desktop/refund.xlsx", RefundOrder.class).sheet("sheet")
  117. .registerConverter(new LocalDateConverter())
  118. .registerConverter(new LocalDateTimeConverter())
  119. .registerConverter(new BigIntegerConverter())
  120. .doWrite(orders);
  121. }
  122. @Test
  123. public void queryrefund() throws BaseAdaPayException {
  124. List<RefundOrder> orders = EasyExcel.read("/Users/drew/Desktop/refund.xlsx")
  125. .head(RefundOrder.class)
  126. .registerConverter(new LocalDateConverter())
  127. .registerConverter(new LocalDateTimeConverter())
  128. .registerConverter(new BigIntegerConverter())
  129. .sheet().doReadSync();
  130. System.out.println(orders.size());
  131. List<String> success = new ArrayList<>();
  132. List<String> fail = new ArrayList<>();
  133. for (RefundOrder order : orders) {
  134. Map<String, Object> refundParams = new HashMap<>();
  135. refundParams.put("refund_order_no", order.getRefundId());
  136. Map<String, Object> refund = Refund.query(refundParams);
  137. System.out.println(refund.get("refunds"));
  138. try {
  139. if (((JSONArray) refund.get("refunds")).getJSONObject(0).getString("trans_status").equals("S")) {
  140. success.add(order.getId());
  141. } else {
  142. fail.add(order.getId());
  143. }
  144. } catch (Exception e) {
  145. fail.add(order.getId());
  146. }
  147. }
  148. System.out.println("success:" + success.size());
  149. System.out.println("fail:" + fail.size());
  150. System.out.println(StringUtils.join(fail, ","));
  151. }
  152. @Test
  153. public void queryList() throws BaseAdaPayException {
  154. LocalDateTime start = LocalDateTime.of(2022, 1, 7, 0, 0, 0);
  155. LocalDateTime end = LocalDateTime.of(2022, 1, 8, 0, 0, 0);
  156. Map<String, Object> paymentParams = new HashMap<>();
  157. int page = 0;
  158. paymentParams.put("app_id", appId);
  159. paymentParams.put("page_size", "20");
  160. paymentParams.put("created_gte", start.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli());
  161. paymentParams.put("created_lte", end.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli());
  162. boolean hasMore = true;
  163. JSONArray list = new JSONArray();
  164. while (hasMore) {
  165. paymentParams.put("page_index", ++page);
  166. Map<String, Object> paymentList = Payment.queryList(paymentParams);
  167. if (paymentList.get("payments") != null) {
  168. list.addAll((JSONArray) paymentList.get("payments"));
  169. }
  170. hasMore = MapUtils.getBooleanValue(paymentList, "has_more");
  171. }
  172. System.out.println(list);
  173. }
  174. @Test
  175. public void singleRefund() throws BaseAdaPayException {
  176. Map<String, Object> refundParams = new HashMap<>();
  177. refundParams.put("refund_amt", "1.00");
  178. refundParams.put("refund_order_no", new SnowflakeIdWorker(0, 0).nextId() + "");
  179. Map<String, Object> response = Refund.create("002112022022612572710343510022217707520", refundParams);
  180. System.out.println(JSON.toJSONString(response, SerializerFeature.PrettyFormat));
  181. }
  182. @Test
  183. public void singleRefundVerify() throws BaseAdaPayException {
  184. Map<String, Object> queryParams = new HashMap<>();
  185. queryParams.put("payment_id", "002112022030216390710345015359205462016");
  186. Map<String, Object> refund = Refund.query(queryParams);
  187. System.out.println(JSON.toJSONString(refund, SerializerFeature.PrettyFormat));
  188. }
  189. @Test
  190. public void singleQuery() throws BaseAdaPayException {
  191. Map<String, Object> map = Payment.query("002112022021816391410340666733272313856");
  192. System.out.println(JSON.toJSONString(map, SerializerFeature.PrettyFormat));
  193. }
  194. @Test
  195. public void querySettle() throws BaseAdaPayException {
  196. Map<String, Object> queryParams = new HashMap<>(5);
  197. queryParams.put("member_id", "736136");
  198. queryParams.put("app_id", appId);
  199. queryParams.put("begin_date", "20220201");
  200. queryParams.put("end_date", "20220302");
  201. Map<String, Object> settleCount = SettleAccount.detail(queryParams);
  202. System.out.println(JSON.toJSONString(settleCount, SerializerFeature.PrettyFormat));
  203. }
  204. }