package com.xhpc.payment.service;

import com.alipay.api.AlipayApiException;
import com.xhpc.common.core.web.domain.AjaxResult;

import java.io.IOException;
import java.math.BigDecimal;
import java.util.Map;

public interface AlipayInterface {


    /**
     * 获取支付宝签名
     * @param subject
     * @param timeoutExpress
     * @param notifyUrl
     * @param orderId
     * @param actualPay
     * @return
     */
    public String getSign(String subject,String timeoutExpress,String notifyUrl,String orderId,String actualPay)throws AlipayApiException;

    /**
     * 验证接受的数据是否为支付宝合法数据
     */
    public boolean reaCert(Map<String, String> params)throws AlipayApiException;

    /**
     * 验证返回信息是否正确 正常 返回true 异常返回false
     */
    //public boolean verific(AlipayLog log,Integer type);

    /**
     * 支付宝分账关系绑定接口
     * @param account 分账方账号 （登陆账号 或 用户号）
     * @param type 分账类型  （分账方类型。userId：表示是支付宝账号对应的支付宝唯一用户号；loginName：表示是支付宝登录号 ）
     * @param name 分账方全称
     * @param outRequestNo 外部请求号。32个字符以内，可包含字母、数字、下划线。需保证在商户端不重复。
     * @throws AlipayApiException
     */
    public AjaxResult bindPaypal(String account,String type,String name,String outRequestNo) throws AlipayApiException;

    /**
     * 支付宝分账关系解绑接口
     * @param account 分账方账号 （登陆账号 或 用户号）
     * @param type 分账类型  （分账方类型。userId：表示是支付宝账号对应的支付宝唯一用户号；loginName：表示是支付宝登录号 ）
     * @param name 分账方全称
     * @param outRequestNo 外部请求号。32个字符以内，可包含字母、数字、下划线。需保证在商户端不重复。
     * @throws AlipayApiException
     */
    public AjaxResult unBindPaypal(String account,String type,String name,String outRequestNo) throws AlipayApiException;


    /**
     * 支付宝分账关系查询
     * @param pageNum 几页，起始页为 1。不填默认为 1。
     * @param pageSize 页面大小。每页记录数，取值范围是(0,100]。不填默认为20
     * @param outRequestNo 外部请求号。32个字符以内，可包含字母、数字、下划线。需保证在商户端不重复。
     * @throws AlipayApiException
     */
    public AjaxResult batchquery(Integer pageNum, Integer pageSize, String outRequestNo) throws AlipayApiException;
    /**
     * 支付宝分账接口
     * @param outRequestNo 外部请求号。32个字符以内，可包含字母、数字、下划线。需保证在商户端不重复。
     * @param tradeNo 支付宝订单号
     * @param transIn 收入方账户。如果收入方账户类型为userId，本参数为收入方的支付宝账号对应的支付宝唯一用户号，以2088开头的纯16位数字；如果收入方类型为cardAliasNo，本参数为收入方在支付宝绑定的卡编号；如果收入方类型为loginName，本参数为收入方的支付宝登录号；
     * @throws AlipayApiException
     * @param amount 分账金额
     */
    public boolean settlePaypal(String outRequestNo, String tradeNo, String transIn, BigDecimal amount) throws AlipayApiException;

    /**
     * 支付宝统一收单线下交易查询
     * @param outTradeNo 订单支付时传入的商户订单号,和支付宝交易号不能同时为空。trade_no,out_trade_no如果同时存在优先取trade_no
     * @param tradeNo 支付宝交易号，和商户订单号不能同时为空
     */
    public AjaxResult query(String outTradeNo, String tradeNo) throws AlipayApiException;

    /**
     * 统一收单交易退款接口
     * @param outTradeNo 订单支付时传入的商户订单号,和支付宝交易号不能同时为空。trade_no,out_trade_no如果同时存在优先取trade_no
     * @param tradeNo 支付宝交易号，和商户订单号不能同时为空
     * @param refundAmount 金额
     * @param transInType 收入方账户类型。userId表示是支付宝账号对应的支付宝唯一用户号;cardAliasNo表示是卡编号;loginName表示是支付宝登录号；
     * @param transIn 收入方账户。如果收入方账户类型为userId，本参数为收入方的支付宝账号对应的支付宝唯一用户号，以2088开头的纯16位数字；如果收入方类型为cardAliasNo，本参数为收入方在支付宝绑定的卡编号；如果收入方类型为loginName，本参数为收入方的支付宝登录号；
     * @param desc 备注
     */
    public AjaxResult refund(String outTradeNo, String tradeNo,BigDecimal refundAmount,String transInType,String transIn,String desc) throws AlipayApiException;


    /**
     * 统一收单交易退款查询
     * @param outTradeNo 订单支付时传入的商户订单号,和支付宝交易号不能同时为空。trade_no,out_trade_no如果同时存在优先取trade_no
     * @param tradeNo 支付宝交易号，和商户订单号不能同时为空
     * @param refundAmount 金额
     * @param transInType 收入方账户类型。userId表示是支付宝账号对应的支付宝唯一用户号;cardAliasNo表示是卡编号;loginName表示是支付宝登录号；
     * @param transIn 收入方账户。如果收入方账户类型为userId，本参数为收入方的支付宝账号对应的支付宝唯一用户号，以2088开头的纯16位数字；如果收入方类型为cardAliasNo，本参数为收入方在支付宝绑定的卡编号；如果收入方类型为loginName，本参数为收入方的支付宝登录号；
     * @param desc 备注
     */
    public AjaxResult refundQuery(String outTradeNo, String tradeNo,BigDecimal refundAmount,String transInType,String transIn,String desc) throws AlipayApiException;




    /**
     * 支付宝转账接口
     * @param outBizNo 商户端的唯一订单号，对于同一笔转账请求，商户需保证该订单号唯一。
     * @param transAmount 订单总金额，单位为元，精确到小数点后两位，
     * @param orderTitle  转账业务的标题，用于在支付宝用户的账单里显示
     * @param identity  参与方的唯一标识
     * @param name 参与方真实姓名，如果非空，将校验收款支付宝账号姓名一致性。当identity_type=ALIPAY_LOGON_ID时，本字段必填。
     * @throws AlipayApiException
     */
    public boolean transfer(String outBizNo,BigDecimal transAmount,String orderTitle,String identity,String name  ) throws AlipayApiException;

    /**
     * 支付宝扫码支付接口 --web
     *@param outTradeNo 商户订单号
     *@param totalAmount 订单金额
     *@param subject 订单标题
     *@param sellerId 卖家支付宝用户ID
     * @throws AlipayApiException
     * @throws IOException
     */
    public String Precreate(String outTradeNo,BigDecimal totalAmount,String subject,String sellerId) throws AlipayApiException, IOException;
}
