package com.njzscloud.supervisory.order.service;

import com.njzscloud.supervisory.order.pojo.dto.*;

/**
 * 微信支付服务接口
 */
public interface WechatPayService {
    
    /**
     * 小程序支付下单
     * @param orderDto 下单请求参数
     * @return 支付参数
     */
    WechatPayJsapiOrderResponseDto createMiniProgramOrder(WechatPayJsapiOrderDto orderDto);
    
    /**
     * JSAPI支付下单
     * @param orderDto 下单请求参数
     * @return 支付参数
     */
    WechatPayJsapiOrderResponseDto createJsapiOrder(WechatPayJsapiOrderDto orderDto);
    
    /**
     * 查询订单状态
     * @param outTradeNo 商户订单号
     * @return 订单信息
     */
    WechatPayOrderQueryResponseDto queryOrder(String outTradeNo);
    
    /**
     * 关闭订单
     * @param outTradeNo 商户订单号
     * @return 是否成功
     */
    boolean closeOrder(String outTradeNo);
    
    /**
     * 申请退款
     * @param refundDto 退款请求参数
     * @return 退款结果
     */
    WechatPayRefundResponseDto refund(WechatPayRefundDto refundDto);
    
    /**
     * 查询退款状态
     * @param outRefundNo 商户退款单号
     * @return 退款信息
     */
    WechatPayRefundResponseDto queryRefund(String outRefundNo);
    
    /**
     * 处理支付回调通知
     * @param callbackDto 回调数据
     * @return 处理结果
     */
    String handlePaymentCallback(WechatPayCallbackDto callbackDto);
    
    /**
     * 处理退款回调通知
     * @param callbackDto 回调数据
     * @return 处理结果
     */
    String handleRefundCallback(WechatPayRefundCallbackDto callbackDto);
    
    /**
     * 验证回调签名
     * @param timestamp 时间戳
     * @param nonce 随机字符串
     * @param body 请求体
     * @param signature 签名
     * @return 是否验证通过
     */
    boolean verifyCallback(String timestamp, String nonce, String body, String signature);
}
