package cn.pluss.platform.pay;


import cn.pluss.platform.dto.MemberScanPayDTO;
import cn.pluss.platform.dto.MerChantOrderDTO;
import cn.pluss.platform.entity.*;
import com.alibaba.fastjson.JSONObject;

import java.util.Map;

/**
 * 交易接口
 */
public interface PayService {


    /**
     * 统一被扫下单数据接口
     * @return
     */
    JSONObject tradePay(MerchantOrder order,MerchantChannelStatus channel,MerchantBaseInfo merchant);

    /**
     * 统一主扫下单数据接口
     * @param merchantOrderDTO
     * @param order
     * @param
     * @return
     */
    JSONObject tradePay(MerChantOrderDTO merchantOrderDTO, MerchantOrder order);

    /**
     * 统一退款数据接口
     * @param order
     * @return
     */
    Map<String,Object> refundPay(MerchantOrder order,String mchNo);

    /**
     * 统一交易订单查询接口
     * @param
     * @return
     */
    JSONObject tradeQuery(MerchantOrder order,String mchId);

    /**
     * 统一退款订单查询接口
     * @param refundOrder
     * @param
     * @return
     */
    JSONObject refundQuery(MerchantRefundOrder refundOrder);


    /**
     * 撤单接口通用
     * @param
     * @param
     * @return
     */
    Map<String,Object> closeOrder(String orderNumber,String channelNo);

    /**
     * 通用辅助接口 获取微信用户openId
     * @param memberScanPayDTO
     * @return
     */
    Map<String,Object> getWxOpenId(MemberScanPayDTO memberScanPayDTO,MerchantChannelStatus channel) throws Exception;


    /**
     * 通用辅助接口 获取银联用户标识
     * @param userAuthCode
     * @param paymentApp
     * @param merchantId
     * @return
     */
    Map<String,Object> getUnionInfo(String userAuthCode,String paymentApp,String merchantId) throws Exception;



//    /**
//     * 通用转账接口
//     * @param transfer
//     * @return
//     */
//    Map<String,Object> orgTransfer(MerchantTransfer transfer) throws Exception;

    /**
     * @description:支付异步回调
     * @date: 2021/8/23 9:57
     * @param params:
     * @return java.lang.Object
     */
    Object payNotifyCallBack(Map<String,String> params);


    /**
     * @description:银盛wap支付
     * @date: 2021/11/26 18:21
     * @param order:
     * @param channel:
     * @return java.lang.String
     */
    String tradePayWap(MerchantOrder order, MerchantChannelStatus channel);


    /**
     * 获取对账文件地址
     * @param reqData
     * @return
     */
    JSONObject getUnionAccountUrl(JSONObject reqData);

    /**
     * 缴费通支付
     * @param order
     * @param jftMerc
     * @param jftChannel
     * @return
     */
    JSONObject jftPay(JftReceiptOrder order, JftMercBaseInfo jftMerc, JftMercPaymentChannel jftChannel);
}
