同步平台业务模块能力
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
package com.xspaceagi.pay.spec.dto;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 通用项目支付 - App 原生第一步:创建订单请求。
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class GeneralProjectAppOrderCreateRequest {
|
||||
|
||||
/** 项目 ID(必传),前端从 DEV_PROJECT_ID 环境变量获取 */
|
||||
private String projectId;
|
||||
|
||||
/** 业务订单号,可空;传了用 GP1_ 前缀(幂等),不传用 GP2_ 前缀自动生成 */
|
||||
private String bizOrderNo;
|
||||
|
||||
/** 订单金额(单位:分) */
|
||||
private Long orderAmount;
|
||||
|
||||
/** 订单标题/商品描述 */
|
||||
private String subject;
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package com.xspaceagi.pay.spec.dto;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 通用项目支付 - App 原生第一步:创建订单响应。
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class GeneralProjectAppOrderCreateResponse {
|
||||
|
||||
private String orderNo;
|
||||
|
||||
private String gatewayOrderNo;
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package com.xspaceagi.pay.spec.dto;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 通用项目支付 - App 原生第二步:调起渠道支付请求。
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class GeneralProjectAppPayRequest {
|
||||
|
||||
/** 业务订单号(第一步返回的 orderNo) */
|
||||
private String orderNo;
|
||||
|
||||
/** 支付渠道:WxPay / AliPay */
|
||||
private String payChannel;
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
package com.xspaceagi.pay.spec.dto;
|
||||
|
||||
import com.xspaceagi.pay.sdk.dto.WxPayInvokeParams;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 通用项目支付 - App 原生第二步:调起渠道支付响应。
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class GeneralProjectAppPayResponse {
|
||||
|
||||
private String orderNo;
|
||||
|
||||
private String gatewayOrderNo;
|
||||
|
||||
/** WxPay | AliPay */
|
||||
private String payChannel;
|
||||
|
||||
/** 微信:其他渠道 prepay JSON(当前安心付渠道为 null);支付宝:不使用 */
|
||||
private WxPayInvokeParams wxPayParams;
|
||||
|
||||
/**
|
||||
* 微信:weixin://dl/business/...
|
||||
* 支付宝:https://qr.alipay.com/... 或 alipays://
|
||||
*/
|
||||
private String redirectUrl;
|
||||
|
||||
/** 支付宝 tradeNO(部分 SDK 使用) */
|
||||
private String alipayTradeNo;
|
||||
|
||||
/** REDIRECT_URL | QRCODE_FALLBACK */
|
||||
private String invokeType;
|
||||
|
||||
/** 支付宝 invokeType=QRCODE_FALLBACK 时的二维码内容 */
|
||||
private String qrCodeContent;
|
||||
|
||||
private String status;
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
package com.xspaceagi.pay.spec.dto;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 通用项目支付 - 收银台模式请求。
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class GeneralProjectCashierRequest {
|
||||
|
||||
/** 项目 ID(必传),前端从 DEV_PROJECT_ID 环境变量获取 */
|
||||
private String projectId;
|
||||
|
||||
/** 业务订单号,可空;传了用 GP1_ 前缀(幂等),不传用 GP2_ 前缀自动生成 */
|
||||
private String bizOrderNo;
|
||||
|
||||
/** 订单金额(单位:分) */
|
||||
private Long orderAmount;
|
||||
|
||||
/** 订单标题/商品描述 */
|
||||
private String subject;
|
||||
|
||||
/** 支付完成后前端回跳地址,可空 */
|
||||
private String frontNotifyUrl;
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.xspaceagi.pay.spec.dto;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 通用项目支付 - 收银台模式响应。
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class GeneralProjectCashierResponse {
|
||||
|
||||
/** 业务订单号(GP1_ 或 GP2_ 前缀) */
|
||||
private String orderNo;
|
||||
|
||||
/** 网关支付订单号 */
|
||||
private String gatewayOrderNo;
|
||||
|
||||
/** 收银台跳转地址(浏览器直接跳转) */
|
||||
private String cashierUrl;
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package com.xspaceagi.pay.spec.dto;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 通用项目支付 - H5 第一步:创建订单请求。
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class GeneralProjectH5OrderCreateRequest {
|
||||
|
||||
/** 项目 ID(必传),前端从 DEV_PROJECT_ID 环境变量获取 */
|
||||
private String projectId;
|
||||
|
||||
/** 业务订单号,可空;传了用 GP1_ 前缀(幂等),不传用 GP2_ 前缀自动生成 */
|
||||
private String bizOrderNo;
|
||||
|
||||
/** 订单金额(单位:分) */
|
||||
private Long orderAmount;
|
||||
|
||||
/** 订单标题/商品描述 */
|
||||
private String subject;
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package com.xspaceagi.pay.spec.dto;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 通用项目支付 - H5 第一步:创建订单响应。
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class GeneralProjectH5OrderCreateResponse {
|
||||
|
||||
/** 业务订单号(GP1_ 或 GP2_ 前缀) */
|
||||
private String orderNo;
|
||||
|
||||
/** 网关支付订单号 */
|
||||
private String gatewayOrderNo;
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.xspaceagi.pay.spec.dto;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 通用项目支付 - H5 第二步:调起渠道支付请求。
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class GeneralProjectH5PayRequest {
|
||||
|
||||
/** 业务订单号(第一步返回的 orderNo) */
|
||||
private String orderNo;
|
||||
|
||||
/** 支付渠道:WxPay / AliPay */
|
||||
private String payChannel;
|
||||
|
||||
/** 支付完成后前端回跳地址 */
|
||||
private String frontNotifyUrl;
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package com.xspaceagi.pay.spec.dto;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 通用项目支付 - H5 第二步:调起渠道支付响应。
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class GeneralProjectH5PayResponse {
|
||||
|
||||
/** 业务订单号 */
|
||||
private String orderNo;
|
||||
|
||||
/** 网关支付订单号 */
|
||||
private String gatewayOrderNo;
|
||||
|
||||
/** 表单 HTML(invokeType=FORM_HTML 时,直接写入页面) */
|
||||
private String formHtml;
|
||||
|
||||
/** 跳转地址(invokeType=REDIRECT_URL 时,浏览器跳转) */
|
||||
private String redirectUrl;
|
||||
|
||||
/** 调起方式:FORM_HTML / REDIRECT_URL / QRCODE_FALLBACK */
|
||||
private String invokeType;
|
||||
|
||||
/** 当前支付单状态 */
|
||||
private String status;
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package com.xspaceagi.pay.spec.dto;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 通用项目支付 - 查询支付状态请求。
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class GeneralProjectPaymentStatusRequest {
|
||||
|
||||
/** 网关支付订单号 */
|
||||
private String gatewayOrderNo;
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
package com.xspaceagi.pay.spec.dto;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 通用项目支付 - 查询支付状态响应。
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class GeneralProjectPaymentStatusResponse {
|
||||
|
||||
/** 支付状态:INIT / PENDING / PAID / FAILED / CLOSED */
|
||||
private String status;
|
||||
|
||||
/** 支付渠道:WxPay / AliPay / UnionPay */
|
||||
private String payChannel;
|
||||
|
||||
/** 支付模式:scan / h5 / minipay */
|
||||
private String payMode;
|
||||
|
||||
/** 订单金额(单位:分) */
|
||||
private Long orderAmount;
|
||||
|
||||
/** 支付完成时间 */
|
||||
private String paidAt;
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package com.xspaceagi.pay.spec.support;
|
||||
|
||||
import com.xspaceagi.pay.sdk.support.PayAppWebViewDetector;
|
||||
import com.xspaceagi.system.spec.enums.ErrorCodeEnum;
|
||||
import com.xspaceagi.system.spec.exception.BizException;
|
||||
import com.xspaceagi.system.spec.exception.BizExceptionCodeEnum;
|
||||
|
||||
/**
|
||||
* App 原生支付仅允许在 App WebView 内调起;系统/手机浏览器应使用 H5 接口。
|
||||
*/
|
||||
public final class PayAppNativeInAppGuard {
|
||||
|
||||
private PayAppNativeInAppGuard() {}
|
||||
|
||||
public static void assertAppNativePayRequired(String clientTypeHeader, String userAgent) {
|
||||
if (!PayAppWebViewDetector.isAppWebView(clientTypeHeader, userAgent)) {
|
||||
throw BizException.of(ErrorCodeEnum.INVALID_PARAM, BizExceptionCodeEnum.pay_app_native_requires_app);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package com.xspaceagi.pay.spec.support;
|
||||
|
||||
import com.xspaceagi.pay.sdk.support.PayAppWebViewDetector;
|
||||
import com.xspaceagi.system.spec.enums.ErrorCodeEnum;
|
||||
import com.xspaceagi.system.spec.exception.BizException;
|
||||
import com.xspaceagi.system.spec.exception.BizExceptionCodeEnum;
|
||||
|
||||
/**
|
||||
* App WebView 内禁止调起 H5 支付(渠道违规);应使用 App 原生 SDK 接口。
|
||||
*/
|
||||
public final class PayH5InAppGuard {
|
||||
|
||||
private PayH5InAppGuard() {}
|
||||
|
||||
public static void assertH5PayAllowed(String clientTypeHeader, String userAgent) {
|
||||
if (PayAppWebViewDetector.isAppWebView(clientTypeHeader, userAgent)) {
|
||||
throw BizException.of(ErrorCodeEnum.INVALID_PARAM, BizExceptionCodeEnum.pay_h5_not_allowed_in_app);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user