import { InternalAxiosRequestConfig, AxiosInstance } from 'axios';
import { KeyObject } from 'crypto';

interface UploadImageResult {
    media_id: string;
}
/**
 * 加密证书对象
 */
interface EncryptCertificate {
    /** ciphertext应用的加密算法 */
    algorithm: string;
    /** 加密使用的随机串 */
    nonce: string;
    /** 加密使用的附加数据 */
    associated_data: string;
    /** 密文 */
    ciphertext: string;
}
/**
 * 证书
 */
interface Certificate {
    /** 证书序列号 */
    serial_no: string;
    /** 证书有效期起始时间 */
    effective_time: string;
    /** 证书有效期截止时间 */
    expire_time: string;
    /** 加密后的证书 */
    encrypt_certificate: EncryptCertificate;
}
/**
 * 附带解密后的证书
 */
interface DecryptCertificates {
    /** 证书序列号 */
    serial_no: string;
    /** 证书有效期起始时间 */
    effective_time: string;
    /** 证书有效期截止时间 */
    expire_time: string;
    /** 解密后的证书 */
    certificate: string;
    /** 证书上的公钥 */
    publicKey: KeyObject;
}
/**
 * 证书列表
 */
type Certificates = Certificate[];
/**
 * 获取证书列表返回结果
 */
type GetCertificatesResult = {
    data: Certificates;
};

interface WechatBaseOptions {
    /**
     * 商户号
     */
    mchid: string;
    /**
     * pem证书
     */
    apiclient_cert: Buffer;
    /**
     * pem私钥
     */
    apiclient_key: Buffer;
    /**
     * apiV3密钥
     */
    apiV3Key: string;
    /**
     * header中的User-Agent
     */
    userAgent?: string;
    /**
     * 自动更新平台证书
     * @default true
     * @description 更偏向于惰性更新,缓存证书并记录过期时间,在每次请求时,比对时间进行更新(简单的时间比对于性能没有啥影响)。
     * @description 如果你需要自己管控,可以关闭此选项,调用updateCertificates(true)方法强制更新实例上的证书
     */
    autoUpdateCertificates?: boolean;
    /**
     * 下载文件文件夹
     * @default [systemTempDir]/wxpay-v3-downloads
     * @description 让部分接口更加方便,例如上传文件给微信接口只能从本地上传
     * @description 需要注意的是,sdk并不会保存此文件,于对应功能完毕后
     */
    downloadDir?: string;
}
interface WechatBaseEventOPtions {
    /**
     * 在请求前触发,可以在此处修改请求配置.
     * @description 签名生成在onRequsetBefore之后,此处无法获取到签名
     * @param config 请求的配置
     * @param instance 当前实例
     */
    onRequsetBefore?: (config: InternalAxiosRequestConfig<any>, instance: WechatPayV3Base) => void;
    /**
     * 在请求后触发
     * @description 签名生成在onRequsetAfter之前,此处可以获取到签名并修改
     * @param config 请求的配置
     * @param instance 当前实例
     */
    onRequsetAfter?: (config: InternalAxiosRequestConfig<any>, instance: WechatPayV3Base) => void;
    /**
     * 在请求成功后触发
     */
    onResponse?: (result: any, instance: WechatPayV3Base) => void;
}
/** 微信支付v3 */
declare class WechatPayV3Base {
    private events;
    /** pem私钥 */
    readonly privateKey: Buffer;
    /** 加密算法,固定值'WECHATPAY2-SHA256-RSA2048'.国密暂不支持 */
    readonly schema = "WECHATPAY2-SHA256-RSA2048";
    /** axios请求示例 */
    readonly request: AxiosInstance;
    /** 商户号 */
    readonly mchid: string;
    /** header -> userAgent (微信可能会拒绝不带userAgent的请求) */
    readonly userAgent: string;
    /** apiV3密钥 */
    readonly apiV3Key: string;
    /** 平台证书列表 */
    certificates: DecryptCertificates[];
    /** 更新证书时间+12小时后的结果,注意此时间并非平台证书本身的过期时间,而是需要更新的时间 */
    certExpiresTime?: Date;
    /** 商户Api证书序列号 */
    readonly apiCertSerialNo: string;
    /** 下载文件文件夹 */
    readonly downloadDir: string;
    constructor(options: WechatBaseOptions, events?: WechatBaseEventOPtions);
    /**
     * 初始化
     */
    private init;
    setEvents(events: WechatBaseEventOPtions): void;
    /**
     * 更新平台证书
     * @description 会判断缓存是否过期,如果过期则更新,否则不更新.
     * @param forceUpdate 强制更新
     */
    updateCertificates(forceUpdate?: boolean): Promise<void>;
    /**
     * 构造签名串并签名
     * @param method 请求方法
     * @param url 请求URL
     * @param timestamp 时间戳
     * @param nonce 随机字符串
     * @param body 请求主体
     */
    protected buildMessageSign(method: string, url: string, timestamp: string, nonce: string, body: string | object): string;
    /**
     * 构造验签名串
     * @param timestamp 参数在响应头中对应
     * @param nonce 参数在响应头中对应
     * @param body 参数在响应头中对应
     * @returns
     */
    protected buildMessageVerify(timestamp: string, nonce: string, body: string): string;
    /**
     * 构造Authorization
     * @param nonce_str 随机字符串
     * @param timestamp 时间戳
     * @param signature 签名(buildMessage生成)
     */
    protected getAuthorization(nonce_str: string, timestamp: string, signature: string): string;
    /**
     * 私钥签名
     * @param data 待签名数据
     * @returns base64编码的签名
     */
    sha256WithRSA(data: string): string;
    /**
     * 平台证书公钥验签
     * @param serial 证书序列号
     * @param signature 签名
     * @param data 待验签数据
     */
    sha256WithRsaVerify(serial: string, signature: string, data: string): boolean;
    /**
     * 解密平台响应
     * @param nonce 随机字符串
     * @param associated_data 附加数据
     * @param ciphertext  密文
     * @returns
     */
    aesGcmDecrypt(options: {
        ciphertext: string;
        nonce: string;
        associated_data: string;
    }): string;
    /**
     * 平台证书公钥加密,如果需要同时加密多个字段,请使用publicEncryptObjectPaths
     * @param data 待加密数据
     * @returns
     */
    publicEncrypt(data: string): string;
    /**
     * 平台证书公钥加密请求主体中指定的字段
     * @description 对字符串类型的路径进行加密
     * @param data 数据
     * @param paths 路径数组
     * @returns 该函数返回一个新的对象,不会修改原对象
     * @example
     * const data = { name: '张三' , idCard: {
     *    number:string //如果这个字段需要加密
     * }}
     * const newData = publicEncryptObjectPaths(data,['idCard.number'])
     */
    publicEncryptObjectPaths<T extends Record<string, any>>(data: T, paths: string[]): any;
    /**
     * 下载文件
     * @param url
     * @param fileName 提供文件名,包括后缀。如果不提供,则从url中获取文件名
     * @returns
     */
    downloadFile(url: string, fileName?: string): Promise<{
        filePath: string;
        fileName: string;
    }>;
    /**
     * 响应验签
     * @description 该函数会验证签名,返回true表示验签成功,返回false表示验签失败
     * @param headers 请求头
     * @param body  请求体
     */
    resVerify<H extends Record<string, any>, B extends Record<string, any>>(headers: H, body?: B): boolean;
    /**
     * 处理回调 -验证签名,并使用AEAD_AES_256_GCM解密
     * @param headers
     * @param body
     */
    handleCallback<H extends Record<string, any>, B extends Record<string, any>>(headers: H, body: B): Promise<B & {
        resource: any;
    }>;
    /**
     * 获取证书
     * @description 获取商户当前可用的平台证书列表。
     * @docUrl https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/wechatpay5_1.shtml
     */
    getCertificates(): Promise<DecryptCertificates[]>;
    private _upload;
    /**
     * 图片上传
     * @maxSize 2M
     * @param pathOrUrl 图片路径可以是本地路径,也可以是网络路径
     * @param fileName 商户上传的媒体图片的名称，商户自定义，必须以jpg、bmp、png为后缀,不区分大小写。
     * @description 部分微信支付业务指定商户需要使用图片上传 API来上报图片信息，从而获得必传参数的值：图片MediaID 。
     * @docUrl https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter2_1_1.shtml
     */
    uploadImage(pathOrUrl: string, fileName?: string): Promise<UploadImageResult>;
    /**
     * 视频上传
     * @maxSize 5M
     * @param pathOrUrl 视频路径可以是本地路径,也可以是网络路径
     * @param fileName 商户上传的媒体视频的名称，商户自定义，必须以avi、wmv、mpeg、mp4、mov、mkv、flv、f4v、m4v、rmvb为后缀,不区分大小写。
     * @description 部分微信支付业务指定商户需要使用视频上传 API来上报视频信息，从而获得必传参数的值：视频MediaID 。
     * @docUrl https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter2_1_2.shtml
     */
    uploadVideo(pathOrUrl: string, fileName?: string): Promise<UploadImageResult>;
}
interface ContainerOptions extends WechatBaseOptions {
    /**
     * 是否使用单例模式
     * @default true
     */
    singleton?: boolean;
}
/**
 * 实例化Api的容器,默认单例
 * @param options Base的配置
 * @param events Base的事件
 * @returns
 */
declare function apiContainer(options: ContainerOptions, events?: WechatBaseEventOPtions): {
    use: <T extends new (wechatpay: WechatPayV3Base) => any>(ApiClass: T) => InstanceType<T>;
    downloadFile: (url: string, fileName?: string | undefined) => Promise<{
        filePath: string;
        fileName: string;
    }>;
    publicEncrypt: (data: string) => string;
    publicEncryptObjectPaths: <T_1 extends Record<string, any>>(data: T_1, paths: string[]) => any;
    uploadImage: (pathOrUrl: string, fileName?: string | undefined) => Promise<UploadImageResult>;
    uploadVideo: (pathOrUrl: string, fileName?: string | undefined) => Promise<UploadImageResult>;
    sha256WithRSA: (data: string) => string;
    aesGcmDecrypt: (options: {
        ciphertext: string;
        nonce: string;
        associated_data: string;
    }) => string;
    sha256WithRsaVerify: (serial: string, signature: string, data: string) => boolean;
    handleCallback: <H extends Record<string, any>, B extends Record<string, any>>(headers: H, body: B) => Promise<B & {
        resource: any;
    }>;
    resVerify: <H_1 extends Record<string, any>, B_1 extends Record<string, any>>(headers: H_1, body?: B_1 | undefined) => boolean;
    setEvents: (events: WechatBaseEventOPtions) => void;
    base: WechatPayV3Base;
};
/**
 * 查看当前内存中的实例
 */
declare function getInstances(): {
    baseInstanceMap: Map<string, WechatPayV3Base>;
    useInstanceMap: Map<string, any>;
};

interface SubmitApplicationsResult {
    applyment_id: string;
}
type BankAccountType = 'BANK_ACCOUNT_TYPE_CORPORATE' | 'BANK_ACCOUNT_TYPE_PERSONAL';
type ApplymentState = 'APPLYMENT_STATE_EDITTING' | 'APPLYMENT_STATE_AUDITING' | 'APPLYMENT_STATE_REJECTED' | 'APPLYMENT_STATE_TO_BE_CONFIRMED' | 'APPLYMENT_STATE_TO_BE_SIGNED' | 'APPLYMENT_STATE_SIGNING' | 'APPLYMENT_STATE_FINISHED' | 'APPLYMENT_STATE_CANCELED';
interface QueryApplymentStateResult {
    /** 微信支付申请单号 */
    applyment_id: string;
    /** 业务申请编号 */
    business_code: string;
    /** 特约商户号,当申请单状态为APPLYMENT_STATE_FINISHED时才返回*/
    sub_mchid?: string;
    /** 超管签约链接,状态为APPLYMENT_STATE_TO_BE_SIGNED才返回 */
    sign_url?: string;
    /** 申请单状态 */
    applyment_state: ApplymentState;
    /** 申请单状态描述 */
    applyment_state_msg: string;
    /** 审核情况，当申请状态为APPLYMENT_STATE_REJECTED时才返回 */
    audit_detail?: {
        /** 字段名:例如:id_card_copy */
        field: string;
        /** 字段名描述:例如:身份证人像面 */
        field_name: string;
        /** 驳回原因 */
        reject_reason: string;
    }[];
}
interface ModifySettlementAccountBody {
    /** 账户类型 */
    account_type: 'ACCOUNT_TYPE_BUSINESS' | 'ACCOUNT_TYPE_PRIVATE';
    /** 开户名称 */
    account_name?: string;
    /** 开户银行 */
    account_bank: string;
    /** 开户银行省市编码 */
    bank_address_code: string;
    /** 开户银行全称（含支行）  */
    bank_name?: string;
    /** 开户银行联行号  */
    bank_branch_id?: string;
    /** 银行账号 */
    account_number: string;
}
interface QuerySettlementAccountResult {
    /** 账户类型 */
    account_type: 'ACCOUNT_TYPE_BUSINESS' | 'ACCOUNT_TYPE_PRIVATE';
    /** 开户银行 */
    account_bank: string;
    /** 开户银行全称（含支行） */
    bank_name?: string;
    /** 开户银行联行号 */
    bank_branch_id?: string;
    /** 银行账号 */
    account_number: string;
    /** 汇款验证结果 */
    verify_result: 'VERIFYING' | 'VERIFY_SUCCESS' | 'VERIFY_FAIL';
    /** 汇款验证失败原因 */
    verify_fail_reason?: string;
}
interface SubmitApplicationBody {
    /** 业务申请编号 */
    business_code: string;
    /** 超级管理员信息 */
    contact_info: SubmitApplicationContactInfo;
    /** 主体资料 */
    subject_info: SubmitApplicationSubjectInfo;
    /** 经营资料 */
    business_info: SubmitApplicationBusinessInfo;
    /** 结算规则 */
    settlement_info: SubmitApplicationSettlementInfo;
    /** 结算银行账户 */
    bank_account_info: SubmitApplicationBankAccountInfo;
    /** 补充材料 */
    addition_info?: SubmitApplicationAdditionInfo;
}
type ContactType = 'LEGAL' | 'SUPER';
type ContactIdType = 'IDENTIFICATION_TYPE_IDCARD' | 'IDENTIFICATION_TYPE_PASSPORT' | 'IDENTIFICATION_TYPE_OTHERS';
interface SubmitApplicationContactInfo {
    /** 超级管理员类型 */
    contact_type: ContactType;
    /** 超级管理员姓名 */
    contact_name: string;
    /** 超级管理员证件类型 */
    contact_id_type?: ContactIdType;
    /** 超级管理员证件号码 */
    contact_id_number?: string;
    /** 超级管理员证件照片 */
    contact_id_doc_copy?: string;
    /** 超级管理员证件反面照片 */
    contact_id_doc_copy_back?: string;
    /** 超级管理员证件有效期开始时间 */
    contact_period_begin?: string;
    /** 超级管理员证件有效期结束时间 */
    contact_period_end?: string;
    /** 业务办理授权函 */
    business_authorization_letter?: string;
    /** 超级管理员微信OpenID */
    openid?: string;
    /** 联系手机 */
    mobile_phone: string;
    /** 联系邮箱 */
    contact_email: string;
}
interface SubmitApplicationSubjectInfo {
    /** 主体类型 */
    subject_type: SubjectType;
    /** 是否是金融机构 */
    finance_institution?: boolean;
    /** 营业执照 */
    business_license_info?: SubmitApplicationBusinessLicenseInfo;
    /** 登记证书 */
    certificate_info?: SubmitApplicationCertificateInfo;
    /** 单位证明函照片 */
    certificate_letter_copy?: string;
    /** 金融机构许可证信息 */
    finance_institution_info?: SubmitApplicationFinanceInstitutionInfo;
    /** 经营者/法人身份证件 */
    identity_info: SubmitApplicationIdentityInfo;
    /** 最终受益人信息列表(UBO) */
    ubo_info_list?: SubmitApplicationUboInfo[];
}
interface SubmitApplicationBusinessLicenseInfo {
    /** 营业执照照片 */
    license_copy: string;
    /** 注册号/统一社会信用代码 */
    license_number: string;
    /** 商户名称 */
    merchant_name: string;
    /** 个体户经营者/法人姓名 */
    legal_person: string;
    /** 注册地址 */
    license_address?: string;
    /** 有效期限开始日期 */
    period_begin?: string;
    /** 有效期限结束日期 */
    period_end?: string;
}
type CertificateType = 'CERTIFICATE_TYPE_2388' | 'CERTIFICATE_TYPE_2389' | 'CERTIFICATE_TYPE_2394' | 'CERTIFICATE_TYPE_2395' | 'CERTIFICATE_TYPE_2396' | 'CERTIFICATE_TYPE_2520' | 'CERTIFICATE_TYPE_2521' | 'CERTIFICATE_TYPE_2522' | 'CERTIFICATE_TYPE_2399' | 'CERTIFICATE_TYPE_2400';
interface SubmitApplicationCertificateInfo {
    /** 登记证书照片 */
    cert_copy: string;
    /** 登记证书类型 */
    cert_type: CertificateType;
    /** 证书号 */
    cert_number: string;
    /** 商户名称 */
    merchant_name: string;
    /** 注册地址 */
    company_address: string;
    /** 法定代表人 */
    legal_person: string;
    /** 有效期限开始日期 */
    period_begin: string;
    /** 有效期限结束日期 */
    period_end: string;
}
/** 金融机构类型 */
type FinanceType = 'BANK_AGENT' | 'PAYMENT_AGENT' | 'INSURANCE' | 'TRADE_AND_SETTLE' | 'OTHER';
interface SubmitApplicationFinanceInstitutionInfo {
    /** 金融机构类型 */
    finance_type: FinanceType;
    /** 金融机构许可证图片 */
    finance_license_pics: string[];
}
type IdHolderType = 'LEGAL' | 'SUPER';
type IdDocType = 'IDENTIFICATION_TYPE_IDCARD' | 'IDENTIFICATION_TYPE_OVERSEA_PASSPORT' | 'IDENTIFICATION_TYPE_HONGKONG_PASSPORT' | 'IDENTIFICATION_TYPE_MACAO_PASSPORT' | 'IDENTIFICATION_TYPE_TAIWAN_PASSPORT' | 'IDENTIFICATION_TYPE_FOREIGN_RESIDENT' | 'IDENTIFICATION_TYPE_HONGKONG_MACAO_RESIDENT' | 'IDENTIFICATION_TYPE_TAIWAN_RESIDENT';
type IdCardInfo = {
    /** 身份证人像面照片 */
    id_card_copy: string;
    /** 身份证国徽面照片 */
    id_card_national: string;
    /** 身份证姓名 */
    id_card_name: string;
    /** 身份证号码 */
    id_card_number: string;
    /** 身份证居住地址 */
    id_card_address?: string;
    /** 身份证有效期开始时间 */
    card_period_begin: string;
    /** 身份证有效期结束时间 */
    card_period_end: string;
};
interface IdDocInfo {
    /** 证件正面照片 */
    id_doc_copy: string;
    /** 证件反面照片 */
    id_doc_copy_back?: string;
    /** 证件姓名 */
    id_doc_name: string;
    /** 证件号码 */
    id_doc_number: string;
    /** 证件居住地址 */
    id_doc_address?: string;
    /** 证件有效期开始时间 */
    doc_period_begin: string;
    /** 证件有效期结束时间 */
    doc_period_end: string;
}
interface SubmitApplicationIdentityInfo {
    /** 证件持有人类型 */
    id_holder_type?: IdHolderType;
    /** 证件类型 */
    id_doc_type?: IdDocType;
    /** 法定代表人说明函 */
    authorize_letter_copy?: string;
    /** 身份证信息 */
    id_card_info?: IdCardInfo;
    /** 其他类型证件信息 */
    id_doc_info?: IdDocInfo;
    /** 经营者/法人是否为受益人 */
    owner?: boolean;
}
/**
 *  UBO信息 估计用的不多,就any了。
 *  https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter11_1_1.shtml
 */
type SubmitApplicationUboInfo = any;
/** 主体类型 */
type SubjectType = 'SUBJECT_TYPE_INDIVIDUAL' | 'SUBJECT_TYPE_ENTERPRISE' | 'SUBJECT_TYPE_GOVERNMENT' | 'SUBJECT_TYPE_INSTITUTIONS' | 'SUBJECT_TYPE_OTHERS';
interface SubmitApplicationBusinessInfo {
    /** 商户简称 */
    merchant_shortname: string;
    /** 客服电话 */
    service_phone: string;
    /** 经营场景 */
    sales_info: {
        /** 经营场景类型 */
        sales_scenes_type: SalesScenesType[];
        /** 线下场所 */
        biz_store_info?: BizStoreInfo;
        /** 公众号 */
        mp_info?: MpInfo;
        /** 小程序 */
        mini_program_info?: MiniProgramInfo;
        /** APP */
        app_info?: AppInfo;
        /** Web */
        web_info?: WebInfo;
        /** 企业微信 */
        wework_info?: WeworkInfo;
    };
}
/** 经营场景类型 */
type SalesScenesType = 'SALES_SCENES_STORE' | 'SALES_SCENES_MP' | 'SALES_SCENES_MINI_PROGRAM' | 'SALES_SCENES_WEB' | 'SALES_SCENES_APP' | 'SALES_SCENES_WEWORK';
interface BizStoreInfo {
    /** 线下场所名称 */
    biz_store_name: string;
    /** 线下场所省市编码 */
    biz_address_code: string;
    /** 线下场所地址 */
    biz_store_address: string;
    /** 线下场所门头照片 */
    store_entrance_pic: string[];
    /** 线下场所内部照片 */
    indoor_pic: string[];
    /** 线下场所对应的商家AppID */
    biz_sub_appid?: string;
}
interface MpInfo {
    /** 服务商公众号AppID */
    mp_appid?: string;
    /** 商家公众号AppID */
    mp_sub_appid?: string;
    /** 公众号页面截图 */
    mp_pics: string[];
}
interface MiniProgramInfo {
    /** 服务商小程序APPID */
    mini_program_appid?: string;
    /** 商家小程序APPID */
    mini_program_sub_appid?: string;
    /** 小程序截图 */
    mini_program_pics?: string[];
}
interface AppInfo {
    /** 服务商应用APPID */
    app_appid?: string;
    /** 商家应用APPID */
    app_sub_appid?: string;
    /** APP截图 */
    app_pics: string[];
}
interface WebInfo {
    /** 互联网网站域名 */
    domain: string;
    /** 网站授权函 */
    web_authorisation?: string;
    /** 互联网网站对应的商家APPID */
    web_appid?: string;
}
interface WeworkInfo {
    /** 商家企业微信CorpID */
    sub_corp_id: string;
    /** 企业微信页面截图 */
    wework_pics: string[];
}
interface SubmitApplicationSettlementInfo {
    /** 入驻结算规则ID */
    settlement_id: string;
    /** 所属行业 */
    qualification_type: string;
    /** 特殊资质图片 */
    qualifications?: string[];
    /** 优惠费率活动ID */
    activities_id?: string;
    /** 优惠费率活动值 */
    activities_rate?: string;
    /** 优惠费率活动补充材料 */
    activities_additions?: string[];
}
interface SubmitApplicationBankAccountInfo {
    /** 账户类型 */
    bank_account_type: BankAccountType;
    /** 开户名称 */
    account_name: string;
    /** 开户银行 */
    account_bank: string;
    /** 开户银行省市编码 */
    bank_address_code: string;
    /** 开户银行联行号 */
    bank_branch_id?: string;
    /** 开户银行全称（含支行） */
    bank_name?: string;
    /** 银行账号 */
    account_number: string;
}
interface SubmitApplicationAdditionInfo {
    /** 法人开户承诺函 */
    legal_person_commitment?: string;
    /** 法人开户意愿视频 */
    legal_person_video?: string;
    /** 补充材料 */
    business_addition_pics?: string[];
    /** 补充说明 */
    business_addition_msg?: string;
}

/**
 * 子商户 (特约商户)
 */
declare class Applyment {
    private base;
    constructor(base: WechatPayV3Base);
    /**
     * 提交申请单
     * @notAutoEncrypt <不自动加密>
     * @description 上传图片接口,this.uploadImage
     * @description 加密接口,this.publicEncryptObjectPaths 或者 this.privateEncrypt
     * @param body 请求主体,此接口及其复杂,提供得类型仅作参考,请参考官方文档
     * @doc https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter11_1_1.shtml
     */
    submitApplications(body: SubmitApplicationBody): Promise<SubmitApplicationsResult>;
    /**
     * 查询申请单状态
     * @param businessCode 业务申请编号
     */
    queryApplymentState(businessCode: string): Promise<QueryApplymentStateResult>;
    /**
     * 修改结算账户
     * @param sub_mchid 子商户号 特殊规则：长度最小8个字节。
     * @param body 请求主体
     * @returns 是否成功
     */
    modifySettlementAccount(sub_mchid: string, body: ModifySettlementAccountBody): Promise<boolean>;
    /**
     * 查询结算账号
     * @param sub_mchid 子商户号 特殊规则：长度最小8个字节。
     * @returns 结算账号信息
     */
    querySettlementAccount(sub_mchid: string): Promise<QuerySettlementAccountResult>;
}

interface BaseOrderParams {
    /** 商品描述 */
    description: string;
    /** 商户系统内部订单号，只能是数字、大小写字母_-*且在同一个商户号下唯一 */
    out_trade_no: string;
    /** 订单失效时间，遵循rfc3339标准格式，格式为yyyy-MM-DDTHH:mm:ss+TIMEZONE，yyyy-MM-DD表示年月日，T出现在字符串中，表示time元素的开头，HH:mm:ss表示时分秒，TIMEZONE表示时区（+08:00表示东八区时间，领先UTC8小时，即北京时间）。例如：2015-05-20T13:29:35+08:00表示，北京时间2015年5月20日 13点29分35秒。 */
    time_expire?: string;
    /** 附加数据，在查询API和支付通知中原样返回，可作为自定义参数使用，实际情况下只有支付完成状态才会返回该字段。 */
    attach?: string;
    /** 异步接收微信支付结果通知的回调地址，通知url必须为外网可访问的url，不能携带参数。 公网域名必须为https，如果是走专线接入，使用专线NAT IP或者私有回调域名可使用http */
    notify_url: string;
    /** 订单优惠标记 */
    goods_tag?: string;
    /** 电子发票入口开放标识,传入true时，支付成功消息和支付详情页将出现开票入口。需要在微信支付商户平台或微信公众平台开通电子发票功能，传此字段才可生效。 */
    support_fapiao?: boolean;
    /** 订单金额信息 */
    amount: OrderParamsAmount;
    /** 支付者 */
    payer?: any;
    /** 优惠功能 */
    detail?: OrderParamsDetail;
    /** 支付场景描述 */
    scene_info?: OrderParamsSceneInfo;
    /** 结算信息 */
    settle_info?: OrderParamsSettleInfo;
}
interface OrderParamsAmount {
    /** 总金额,单位为分 */
    total?: number;
    /** 货币类型,默认CNY，境内商户号仅支持人名币 */
    currency?: string;
}
interface OrderParamsDetail {
    /** 商品小票ID */
    invoice_id?: string;
    /** 订单原价 */
    cost_price?: number;
    /** 商品列表 */
    goods_detail?: OrderParamsDetailGoodsDetail[];
}
interface OrderParamsDetailGoodsDetail {
    /** 商品编码 */
    merchant_goods_id: string;
    /** 微信侧商品编码 */
    wechatpay_goods_id?: string;
    /** 商品名称 */
    goods_name: string;
    /** 商品数量 */
    quantity: number;
    /** 商品单价，单位为分 */
    unit_price: number;
}
interface OrderParamsSceneInfo {
    /** 商户端设备号 */
    device_id?: string;
    /** 用户终端ip */
    payer_client_ip: string;
    /** 商户门店信息 */
    store_info: OrderParamsSceneInfoStoreInfo;
}
interface OrderParamsSceneInfoStoreInfo {
    /** 门店编号 */
    id: string;
    /** 门店名称 */
    name?: string;
    /** 门店行政区划码 */
    area_code?: string;
    /** 门店详细地址 */
    address?: string;
}
interface OrderParamsSettleInfo {
    /** 是否指定分账 */
    profit_sharing?: boolean;
}
/**
 * appid && mchid
 */
interface BusinessToken {
    /** 应用ID */
    appid: string;
    /** 直连商户号 */
    mchid: string;
}
/**
 * sp_appid && sp_mchid
 */
interface ProviderToken {
    sp_appid: string;
    sp_mchid: string;
}
/**
 * sub_mchid && [sub_appid]
 */
interface SubToken {
    sub_appid?: string;
    sub_mchid: string;
}
interface BusinessPayerToken {
    openid: string;
}
interface ProviderPayerToken {
    sp_openid?: string;
    sub_openid?: string;
}
interface JSAPIOder_Business extends BaseOrderParams, BusinessToken {
    payer: BusinessPayerToken;
}
interface JSAPIOder_Provider extends BaseOrderParams, ProviderToken, SubToken {
    payer: ProviderPayerToken;
}
interface AppOrder_Business extends Omit<BaseOrderParams, 'payer'>, BusinessToken {
}
interface AppOrder_Provider extends Omit<BaseOrderParams, 'payer'>, ProviderToken, SubToken {
}
interface H5Order_Business extends Omit<BaseOrderParams, 'payer'>, BusinessToken {
}
interface H5Order_Provider extends Omit<BaseOrderParams, 'payer'>, ProviderToken, SubToken {
}
interface NativeOrder_Business extends Omit<BaseOrderParams, 'payer'>, BusinessToken {
}
interface NativeOrder_Provider extends Omit<BaseOrderParams, 'payer'>, ProviderToken, SubToken {
}
type OrderResult = {
    prepay_id: string;
} | {
    h5_url: string;
} | {
    code_url: string;
};
interface BaseQueryOrderWithTid {
    /** 微信支付订单号 */
    transaction_id: string;
}
interface JSAPI_QueryOrder_tid_Business extends BaseQueryOrderWithTid {
    mchid: string;
}
interface JSAPI_QueryOrder_tid_Provider extends BaseQueryOrderWithTid {
    sp_mchid: string;
    sub_mchid: string;
}
interface BaseQueryOrderWithOutTradeNo {
    /** 商户订单号 */
    out_trade_no: string;
}
interface JSAPI_QueryOrder_outTradeNo_Business extends BaseQueryOrderWithOutTradeNo {
    mchid: string;
}
interface JSAPI_QueryOrder_outTradeNo_Provider extends BaseQueryOrderWithOutTradeNo {
    sp_mchid: string;
    sub_mchid: string;
}
interface BaseQueryOrderResult {
    /** 商户订单号 */
    out_trade_no: string;
    /** 微信支付订单号 */
    transaction_id: string;
    /** 交易类型 */
    trade_type: TradeTypeEnum;
    /** 交易状态 */
    trade_state: TradeStateEnum;
    /** 交易状态描述 */
    trade_state_desc: string;
    /** 付款银行 */
    bank_type: string;
    /** 附加数据 */
    attach: string;
    /** 支付完成时间 */
    success_time: string;
    /** 支付者信息 */
    payer?: any;
    /** 订单金额信息 */
    amount?: QueryOrderAmount;
    /** 支付场景描述 */
    scene_info?: {
        /** 商户端设备号 */
        device_id: string;
    };
    /** 优惠功能 */
    promotion_detail?: QueryOrderPromotionDetail[];
}
declare enum TradeTypeEnum {
    /** 公众号支付 */
    JSAPI = "JSAPI",
    /** 扫码支付 */
    NATIVE = "NATIVE",
    /** APP支付 */
    APP = "APP",
    /** 付款码支付 */
    MICROPAY = "MICROPAY",
    /** H5支付 */
    MWEB = "MWEB",
    /** 刷脸支付 */
    FACEPAY = "FACEPAY"
}
declare enum TradeStateEnum {
    /** 支付成功 */
    SUCCESS = "SUCCESS",
    /** 转入退款 */
    REFUND = "REFUND",
    /** 未支付 */
    NOTPAY = "NOTPAY",
    /** 已关闭 */
    CLOSED = "CLOSED",
    /** 已撤销（仅付款码支付会返回） */
    REVOKED = "REVOKED",
    /** 用户支付中（仅付款码支付会返回） */
    USERPAYING = "USERPAYING",
    /** 支付失败（仅付款码支付会返回） */
    PAYERROR = "PAYERROR"
}
interface QueryOrderAmount {
    /** 订单金额 */
    total: number;
    /** 用户支付金额 */
    payer_total: number;
    /** 用户支付币种 */
    payer_currency: string;
    /** 货币类型 */
    currency: string;
}
interface QueryOrderPromotionDetail {
    /** 券ID */
    coupon_id: string;
    /** 优惠名称 */
    name?: string;
    /** 优惠范围 */
    scope?: 'GLOBAL' | 'SINGLE';
    /** 优惠类型 */
    type?: 'CASH' | 'NOCASH';
    /** 优惠券面额 */
    amount: number;
    /** 活动id */
    stock_id?: string;
    /** 微信出资 */
    wechatpay_contribute?: number;
    /** 商户出资 */
    merchant_contribute?: number;
    /** 其他出资 */
    other_contribute?: number;
    /** 优惠币种 */
    currency?: string;
    /** 单品列表 */
    goods_detail?: QueryOrderGoodsDetail[];
}
interface QueryOrderGoodsDetail {
    /** 商品编码 */
    goods_id: string;
    /** 商品数量 */
    quantity: number;
    /** 商品单价 */
    unit_price: number;
    /** 商品优惠金额 */
    discount_amount: number;
    /** 商品备注 */
    goods_remark?: string;
}
interface QueryOrderResult_Business extends BaseQueryOrderResult, BusinessToken {
}
interface QueryOrderResult_Provider extends BaseQueryOrderResult, ProviderToken, SubToken {
}
interface ReqPaymentParams {
    /** appid,若下单时候传了sub_appid,须为sub_appid的值 */
    appId: string;
    /** 预支付订单号,下单接口返回 */
    prepay_id: string;
}
interface AppReqPaymentParams extends ReqPaymentParams {
    /** 商户号,若下单时候传了sub_mchid,须为sub_mchid的值 */
    partnerId: string;
}
interface GoodsDetail {
    /** 商户侧商品编码 */
    merchant_goods_id: string;
    /** 微信侧商品编码 */
    wechatpay_goods_id?: string;
    /** 商品名称 */
    goods_name?: string;
    /** 商品单价 */
    unit_price: number;
    /** 商品退款金额 */
    refund_amount: number;
    /** 商品退款数量 */
    refund_quantity: number;
}
interface RefundAmount {
    /** 订单总金额，单位为分 */
    total: number;
    /** 订单退款金额，单位为分 */
    refund: number;
    /** 货币类型，符合ISO4217标准的三位字母代码，默认人民币：CNY */
    currency: string;
}
interface Refund_Business {
    /** 微信支付订单号 */
    transaction_id?: string;
    /** 商户订单号 */
    out_trade_no?: string;
    /** 商户退款单号 */
    out_refund_no: string;
    /** 退款原因 */
    reason?: string;
    /** 退款结果通知url */
    notify_url?: string;
    /** 资金账户 */
    funds_account?: string;
    /** 退款金额信息 */
    amount: RefundAmount;
    /** 单品列表信息，微信支付后台会根据此参数控制向用户展示商品详情 */
    goods_detail?: GoodsDetail[];
}
interface Refund_Provider extends Refund_Business {
    /** 子商户号，服务商模式下必填 */
    sub_mchid: string;
}
interface RefundResult {
    /** 微信支付退款单号 */
    refund_id: string;
    /** 商户退款单号 */
    out_refund_no: string;
    /** 微信支付订单号 */
    transaction_id: string;
    /** 商户订单号 */
    out_trade_no: string;
    /** 退款渠道 */
    channel: ResultRefundChannelEnum;
    /** 退款入账账户 */
    user_received_account: string;
    /** 退款成功时间 */
    success_time?: string;
    /** 退款创建时间 */
    create_time: string;
    /** 退款状态 */
    status: ResultRefundStatusEnum;
    /** 资金账户 */
    funds_account?: ResultFundsAccountEnum;
    /** 金额信息 */
    amount: ResultRefundAmount;
    /** 优惠退款信息 */
    promotion_detail: any;
}
declare enum ResultRefundStatusEnum {
    /** 退款成功 */
    SUCCESS = "SUCCESS",
    /** 退款关闭 */
    CLOSED = "CLOSED",
    /** 退款处理中 */
    PROCESSING = "PROCESSING",
    /** 退款异常 */
    ABNORMAL = "ABNORMAL"
}
declare enum ResultRefundChannelEnum {
    /** 原路退款 */
    ORIGINAL = "ORIGINAL",
    /** 退回到余额 */
    BALANCE = "BALANCE",
    /** 原账户异常退到其他余额账户 */
    OTHER_BALANCE = "OTHER_BALANCE",
    /** 原银行卡异常退到其他银行卡 */
    OTHER_BANKCARD = "OTHER_BANKCARD"
}
declare enum ResultFundsAccountEnum {
    /** 未结算资金 */
    UNSETTLED = "UNSETTLED",
    /** 可用余额 */
    AVAILABLE = "AVAILABLE",
    /** 不可用余额 */
    UNAVAILABLE = "UNAVAILABLE",
    /** 运营户 */
    OPERATION = "OPERATION",
    /** 基本账户（含可用余额和不可用余额） */
    BASIC = "BASIC"
}
interface ResultRefundAmount {
    /** 订单总金额，单位为分 */
    total: number;
    /** 退款标价金额，单位为分，可以做部分退款 */
    refund: number;
    /** 退款出资的账户类型及金额信息 */
    from?: {
        /** 资金账户类型 */
        account: 'AVAILABLE' | 'UNAVAILABLE';
        /** 退款金额 */
        amount: number;
    }[];
    /** 现金支付金额，单位为分，只能为整数 */
    payer_total: number;
    /** 退款给用户的金额，不包含所有优惠券金额 */
    payer_refund: number;
    /** 去掉非充值代金券退款金额后的退款金额，单位为分，退款金额=申请退款金额-非充值代金券退款金额，退款金额<=申请退款金额 */
    settlement_refund: number;
    /** 应结订单金额=订单金额-免充值代金券金额，应结订单金额<=订单金额，单位为分 */
    settlement_total: number;
    /** 优惠退款金额<=退款金额，退款金额-代金券或立减优惠退款金额为现金，说明详见代金券或立减优惠，单位为分 */
    discount_refund: number;
    /** 退款币种 */
    currency: string;
    /** 手续费退款金额，单位为分 */
    refund_fee?: number;
}
interface ResultPromotionDetail {
    /** 券或者立减优惠id */
    promotion_id: string;
    /** 枚举值：GLOBAL：全场代金券 SINGLE：单品优惠 */
    scope: 'GLOBAL' | 'SINGLE';
    /** 枚举值： COUPON：代金券，需要走结算资金的充值型代金券 DISCOUNT：优惠券，不走结算资金的免充值型优惠券 */
    type: 'COUPON' | 'DISCOUNT';
    /** 用户享受优惠的金额（优惠券面额=微信出资金额+商家出资金额+其他出资方金额 ），单位为分 */
    amount: number;
    /** 优惠退款金额<=退款金额，退款金额-代金券或立减优惠退款金额为用户支付的现金，说明详见代金券或立减优惠，单位为分 */
    refund_amount: number;
    /** 商品列表 */
    goods_detail?: GoodsDetail[];
}
interface TradeBillParams {
    bill_date: string;
    sub_mchid?: string;
    /**
     * ALL：返回当日所有订单信息（不含充值退款订单）
     * SUCCESS：返回当日成功支付的订单（不含充值退款订单）
     * REFUND：返回当日退款订单（不含充值退款订单）
     */
    bill_type?: 'ALL' | 'SUCCESS' | 'REFUND';
    tar_type?: 'GZIP';
}
interface BillResult {
    download_url: string;
    hash_type: 'SHA1';
    hash_value: string;
}
interface FundflowBillParams {
    /** 账单日期，最长支持拉取最近三个月的账单 */
    bill_date: string;
    /** 资金账户类型，BASIC，基本账户，OPERATION，运营账户，FEES，手续费账户 */
    account_type?: 'BASIC' | 'OPERATION' | 'FEES';
    /** 压缩账单,默认数据流 */
    tar_type?: 'GZIP';
}
interface SubMerchantFundflowBillParams {
    /** 账单日期，最长支持拉取最近三个月的账单 */
    bill_date: string;
    /** 资金账户类型，BASIC，基本账户，OPERATION，运营账户，FEES，手续费账户 */
    account_type?: 'BASIC' | 'OPERATION' | 'FEES';
    /** 压缩账单,默认数据流 */
    tar_type?: 'GZIP';
    /** 加密算法 */
    algorithm?: 'AEAD_AES_256_GCM' | 'SM4_GCM';
    /** 子商户号 */
    sub_mchid: string;
}
interface SubMerchantFundflowBillResult {
    download_bill_count: number;
    download_bill_list: {
        /** 账单文件序号 */
        bill_sequence: number;
        /** 下载地址30s内有效 */
        download_url: string;
        /** 加密密钥,加密账单文件使用的加密密钥。密钥用商户证书的公钥进行加密，然后进行Base64编码 */
        encrypt_key: string;
        /** 哈希类型 */
        hash_type: 'SHA1';
        /** 哈希值 */
        hash_value: string;
        /** 随机字符串 */
        nonce: string;
    }[];
}

/**
 * 基础支付
 * 默认以JSAPI接口构成,其他接口可继承此类进行扩展。
 * 除开下单接口,其余接口基本一致
 */
declare class BasePay {
    base: WechatPayV3Base;
    constructor(base: WechatPayV3Base);
    protected _order<T = OrderResult>(data: any): Promise<T>;
    /** 下单-直连商户 */
    order(data: JSAPIOder_Business): Promise<OrderResult>;
    /** 下单-服务商 */
    orderOnProvider(data: JSAPIOder_Provider): Promise<OrderResult>;
    protected _transactionIdQueryOrder<T = any>(data: any): Promise<T>;
    /**
     * 查询订单-通过微信订单号
     */
    transactionIdQueryOrder(data: JSAPI_QueryOrder_tid_Business): Promise<QueryOrderResult_Business>;
    /**
     * 查询订单-服务商-通过微信订单号
     */
    transactionIdQueryOrderOnProvider(data: JSAPI_QueryOrder_tid_Provider): Promise<QueryOrderResult_Provider>;
    _outTradeNoQueryOrder<T = any>(data: any): Promise<T>;
    /**
     * 查询订单-通过商户订单号
     */
    outTradeNoQueryOrder(data: JSAPI_QueryOrder_outTradeNo_Business): Promise<QueryOrderResult_Business>;
    /**
     * 查询订单-服务商-通过商户订单号
     */
    outTradeNoQueryOrderOnProvider(data: JSAPI_QueryOrder_outTradeNo_Provider): Promise<QueryOrderResult_Provider>;
    protected _closeOrder(data: any): Promise<number>;
    /**
     * 关闭订单-直连商户
     * @returns status 如果为204,则关闭成功
     */
    closeOrder(data: JSAPI_QueryOrder_outTradeNo_Business): Promise<number>;
    /**
     * 关闭订单-服务商
     * @returns status 如果为204,则关闭成功
     */
    closeOrderOnProvider(data: JSAPI_QueryOrder_outTradeNo_Provider): Promise<number>;
    protected _refund<T = any>(data: any): Promise<T>;
    /**
     * 退款-直连商户
     */
    refund(data: Refund_Business): Promise<RefundResult>;
    /**
     * 退款-服务商
     */
    refundOnProvider(data: Refund_Provider): Promise<RefundResult>;
    protected _queryRefund<T = any>(data: any): Promise<T>;
    /**
     * 查询退款-直连商户
     */
    queryRefund(data: {
        out_refund_no: string;
    }): Promise<RefundResult>;
    /**
     * 查询退款-服务商
     */
    queryRefundOnProvider(data: {
        out_refund_no: string;
        sub_mchid: string;
    }): Promise<RefundResult>;
    protected _applyTradeBill(data: any): Promise<BillResult>;
    /**
     * 申请交易账单-直连商户
     */
    applyTradeBill(data: Omit<TradeBillParams, 'sub_mchid'>): Promise<BillResult>;
    /**
     * 申请交易账单-服务商
     */
    applyTradeBillOnProvider(data: TradeBillParams): Promise<BillResult>;
    protected _applyFundFlowBill(data: any): Promise<BillResult>;
    /**
     * 申请资金账单-直连商户
     */
    applyFundFlowBill(data: FundflowBillParams): Promise<BillResult>;
    /**
     * 申请资金账单-服务商
     */
    applyFundFlowBillOnProvider(data: FundflowBillParams): Promise<BillResult>;
    /**
     * 申请单个子商户资金账单 仅限服务商
     */
    applySubMerchantFundFlowBill(data: SubMerchantFundflowBillParams): Promise<SubMerchantFundflowBillResult>;
    /**
     * 下载账单(通用)
     */
    downloadBill(download_url: string): Promise<ArrayBuffer>;
}

declare class AppPay extends BasePay {
    constructor(base: WechatPayV3Base);
    private _exOrder;
    /**
     * App支付下单 直连
     */
    order(params: AppOrder_Business): Promise<{
        prepay_id: string;
    }>;
    /**
     * App支付下单 服务商
     */
    orderOnProvider(data: AppOrder_Provider): Promise<{
        prepay_id: string;
    }>;
    /**
     * 获取App调起支付参数
     * @param params
     * @returns
     */
    getPayParams(params: AppReqPaymentParams): {
        appId: string;
        partnerId: string;
        prepayId: string;
        package: string;
        nonceStr: string;
        timeStamp: string;
        sign: string;
    };
}

declare class JSPay extends BasePay {
    order(data: JSAPIOder_Business): Promise<{
        prepay_id: string;
    }>;
    orderOnProvider(data: JSAPIOder_Provider): Promise<{
        prepay_id: string;
    }>;
    /**
     * 获取调起支付参数
     * @param params
     * @returns
     */
    getPayParams(params: ReqPaymentParams): {
        appId: string;
        timeStamp: string;
        nonceStr: string;
        package: string;
        signType: string;
        paySign: string;
    };
}

declare class MiniProgramPay extends BasePay {
    order(data: JSAPIOder_Business): Promise<{
        prepay_id: string;
    }>;
    orderOnProvider(data: JSAPIOder_Provider): Promise<{
        prepay_id: string;
    }>;
    /**
     * 获取调起支付参数
     * @param params
     * @returns
     */
    getPayParams(params: ReqPaymentParams): {
        timeStamp: string;
        nonceStr: string;
        package: string;
        signType: string;
        paySign: string;
    };
}

declare class NativePay extends BasePay {
    constructor(base: WechatPayV3Base);
    private _exOrder;
    /**
     * Native支付下单 直连
     */
    order(params: NativeOrder_Business): Promise<{
        code_url: string;
    }>;
    /**
     * Native支付下单 服务商
     */
    orderOnProvider(data: NativeOrder_Provider): Promise<{
        code_url: string;
    }>;
}

declare class H5Pay extends BasePay {
    constructor(base: WechatPayV3Base);
    private _exOrder;
    /**
     * H5支付下单 直连
     */
    order(params: H5Order_Business): Promise<{
        h5_url: string;
    }>;
    /**
     * H5支付下单 服务商
     */
    orderOnProvider(data: H5Order_Provider): Promise<{
        h5_url: string;
    }>;
}

/**
 * 排除域名中Origin 例如:http://www.a.com/v3/2?a=2 结果为/v3/2?a=2
 * @param url
 * @returns
 */
declare function urlExclueOrigin(url: string): string;
/**
 * 返回当前时间戳
 * @returns
 */
declare function unixTimeStamp(): string;
/**
 * 随机字符串
 * @param length
 * @returns
 */
declare function randomStr(length?: number): string;
/**
 * 路径取文件名
 * @param path
 * @description 适应于windows和linux
 */
declare function path2FileName(path: string): string;
/**
 * 文件摘要
 * @param buffer
 * @description 对文件的二进制内容进行sha256计算得到的值
 */
declare function fileSha256(buffer: Buffer): string;
/**
 * 获取证书序列号
 * @param buf
 * @returns
 */
declare function getCertificateSerialNo(buf: Buffer): string;
/**
 * 获取证书公钥
 */
declare function getCertificatePublicKey(certString: string): KeyObject;
/**
 * 敏感信息加密
 * @param data 待加密数据
 */
declare function encrypt(data: string, key: KeyObject): string;
/**
 * 构造签名信息
 * @param mchid 商户号
 * @param serial_no 商户证书序列号
 * @param nonce_str 随机字符串
 * @param timestamp 时间戳
 * @param signature 签名(buildMessage生成)
 */
declare function getToken(mchid: string, serial_no: string, nonce_str: string, timestamp: string, signature: string): string;
declare function decryptToString_AES(options: {
    ciphertext: string;
    key: string;
    nonce: string;
    associated_data: string;
}): string;
declare function getPublicKey(certString: string): KeyObject;
declare function isUrl(url: string): boolean;
/**
 * 获取系统临时目录
 * @returns
 */
declare function getSysTmpDir(): string;
/**
 * 获取对象路径值
 * @example
 * const obj = {a: {b: {c: 1}},aa:{bb:{cc:{dd:2}}}}}}};
 * getPathValue(obj, 'a.b.c') // 1
 * getPathValue(obj, 'a.b.d') // undefined
 * getPathValue(obj, 'aa.bb.cc.dd') // 2
 */
declare function getPathValue<T>(obj: Record<string, any>, path: string): T;
/**
 * 设置对象路径值
 * @description
 * 1. 如果路径不存在则静默跳过, onSetFail() 会被调用
 * 2. 如果路径存在则设置值
 */
declare function setPathValue(obj: Record<string, any>, path: string, value: any, options?: {
    onSetFail?: (failPath: string) => void;
}): Record<string, any>;
/**
 * 通过标志位和对象替换字符串
 * @description 例如: ('http://www.baidu.com/{name}/{age}', {name: '张三', age: 18}) => http://www.baidu.com/张三/18
 * @param str
 * @param params 参数对象
 * @param beforeToken 默认为 {
 * @param afterToken 默认为 }
 * @returns
 */
declare function replaceTagText<T extends string>(str: T, params: Record<GetUrlParams<T>, string>, beforeToken?: string, afterToken?: string): string;
type GetUrlParams<T extends string, L extends string = '{', R extends string = '}'> = T extends `${infer _}${L}${infer P}${R}${infer R1}` ? P | GetUrlParams<R1, L, R> : never;

export { AppInfo, AppOrder_Business, AppOrder_Provider, AppPay, AppReqPaymentParams, Applyment, ApplymentState, BankAccountType, BaseOrderParams, BasePay, BaseQueryOrderResult, BaseQueryOrderWithOutTradeNo, BaseQueryOrderWithTid, BillResult, BizStoreInfo, BusinessPayerToken, BusinessToken, Certificate, CertificateType, Certificates, ContactIdType, ContactType, ContainerOptions, DecryptCertificates, EncryptCertificate, FinanceType, FundflowBillParams, GetCertificatesResult, GetUrlParams, GoodsDetail, H5Order_Business, H5Order_Provider, H5Pay, IdCardInfo, IdDocInfo, IdDocType, IdHolderType, JSAPIOder_Business, JSAPIOder_Provider, JSAPI_QueryOrder_outTradeNo_Business, JSAPI_QueryOrder_outTradeNo_Provider, JSAPI_QueryOrder_tid_Business, JSAPI_QueryOrder_tid_Provider, JSPay, MiniProgramInfo, MiniProgramPay, ModifySettlementAccountBody, MpInfo, NativeOrder_Business, NativeOrder_Provider, NativePay, OrderParamsAmount, OrderParamsDetail, OrderParamsDetailGoodsDetail, OrderParamsSceneInfo, OrderParamsSceneInfoStoreInfo, OrderParamsSettleInfo, OrderResult, ProviderPayerToken, ProviderToken, QueryApplymentStateResult, QueryOrderAmount, QueryOrderGoodsDetail, QueryOrderPromotionDetail, QueryOrderResult_Business, QueryOrderResult_Provider, QuerySettlementAccountResult, RefundAmount, RefundResult, Refund_Business, Refund_Provider, ReqPaymentParams, ResultFundsAccountEnum, ResultPromotionDetail, ResultRefundAmount, ResultRefundChannelEnum, ResultRefundStatusEnum, SalesScenesType, SubMerchantFundflowBillParams, SubMerchantFundflowBillResult, SubToken, SubjectType, SubmitApplicationAdditionInfo, SubmitApplicationBankAccountInfo, SubmitApplicationBody, SubmitApplicationBusinessInfo, SubmitApplicationBusinessLicenseInfo, SubmitApplicationCertificateInfo, SubmitApplicationContactInfo, SubmitApplicationFinanceInstitutionInfo, SubmitApplicationIdentityInfo, SubmitApplicationSettlementInfo, SubmitApplicationSubjectInfo, SubmitApplicationUboInfo, SubmitApplicationsResult, TradeBillParams, TradeStateEnum, TradeTypeEnum, UploadImageResult, WebInfo, WechatBaseEventOPtions, WechatBaseOptions, WechatPayV3Base, WeworkInfo, apiContainer, decryptToString_AES, encrypt, fileSha256, getCertificatePublicKey, getCertificateSerialNo, getInstances, getPathValue, getPublicKey, getSysTmpDir, getToken, isUrl, path2FileName, randomStr, replaceTagText, setPathValue, unixTimeStamp, urlExclueOrigin };
