import type { PaymentPageSchema, PaymentSchemaAction, PaymentSchemaItem, PaymentSchemaRow } from './schema'; /** 当前 SDK 支持的支付路线。 */ export declare enum PaymentRoute { /** EFTPOS 刷卡机支付路线。 */ Eftpos = "eftpos", /** WalletPass 钱包卡券支付路线。 */ WalletPass = "walletpass" } /** eftpos 路线第一期支持的 provider。 */ export declare enum EftposProvider { /** Payo 刷卡机。 */ Payo = "payo", /** WindCave 刷卡机。 */ Windcave = "windcave", /** Mx51 刷卡机。 */ Mx51 = "mx51", /** Linkly 刷卡机。 */ Linkly = "linkly", /** Tyro 客户端 SDK。 */ Tyro = "tyro" } /** 非 EFTPOS 的 payment provider。 */ export declare enum PaymentProvider { /** WalletPass provider 固定值。 */ WalletPass = "walletpass" } /** 支付 session 支持的交易模式。 */ export declare enum PaymentMode { /** 支付。 */ Pay = "pay", /** 退款。 */ Refund = "refund" } /** EFTPOS 支付页使用场景。 */ export declare enum PaymentUsageScene { /** 用户端。 */ User = "user", /** 商家端。 */ Merchant = "merchant" } /** 支付执行页按钮支持的标准 action。 */ export declare enum PaymentSchemaActionType { /** 取消当前交易。 */ Cancel = "cancel", /** 签名确认。 */ SignatureAccept = "signature.accept", /** 签名拒绝。 */ SignatureDecline = "signature.decline", /** Tyro 动态问题回答。 */ QuestionAnswer = "question.answer", /** Provider 请求重新发起一笔交易。 */ RetryTransaction = "transaction.retry", /** Provider 声明当前动态交易已经完成。 */ TransactionComplete = "transaction.complete", /** 提交 provider 动态表单或普通 submit URL。 */ ProviderSubmit = "provider.submit", /** Provider 测试动作。 */ ProviderTest = "provider.test", /** 本地手动标记入口。 */ ManualMark = "manual.mark", /** 打印商户小票。 */ PrintMerchantReceipt = "print.merchantReceipt", /** 打印客户小票。 */ PrintCustomerReceipt = "print.customerReceipt", /** 超时场景打印兜底小票。 */ PrintOnTimeout = "print.onTimeout" } /** 后端统一 payment.code 枚举。 */ export declare enum PaymentCode { /** 成功或处理中已受理。 */ Success = 200, /** EFTPOS 兜底未知错误。 */ EftposUnknown = 701000, /** 请求厂商超时。 */ RequestTimeout = 701001, /** EFTPOS 通用失败。 */ EftposFailed = 701002, /** 设备繁忙或已有交易处理中。 */ DeviceBusy = 701003, /** 用户、操作员或终端取消。 */ UserCancelled = 701004, /** 厂商拒绝或 action 不允许。 */ ProviderRejected = 701005, /** 厂商仍在处理或交易超时待查。 */ TransactionTimeout = 701006, /** 设备或网络连接中断。 */ ConnectionInterrupted = 701007, /** 银行或发卡方拒绝。 */ BankDeclined = 701008, /** 签名验证失败。 */ SignatureFailed = 701009, /** 终端输入或操作错误。 */ UserOperationError = 701010, /** 结果未知,需要继续查询或人工核对。 */ UnknownResult = 702001, /** WalletPass 未知错误。 */ WalletPassUnknown = 703000, /** WalletPass 不可用。 */ WalletPassUnavailable = 703001, /** WalletPass 余额不足。 */ WalletPassInsufficientBalance = 703002, /** 积分卡参数错误。 */ WalletPassPointCardInvalidParams = 703003, /** 幂等冲突。 */ WalletPassIdempotencyConflict = 703004, /** 不支持动作。 */ WalletPassUnsupportedAction = 703005, /** number 重复。 */ WalletPassDuplicatedNumber = 703006, /** 客户归属不匹配。 */ WalletPassCustomerMismatch = 703007, /** 加盟使用权限不足。 */ WalletPassFranchisePermissionDenied = 703008, /** 写入失败。 */ WalletPassWriteFailed = 703009 } /** 宿主注入给 PiPaymentSDK 的 app-like 对象。 */ export interface PiPaymentAppLike { /** 宿主 request client,通常来自主项目 app.request。 */ request?: unknown; /** 获取宿主 app 实例的方法。 */ getApp?: () => unknown; /** 宿主 logger。 */ logger?: unknown; /** 允许宿主保留其他插件字段。 */ [key: string]: unknown; } /** SDK 内部收敛后的宿主能力。 */ export interface PiPaymentRuntime { /** 已标准化的 request client。 */ request: PiPaymentRequestClient; /** 获取宿主 app 实例的方法。 */ getApp?: () => unknown; /** 宿主 logger。 */ logger?: PiPaymentLoggerLike; /** 原始 app-like 对象,作为日志排障上下文保留。 */ app?: PiPaymentAppLike; } /** SDK 需要的最小 request client 能力。 */ export interface PiPaymentRequestClient { /** GET 请求方法。 */ get?: (url: string, params?: unknown, config?: unknown) => Promise; /** POST 请求方法。 */ post: (url: string, params?: unknown, config?: unknown) => Promise; /** PUT 请求方法。 */ put?: (url: string, params?: unknown, config?: unknown) => Promise; } /** SDK 需要的最小 logger 能力。 */ export interface PiPaymentLoggerLike { /** 写入宿主日志。 */ addLog?: (entry: unknown) => void; /** 触发宿主日志落库。 */ storeLog?: () => Promise | unknown; } /** 创建一笔支付流程 session 的入参。 */ export interface PiPaymentCreateOptions { /** 支付路线。 */ route: PaymentRoute; /** route provider;walletpass 可显式传 walletpass。 */ provider?: EftposProvider | PaymentProvider; /** 外部销售单 / 本地销售单关联标识。 */ salesId: string; /** 默认交易金额。 */ amount?: string | number; /** 交易币种。 */ currency?: string; /** 业务透传 metadata。 */ metadata?: Record; /** 操作人信息。 */ operator?: { id?: string | number; type?: string; }; /** 宿主平台。 */ platform?: string; /** 支付页使用场景:用户端或商家端。 */ usageScene?: PaymentUsageScene | `${PaymentUsageScene}`; } /** session draft 更新入参。 */ export interface PiPaymentUpdateInput { /** eftpos 读卡器。 */ reader?: PaymentReader; /** 当前支付金额。 */ amount?: string | number; /** 当前手续费配置。 */ surcharge?: { /** 比例手续费,百分比语义。 */ rate?: string | number; /** 固定手续费。 */ fixed?: string | number; }; /** route/provider 专属参数。 */ methodOptions?: Record; /** 业务透传 metadata。 */ metadata?: Record; /** 支付页使用场景:用户端或商家端。 */ usageScene?: PaymentUsageScene | `${PaymentUsageScene}`; } /** session 当前本地 draft 快照。 */ export interface PiPaymentDraftState { /** 前端 session id。 */ sessionId: string; /** 支付路线。 */ route: PaymentRoute; /** route provider。 */ provider?: EftposProvider | PaymentProvider; /** 当前 attempt 的后端 payment handle。 */ number?: string; /** 当前 session 内 attempt 序号。 */ attemptIndex: number; /** 外部销售单 / 本地销售单关联标识。 */ salesId: string; /** 已选择读卡器。 */ reader?: PaymentReader; /** 当前金额。 */ amount?: string | number; /** 当前币种。 */ currency?: string; /** 本地金额与手续费 quote。 */ quote?: PaymentAmountQuote; /** route/provider 专属参数。 */ methodOptions?: Record; /** 业务透传 metadata。 */ metadata?: Record; /** 支付页使用场景:用户端或商家端。 */ usageScene?: PaymentUsageScene | `${PaymentUsageScene}`; } /** 支付 attempt 入参。 */ export interface PiPaymentPayParams { /** 显式指定后端 payment handle;不传则 SDK 生成。 */ number?: string; /** 显式指定请求级幂等 token;不传则 SDK 按 attempt 生成。 */ requestUniqueIdempotencyToken?: string; /** 本次 attempt 金额。 */ amount?: string | number; /** 本次 attempt 币种。 */ currency?: string; /** route/provider 专属参数。 */ methodOptions?: Record; /** 业务透传 metadata。 */ metadata?: Record; } /** 退款 attempt 入参。 */ export interface PiPaymentRefundParams { /** 显式指定后端 payment handle;不传则 SDK 生成。 */ number?: string; /** 显式指定请求级幂等 token;不传则 SDK 按 attempt 生成。 */ requestUniqueIdempotencyToken?: string; /** 本次退款金额。 */ amount: string | number; /** 本次退款币种。 */ currency?: string; /** 原支付流水号。 */ originalPaymentNumber?: string; /** route/provider 专属参数。 */ methodOptions?: Record; /** 业务透传 metadata。 */ metadata?: Record; } /** client 级 payment 查询入参。 */ export interface PiPaymentQueryOptions { /** 查询路线。 */ route: PaymentRoute; /** 查询 provider。 */ provider?: EftposProvider | PaymentProvider; /** 后端 payment handle 列表。 */ numbers?: string[]; /** 后端 payment handle。 */ number?: string; /** 外部销售单 / 本地销售单关联标识。 */ salesId?: string; /** WalletPass tag 过滤。 */ tag?: string; /** WalletPass voucher id 过滤。 */ voucherId?: string | number; } /** 后端统一 payment 响应结构。 */ export interface PaymentUnifiedResponse { /** 统一 payment 摘要。 */ payment: PaymentSummary; /** provider 相关返回。 */ provider_response?: unknown; /** route/provider 专属结果。 */ method_result?: TMethodResult; /** WalletPass 扣减结果。 */ wallet_passes?: unknown[]; /** WalletPass 原始资产明细。 */ asset_details?: unknown[]; /** WalletPass 写入的 transaction 副本。 */ transaction_copy?: unknown; } /** 后端统一 payment 摘要。 */ export interface PaymentSummary { /** 后端 payment handle。 */ number: string; /** 外部销售单 / 本地销售单关联标识。 */ sales_id: string; /** 支付路线。 */ payment_method: PaymentRoute; /** 支付 provider。 */ payment_provider: string; /** 后端动作。 */ action: 'pay' | 'refund' | 'verify' | 'action' | 'transactions' | 'transaction' | 'transaction_update'; /** 后端交易状态。 */ status: 'succeeded' | 'processing' | 'failed'; /** 后端状态码。 */ code: PaymentCode | number | string; /** 后端状态文案。 */ message: string; /** 交易金额。 */ amount: number | string; /** 交易币种。 */ currency?: string; } /** eftpos route 专属 method_result。 */ export interface EftposMethodResult { /** provider 原始或半原始响应。 */ provider_response?: unknown; /** receipt 行文本。 */ receipts?: string[]; } /** walletpass route 专属 method_result。 */ export interface WalletPassMethodResult { /** 后端返回的钱包 pass 列表。 */ wallet_passes?: unknown[]; /** 后端返回的资产明细。 */ asset_details?: unknown[]; } /** 支付或退款最终结果。 */ export declare type PaymentResult = PaymentUnifiedResponse; /** client 查询结果。 */ export declare type PaymentQueryResult = PaymentUnifiedResponse; /** SDK 标准错误结构。 */ export interface PaymentError { /** 错误码。 */ code: string | number; /** 错误文案。 */ message: string; /** 失败页标题文案;不传时 UI 使用通用失败标题。 */ title?: string; /** 失败页正文文案;不传时 UI 使用 message。 */ detail?: string; /** 失败时后端 payment 摘要。 */ payment?: PaymentSummary; /** 失败页展示类型。 */ failureKind?: 'normal' | 'unknown' | 'timeout' | 'cancelled'; /** 当前失败是否允许人工确认。 */ manualMarkable?: boolean; /** 当前失败是否允许重试。 */ retryable?: boolean; /** 当前失败是否允许用户端打印兜底小票。 */ printTimeoutable?: boolean; /** 当前失败是否属于 POS/网络连接类异常。 */ networkError?: boolean; /** 原始错误或响应。 */ raw?: unknown; } /** eftpos 设备列表查询参数。 */ export interface ListReaderParams { /** 指定 provider;默认使用 session provider。 */ provider?: EftposProvider; /** 设备状态,默认 paired。 */ status?: string; /** 宿主设备号,用于 UI 侧筛选。 */ deviceNumber?: string | number; } /** eftpos 读卡器。 */ export interface PaymentReader { /** 读卡器 id。 */ id: string | number; /** 读卡器展示名称。 */ name?: string; /** 读卡器类型或 provider。 */ type?: string; /** 读卡器设置。 */ setting?: Record; /** 后端返回的其他字段。 */ [key: string]: unknown; } /** 金额和手续费本地 quote。 */ export interface PaymentAmountQuote { /** 原始金额。 */ sourceAmount?: string; /** 实际支付金额。 */ amount: string; /** 固定手续费。 */ surchargeFixed: string; /** 比例手续费百分比。 */ surchargeRate: string; /** 比例手续费金额。 */ surchargeRateAmount: string; /** 总手续费。 */ surchargeTotal: string; /** 实付总额。 */ total: string; } /** EFTPOS UI 当前页面。 */ export declare type PiPaymentEftposPage = 'device' | 'amount' | 'process' | 'network' | 'fail' | 'manual' | 'result'; /** session 生命周期状态。 */ export declare type PiPaymentSessionStatus = 'idle' | 'processing' | 'actionRequired' | 'succeeded' | 'failed' | 'destroyed'; /** session 当前完整快照。 */ export interface PiPaymentSessionState { /** 前端 session id。 */ sessionId: string; /** 当前生命周期状态。 */ status: PiPaymentSessionStatus; /** 支付路线。 */ route: PaymentRoute; /** route provider。 */ provider?: EftposProvider | PaymentProvider; /** 当前 attempt 的后端 payment handle。 */ number?: string; /** 当前 draft。 */ draft: PiPaymentDraftState; /** 当前执行页 schema。 */ schema?: PaymentPageSchema; /** 最终成功结果。 */ result?: PaymentResult; /** 最终失败错误。 */ error?: PaymentError; } /** session 对外事件。 */ export declare type PiPaymentSessionEvent = { type: 'stateChange'; state: PiPaymentSessionState; } | { type: 'schemaChange'; state: PiPaymentSessionState; schema: PaymentPageSchema; } | { type: 'success'; state: PiPaymentSessionState; result: PaymentResult; } | { type: 'failed'; state: PiPaymentSessionState; error: PaymentError; } | { type: 'print'; state: PiPaymentSessionState; receipt: string[]; } | { type: 'printTimeout'; state: PiPaymentSessionState; } | { type: 'manualMark'; state: PiPaymentSessionState; }; /** session 事件监听函数。 */ export declare type PiPaymentSessionListener = (event: PiPaymentSessionEvent) => void; /** 单条 SDK 日志。 */ export interface PiPaymentLogEntry { /** 日志时间戳。 */ timestamp: string; /** 日志标题。 */ title: string; /** 当前 session id。 */ sessionId?: string; /** 当前 attempt 序号。 */ attemptIndex?: number; /** 当前后端 payment handle。 */ number?: string; /** 日志附加数据。 */ data?: unknown; } /** SDK 日志快照。 */ export interface PiPaymentLogSnapshot { /** session id。 */ sessionId: string; /** session 创建时间。 */ createdAt: string; /** session 结束时间。 */ endedAt?: string; /** 日志条目。 */ entries: PiPaymentLogEntry[]; } /** PiPaymentEftpos ref 暴露的方法。 */ export interface PiPaymentEftposRef { /** 打开弹窗并创建 session。 */ open(options: PiPaymentEftposOpenOptions): boolean; /** 关闭弹窗并销毁当前 session。 */ close(): void; } /** EFTPOS UI 单次流程快照,用于宿主保存和排障。 */ export interface PiPaymentEftposSnapshot { /** 当前页面。 */ page: PiPaymentEftposPage; /** 当前 session 状态。 */ state?: PiPaymentSessionState; } /** EFTPOS UI 成功事件参数,对齐旧 EftposPay getPayParams。 */ export interface PiPaymentEftposSuccessParams { /** 手动标记标识,对齐旧 EftposPay 输出。 */ manual_marking_flag?: 1; /** 后端 payment handle。 */ number?: string; /** 兼容旧字段。 */ uniquePaymentNumber?: string; /** 旧订单号;新 payment 只有 salesId 时可为空。 */ order_id?: string | number; /** 新销售单标识。 */ sales_id?: string | number; /** 选中读卡器。 */ device?: PaymentReader; /** 选中读卡器别名。 */ reader?: PaymentReader; /** 支付金额。 */ amount?: string; /** 原始订单金额。 */ sourceAmount?: string; /** 比例手续费小数形式。 */ surPercentRate?: string; /** 比例手续费百分比。 */ surRate?: string; /** 比例手续费金额。 */ surRateMoney?: string; /** 固定手续费。 */ surMoney?: string; /** 总手续费。 */ surcharge?: string; /** 卡机侧额外手续费。 */ cardReaderSurcharge?: string | number; /** 实付总额。 */ total?: string; /** 格式化实付总额。 */ totalUnit?: string; /** 小票。 */ receipt?: string[]; /** 允许透传 provider 返回的其他字段。 */ [key: string]: unknown; } /** EFTPOS UI 失败事件参数,对齐旧 EftposPay getPayParams。 */ export interface PiPaymentEftposFailParams { /** 后端 payment handle。 */ number?: string; /** 兼容旧字段。 */ uniquePaymentNumber?: string; /** 旧订单号;新 payment 只有 salesId 时可为空。 */ order_id?: string | number; /** 新销售单标识。 */ sales_id?: string | number; /** 选中读卡器。 */ device?: PaymentReader; /** 选中读卡器别名。 */ reader?: PaymentReader; /** 手动标记标识。 */ manual_marking_flag?: 1; } /** EFTPOS UI 统一事件。 */ export declare type PiPaymentEftposChangeEvent = { type: 'page'; page: PiPaymentEftposPage; snapshot: PiPaymentEftposSnapshot; } | { type: 'paramsChange'; snapshot: PiPaymentEftposSnapshot; } | { type: 'readerSelect'; reader: PaymentReader; snapshot: PiPaymentEftposSnapshot; } | { type: 'success'; result?: PaymentResult; params: PiPaymentEftposSuccessParams; snapshot: PiPaymentEftposSnapshot; } | { type: 'fail'; error?: PaymentError; params: PiPaymentEftposFailParams; snapshot: PiPaymentEftposSnapshot; } | { type: 'print'; receipt: string[]; snapshot: PiPaymentEftposSnapshot; } | { type: 'printTimeout'; snapshot: PiPaymentEftposSnapshot; } | { type: 'close'; snapshot: PiPaymentEftposSnapshot; }; /** PiPaymentEftpos 组件 props。 */ export interface PiPaymentEftposProps { /** 外部网络状态;false 时进入断网页,恢复 true 后回到原页面。 */ networkOnline?: boolean; } /** PiPaymentEftpos 单次打开入参。 */ export interface PiPaymentEftposOpenOptions { /** eftpos provider。 */ provider: EftposProvider; /** 交易模式。 */ mode: PaymentMode; /** 默认交易金额。 */ amount?: string; /** 是否允许在发起交易前进入金额页编辑金额。 */ enableAmountEdit?: boolean; /** 订单原始金额,用于限制可编辑支付金额。 */ sourceAmount?: string | number; /** 当前已由现金等其他方式支付的金额,用于展示剩余待付。 */ paidAmount?: string | number; /** 初始手续费配置。 */ surcharge?: PiPaymentUpdateInput['surcharge']; /** 交易币种。 */ currency?: string; /** 默认读卡器。 */ defaultReader?: PaymentReader; /** 宿主设备号,用于自动筛选 reader。 */ deviceNumber?: string | number; /** 退款对应的原支付流水号。 */ originalPaymentNumber?: string; /** 业务透传 metadata。 */ metadata?: Record; /** 操作人信息。 */ operator?: { id?: string | number; type?: string; }; /** 宿主平台。 */ platform?: string; /** 支付页使用场景:用户端或商家端。 */ usageScene?: PaymentUsageScene | `${PaymentUsageScene}`; /** 打开时的网络状态;组件 props 后续变化会覆盖该值。 */ networkOnline?: boolean; /** 外部销售单 / 本地销售单关联标识。 */ salesId: string; /** EFTPOS UI 统一事件。 */ onChange?: (event: PiPaymentEftposChangeEvent) => void; } export type { PaymentPageSchema, PaymentSchemaAction, PaymentSchemaItem, PaymentSchemaRow, };