/// <reference types="node" />
/// <reference types="node" />
/// <reference types="node" />
import * as net from "net";
export type Options = net.TcpSocketConnectOpts & {
    /**
     * 默认127.0.0.1
     */
    ip?: string;
    /**
     * 重连延迟时间(毫秒)
     */
    reconnectDelay?: number;
    /**
     * 3des加密密钥
     */
    appSecret: string;
    /**
     * 忽略扣费时的D2响应
     */
    ignorePaymentD2Res?: boolean;
    /**
     * 是否超时自动响应(设备响应超时时,插件自动发布超时response),避免发起指令设备没有响应的情况
     */
    timeoutAutoRes?: boolean;
    /**
     * 超时自动响应的超时时间(毫秒)
     */
    timeoutMs?: number;
};
export declare class SendData {
    /**
     支付通道
  
        01:澳門通DAT
  
        02:澳門通OPENAPI
  
        03:澳門通ECR
  
        04:中銀BOC
  
        05:中銀ECR
     */
    PayChannel: string;
    /**
     支付方式
  
      01：澳門通卡
  
      02：銀聯閃付卡
  
      03：支付寳ALIPAY
  
      04：澳門手機銀行BOCPAY
  
      05：廣發移動支付錢包CGBPAY
  
      06：銀聯快捷支付CUPQ
  
      07：工銀e支付ICBCEPAY
  
      08：國際銀行LUSOPAY
  
      09：澳門通MPAY
  
      10：豐付寳Tai Fung Pay
  
      11：微信WECHAT
  
      12：南粵
  
      13：極易付UePay
     */
    PayType: string;
    /**
     用戶支付方式
  
      00:無
  
      01:刷卡
  
      02:正掃
  
      03:反掃
  
      04:H5
  
      05:PC
  
      06:APP
     */
    PayUserType?: string;
    /**
     * 商戶編號
     */
    PayMerchantNo: string;
    /**
     * 訂單交易時間
     *
     * yyyy-MM-dd HH:mm:ss
     */
    PayTradeDateTime?: string;
    /**
     * 商戶訂單號
     *
     * 推荐使用 PayChannel + PayType + PayCmd + 终端IP后3位 + 13位时间戳
     */
    PayOutTransNo: string;
    /**
     支付命令
  
      01：扣款
  
      02：餘額查詢
  
      03：撤銷扣款
  
      04：鎖卡( 交易大類DAT有效)
  
      05:採集所有未上傳記錄( DAT有效)
  
      06：重置歷史交易指標(DAT有效)
  
      07：充值
  
      08：交易退款
  
      09：訂單查詢
  
      10：登入（ECR、BOC）
  
      11：登出（ECR）
  
      12：結算（ECR、BOC）
     */
    PayCmd: string;
    /**
     * 交易幣種 默認MOP
     */
    Currency?: 'MOP';
    /**
     * 支付金額
     *
     * 單位：分
     */
    Amt?: number;
    /**
     * 超時時間
     *
     * 單位：秒
     *
     * 聚易用版本：支持設置查卡及扣費的超時時間（設置值必須大於3）
     */
    PayTimeOut?: string;
    /**
     * 條碼
     *
     * 澳門通卡沒有條碼功能。
     *
     * 掃碼支付時需要的條碼
     */
    QrCode?: string;
    /**
     * 異步通知商戶請求參數
     *
     * 建議放入商戶訂單號
     */
    Passbackparam?: string;
    /**
     * 異步地址
     *
     * 單位：分
     */
    NotifyUrl?: string;
    /**
    * 同步地址
    */
    ReturnUrl?: string;
    /**
     * 支付擴展屬性(Json)
     */
    PayExtends?: string;
    [key: string]: any;
}
export declare class AggregateResData {
    PayAccount: string;
    TerminalId: string;
    InvoiceNo: string;
    Balance: number;
    LogNo: string;
    OrigBalance: number;
    Pan: string;
    TotalAmt: number;
    TxnDate: string;
    TxnTime: string;
    PurseType: string;
    PayMode: string;
    CardLogicalNo: string;
    DeviceNo: string;
    PayOutTransNo: string;
    CardStatus: string;
    TradeNo: string;
    PayType: string;
}
export declare class Response<T = AggregateResData> {
    /**
     * 响应代码（0：正常,1:错误）
     */
    ResCode: number;
    /**
     * 响应消息(错误消息)
     */
    ResMsg: string;
    ResData: string;
    /**
     * 記錄數
     */
    ResCount: number;
}
/**
 * 3DES加解密
 */
export declare class Des3Util {
    /**
     * 加密
     */
    static encrypt(data: string | object, key: string, iv: string): string;
    /**
     * 解密
     */
    static decrypt(data: string, key: string, iv: string): string;
}
export interface SocketClient {
    on(event: "connect", listener: () => void): this;
    on(event: "data", listener: (data: Buffer) => void): this;
    /**
     * 收到数据后,json反序列化成功时触发
     * @param event
     * @param listener
     */
    on(event: "response", listener: (response: Response) => void): this;
    on(event: "error", listener: (err: Error) => void): this;
    on(event: "decodeError", listener: (err: Error) => void): this;
    on(event: "close", listener: (hadError: boolean) => void): this;
    off(eventName: string | symbol, listener: (...args: any[]) => void): this;
    on(eventName: string | symbol, listener: (...args: any[]) => void): this;
}
/**
 * 澳门通SOCKET客户端
 *
 * 珠海曜麒支付方案(停車場系統)V1.20.docx
 */
export declare class SocketClient {
    private _socket;
    readonly opts: Options;
    private _emitter;
    private _disposed;
    readonly timeout_timers: Map<string, NodeJS.Timeout>;
    get socketInstance(): net.Socket;
    constructor(opts: Options);
    /**
     * 发送数据
     */
    send(data: SendData): boolean;
    /**
     * 添加超时自动响应定时器
     * @param data
     * @returns
     */
    private _add_timeout_auto_res_timer;
    private _del_timeout_res_timer;
    destroy(): void;
    private _connect;
    private _onData;
    private _onClose;
    private _dispose;
}
