From bef00cbdfc35cbb7bdcdc99ca95aad12f4f9e9b5 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期二, 24 三月 2026 20:26:51 +0800
Subject: [PATCH] 支付
---
DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/CbyzxPayUtil.java | 361 +++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 361 insertions(+), 0 deletions(-)
diff --git a/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/CbyzxPayUtil.java b/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/CbyzxPayUtil.java
new file mode 100644
index 0000000..bc501bd
--- /dev/null
+++ b/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/CbyzxPayUtil.java
@@ -0,0 +1,361 @@
+package com.stylefeng.guns.modular.system.util;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import org.springframework.util.StringUtils;
+
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * 创博优支付工具类
+ * 目前仅实现创建支付单接口。
+ */
+public class CbyzxPayUtil {
+
+ /**
+ * 测试环境域名
+ */
+ public static final String TEST_BASE_URL = "https://test-api-pay.cbyzx.com";
+
+ /**
+ * 创建支付单接口
+ */
+ public static final String CREATE_PAY_ORDER_PATH = "/api/inner/pay/create";
+ public static final String CLOSE_PAY_ORDER_PATH = "/api/inner/pay/close";
+
+ private static final String PAYMENT_ORDER_TYPE = "PAYMENT_ORDER";
+ private static final String DEFAULT_CURRENCY = "CNY";
+ private static final String DEFAULT_PAY_CHANNEL_CODE = "ykdride-wxmini";
+ private static final String DEFAULT_TENANT = "gz.zuny.ykdride.platform";
+
+ private CbyzxPayUtil() {
+ }
+
+ /**
+ * 创建支付单
+ *
+ * @param request 请求参数
+ * @return 接口响应
+ */
+ public static JSONObject createPayOrder(CreatePayOrderRequest request) {
+ return createPayOrder(TEST_BASE_URL, request);
+ }
+
+ /**
+ * 创建支付单
+ *
+ * @param baseUrl 域名
+ * @param request 请求参数
+ * @return 接口响应
+ */
+ public static JSONObject createPayOrder(String baseUrl, CreatePayOrderRequest request) {
+ validateCreatePayOrderRequest(request);
+ return postForJson(baseUrl, CREATE_PAY_ORDER_PATH, request.toParamMap(), "create pay order");
+ }
+
+
+ /**
+ *
+ * 关闭支付单
+ * @param request
+ * @return
+ */
+ public static JSONObject closePayOrder(ClosePayOrderRequest request) {
+ return closePayOrder(TEST_BASE_URL, request);
+ }
+
+ public static JSONObject closePayOrder(String baseUrl, ClosePayOrderRequest request) {
+ validateClosePayOrderRequest(request);
+ return postForJson(baseUrl, CLOSE_PAY_ORDER_PATH, request.toParamMap(), "close pay order");
+ }
+
+ private static JSONObject postForJson(String baseUrl, String path, Map<String, Object> params, String actionName) {
+ HttpClientUtil httpClientUtil = new HttpClientUtil();
+ String responseText = httpClientUtil.pushHttpRequset(
+ "POST",
+ buildUrl(baseUrl, path),
+ params,
+ buildJsonHeader(),
+ "json"
+ );
+
+ if (!StringUtils.hasText(responseText)) {
+ throw new IllegalStateException(actionName + " failed: empty response");
+ }
+
+ try {
+ return JSON.parseObject(responseText);
+ } catch (Exception ex) {
+ JSONObject result = new JSONObject();
+ result.put("success", false);
+ result.put("rawResponse", responseText);
+ result.put("message", "response is not json");
+ return result;
+ }
+ }
+
+ private static Map<String, String> buildJsonHeader() {
+ Map<String, String> header = new LinkedHashMap<>();
+ header.put("Content-Type", "application/json;charset=UTF-8");
+ header.put("Accept", "application/json");
+ return header;
+ }
+
+ private static String buildUrl(String baseUrl, String path) {
+ String finalBaseUrl = baseUrl;
+ if (!StringUtils.hasText(finalBaseUrl)) {
+ finalBaseUrl = TEST_BASE_URL;
+ }
+ if (finalBaseUrl.endsWith("/")) {
+ finalBaseUrl = finalBaseUrl.substring(0, finalBaseUrl.length() - 1);
+ }
+ return finalBaseUrl + path;
+ }
+
+ private static void validateCreatePayOrderRequest(CreatePayOrderRequest request) {
+ if (request == null) {
+ throw new IllegalArgumentException("request must not be null");
+ }
+ if (!StringUtils.hasText(request.getTenant())) {
+ throw new IllegalArgumentException("tenant must not be blank");
+ }
+ if (!StringUtils.hasText(request.getPaymentOrderType())) {
+ throw new IllegalArgumentException("paymentOrderType must not be blank");
+ }
+ if (!StringUtils.hasText(request.getOutRequestNo())) {
+ throw new IllegalArgumentException("outRequestNo must not be blank");
+ }
+ if (request.getPaymentOrderAmount() == null) {
+ throw new IllegalArgumentException("paymentOrderAmount must not be null");
+ }
+ if (!StringUtils.hasText(request.getCurrency())) {
+ throw new IllegalArgumentException("currency must not be blank");
+ }
+ if (request.getBuyerId() == null) {
+ throw new IllegalArgumentException("buyerId must not be null");
+ }
+ if (!StringUtils.hasText(request.getOpenId())) {
+ throw new IllegalArgumentException("openId must not be blank");
+ }
+ if (!StringUtils.hasText(request.getStoreIds())) {
+ throw new IllegalArgumentException("storeIds must not be blank");
+ }
+ if (!StringUtils.hasText(request.getPayChannelCode())) {
+ throw new IllegalArgumentException("payChannelCode must not be blank");
+ }
+ if (!StringUtils.hasText(request.getPayEndTime())) {
+ throw new IllegalArgumentException("payEndTime must not be blank");
+ }
+ if (!StringUtils.hasText(request.getCallbackUrl())) {
+ throw new IllegalArgumentException("callbackUrl must not be blank");
+ }
+ }
+
+ private static void validateClosePayOrderRequest(ClosePayOrderRequest request) {
+ if (request == null) {
+ throw new IllegalArgumentException("request must not be null");
+ }
+ if (!StringUtils.hasText(request.getTenant())) {
+ throw new IllegalArgumentException("tenant must not be blank");
+ }
+ if (!StringUtils.hasText(request.getOutRequestNo())) {
+ throw new IllegalArgumentException("outRequestNo must not be blank");
+ }
+ }
+
+ /**
+ * 构造一份本地测试数据
+ */
+ public static CreatePayOrderRequest mockRequest() {
+ CreatePayOrderRequest request = new CreatePayOrderRequest();
+ request.setTenant(DEFAULT_TENANT);
+ request.setPaymentOrderType(PAYMENT_ORDER_TYPE);
+ request.setOutRequestNo("TEST" + System.currentTimeMillis());
+ request.setPaymentOrderAmount(new BigDecimal("100"));
+ request.setCurrency(DEFAULT_CURRENCY);
+ request.setBuyerId(10001L);
+ request.setOpenId("oMockOpenId123456789");
+ request.setStoreIds("[246]");
+ request.setPayChannelCode(DEFAULT_PAY_CHANNEL_CODE);
+ request.setPayEndTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(System.currentTimeMillis() + 30L * 60L * 1000L)));
+ request.setCallbackUrl("http://127.0.0.1:8080/pay/mockCallback");
+ return request;
+ }
+
+ public static ClosePayOrderRequest mockCloseRequest(String outRequestNo) {
+ ClosePayOrderRequest request = new ClosePayOrderRequest();
+ request.setTenant(DEFAULT_TENANT);
+ request.setOutRequestNo(outRequestNo);
+ return request;
+ }
+
+ public static void main(String[] args) {
+ CreatePayOrderRequest request = mockRequest();
+
+ System.out.println("request url: " + buildUrl(TEST_BASE_URL, CREATE_PAY_ORDER_PATH));
+ System.out.println("request body: " + JSON.toJSONString(request.toParamMap(), true));
+
+ try {
+ JSONObject response = createPayOrder(request);
+ System.out.println("response body: " + JSON.toJSONString(response, true));
+ } catch (Exception ex) {
+ System.err.println("request failed: " + ex.getMessage());
+ ex.printStackTrace();
+ }
+ }
+
+ /**
+ * 创建支付单请求参数
+ */
+ public static class CreatePayOrderRequest {
+
+ private String tenant;
+ private String paymentOrderType;
+ private String outRequestNo;
+ private BigDecimal paymentOrderAmount;
+ private String currency;
+ private Long buyerId;
+ private String openId;
+ private String storeIds;
+ private String payChannelCode;
+ private String payEndTime;
+ private String callbackUrl;
+
+ public Map<String, Object> toParamMap() {
+ Map<String, Object> params = new LinkedHashMap<>();
+ params.put("tenant", tenant);
+ params.put("paymentOrderType", paymentOrderType);
+ params.put("outRequestNo", outRequestNo);
+ params.put("paymentOrderAmount", paymentOrderAmount);
+ params.put("currency", currency);
+ params.put("buyerId", buyerId);
+ params.put("openId", openId);
+ params.put("storeIds", storeIds);
+ params.put("payChannelCode", payChannelCode);
+ params.put("payEndTime", payEndTime);
+ params.put("callbackUrl", callbackUrl);
+ return params;
+ }
+
+ public String getTenant() {
+ return tenant;
+ }
+
+ public void setTenant(String tenant) {
+ this.tenant = tenant;
+ }
+
+ public String getPaymentOrderType() {
+ return paymentOrderType;
+ }
+
+ public void setPaymentOrderType(String paymentOrderType) {
+ this.paymentOrderType = paymentOrderType;
+ }
+
+ public String getOutRequestNo() {
+ return outRequestNo;
+ }
+
+ public void setOutRequestNo(String outRequestNo) {
+ this.outRequestNo = outRequestNo;
+ }
+
+ public BigDecimal getPaymentOrderAmount() {
+ return paymentOrderAmount;
+ }
+
+ public void setPaymentOrderAmount(BigDecimal paymentOrderAmount) {
+ this.paymentOrderAmount = paymentOrderAmount;
+ }
+
+ public String getCurrency() {
+ return currency;
+ }
+
+ public void setCurrency(String currency) {
+ this.currency = currency;
+ }
+
+ public Long getBuyerId() {
+ return buyerId;
+ }
+
+ public void setBuyerId(Long buyerId) {
+ this.buyerId = buyerId;
+ }
+
+ public String getOpenId() {
+ return openId;
+ }
+
+ public void setOpenId(String openId) {
+ this.openId = openId;
+ }
+
+ public String getStoreIds() {
+ return storeIds;
+ }
+
+ public void setStoreIds(String storeIds) {
+ this.storeIds = storeIds;
+ }
+
+ public String getPayChannelCode() {
+ return payChannelCode;
+ }
+
+ public void setPayChannelCode(String payChannelCode) {
+ this.payChannelCode = payChannelCode;
+ }
+
+ public String getPayEndTime() {
+ return payEndTime;
+ }
+
+ public void setPayEndTime(String payEndTime) {
+ this.payEndTime = payEndTime;
+ }
+
+ public String getCallbackUrl() {
+ return callbackUrl;
+ }
+
+ public void setCallbackUrl(String callbackUrl) {
+ this.callbackUrl = callbackUrl;
+ }
+ }
+
+ public static class ClosePayOrderRequest {
+
+ private String tenant;
+ private String outRequestNo;
+
+ public Map<String, Object> toParamMap() {
+ Map<String, Object> params = new LinkedHashMap<>();
+ params.put("tenant", tenant);
+ params.put("outRequestNo", outRequestNo);
+ return params;
+ }
+
+ public String getTenant() {
+ return tenant;
+ }
+
+ public void setTenant(String tenant) {
+ this.tenant = tenant;
+ }
+
+ public String getOutRequestNo() {
+ return outRequestNo;
+ }
+
+ public void setOutRequestNo(String outRequestNo) {
+ this.outRequestNo = outRequestNo;
+ }
+ }
+}
--
Gitblit v1.7.1