import { ReactNode } from "react"; import { PaymentMessageDescriptor, PaymentReader, PaymentUsageScene } from "@pisell/pi-payment-sdk"; //#region src/plus/piPaymentUI/eftpos/contracts/index.d.ts /** EFTPOS UI 内置支持的支付厂商标识。 */ declare const EftposProvider: { readonly Payo: "payo"; readonly Mx51: "mx51"; readonly Linkly: "linkly"; readonly Windcave: "windcave"; readonly Tyro: "tyro"; readonly Huifu: "huifu"; readonly AdyenPos: "adyenpos"; readonly AdyenAlipay: "adyenalipay"; readonly AdyenWechat: "adyenwechat"; }; type EftposProvider = (typeof EftposProvider)[keyof typeof EftposProvider]; /** 弹窗本次交易的业务模式。 */ declare const PaymentMode: { readonly Pay: "pay"; readonly Refund: "refund"; }; type PaymentMode = (typeof PaymentMode)[keyof typeof PaymentMode]; /** UI 对应的 SDK 支付路线。 */ declare const PaymentRoute: { readonly Eftpos: "eftpos"; }; type PaymentRoute = (typeof PaymentRoute)[keyof typeof PaymentRoute]; /** 在设备/金额页修改草稿时允许覆盖的字段。 */ interface PiPaymentUpdateInput { reader?: PaymentReader; amount?: string | number; surcharge?: { rate?: string | number; fixed?: string | number; }; methodOptions?: Record; metadata?: Record; usageScene?: PaymentUsageScene; } /** EFTPOS 弹窗内部的页面状态机节点。 */ type PiPaymentEftposPage = 'device' | 'amount' | 'huifuScan' | 'process' | 'network' | 'fail' | 'manual' | 'successReview' | 'result'; /** 失败事件向宿主暴露的稳定业务判断,不包含 SDK 诊断信息和 Provider 原始响应。 */ interface PiPaymentEftposFailure { code: string | number; retryable: boolean; manuallyResolvable: boolean; } /** EFTPOS 弹窗向调用方发出的扁平业务事件;仅暴露 attempt 创建和业务结果。 */ type PiPaymentEftposChangeEvent = { type: 'processing'; paymentNumber: string; transactionNumber: string; } | { type: 'success'; paymentNumber: string; transactionNumber: string; amount: string; originalAmount?: string; surcharge?: { ratePercent?: string; fixedAmount?: string; totalAmount: string; }; cardReaderSurcharge?: string; readerSnapshot?: PaymentReader; manuallyConfirmed: boolean; } | { type: 'failed'; paymentNumber: string; transactionNumber?: string; error: PiPaymentEftposFailure; } | { type: 'printOnTimeout'; paymentNumber: string; transactionNumber?: string; } | { type: 'closed'; paymentNumber: string; transactionNumber?: string; }; /** 翻译动态支付文案时可用的页面和厂商上下文。 */ interface PaymentMessageContext { provider?: EftposProvider; mode?: PaymentMode; page?: PiPaymentEftposPage; } /** 调用方覆盖默认语言包时使用的动态文案解析器。 */ type PaymentMessageResolver = (descriptor: PaymentMessageDescriptor, context: PaymentMessageContext) => string | undefined; /** EFTPOS 组件级配置;交易参数仍由 ref.open 提供。 */ type PiPaymentEftposProps = { networkOnline?: boolean; messages?: Record; messageResolver?: PaymentMessageResolver; /** 宿主存在其它弹窗时可显式提高 EFTPOS 流程层级。 */ zIndex?: number; }; /** pay/refund 共享的单次 EFTPOS 交易配置。 */ interface PiPaymentEftposCommonOpenOptions { provider: EftposProvider; amount?: string | number; enableAmountEdit?: boolean; surcharge?: PiPaymentUpdateInput['surcharge']; currency?: string; defaultReader?: PaymentReader; deviceNumber?: string | number; originalPaymentNumber?: string; metadata?: Record; operator?: { id?: string | number; type?: string; }; platform?: string; slots?: { /** 失败页内置操作区下方的宿主自定义内容。 */failed?: ReactNode; }; methodOptions?: Record; usageScene?: PaymentUsageScene; networkOnline?: boolean; salesId: string; paymentNumber: string; onChange?: (event: PiPaymentEftposChangeEvent) => void; } /** 支付场景可为金额编辑页提供原始应收和已付金额。 */ interface PiPaymentEftposPayOpenOptions extends PiPaymentEftposCommonOpenOptions { mode: typeof PaymentMode.Pay; sourceAmount?: string | number; paidAmount?: string | number; } /** 退款场景只消费调用方已确定的 amount,不关心支付金额页字段。 */ interface PiPaymentEftposRefundOpenOptions extends PiPaymentEftposCommonOpenOptions { mode: typeof PaymentMode.Refund; } /** 通过 ref 打开弹窗时传入的一次性交易配置。 */ type PiPaymentEftposOpenOptions = PiPaymentEftposPayOpenOptions | PiPaymentEftposRefundOpenOptions; /** PiPaymentEftpos 对外暴露的命令式控制接口。 */ interface PiPaymentEftposRef { open(options: PiPaymentEftposOpenOptions): boolean; close(): void; } //#endregion export { EftposProvider, PaymentMessageContext, PaymentMessageResolver, PaymentMode, PaymentRoute, PiPaymentEftposChangeEvent, PiPaymentEftposFailure, PiPaymentEftposOpenOptions, PiPaymentEftposPage, PiPaymentEftposPayOpenOptions, PiPaymentEftposProps, PiPaymentEftposRef, PiPaymentEftposRefundOpenOptions, PiPaymentUpdateInput };