package com.haha.service.payment;

import com.haha.common.enums.PaymentChannel;
import java.util.Map;

/**
 * 支付策略接口
 * 所有支付渠道必须实现此接口
 */
public interface PaymentStrategy {
    
    /**
     * 获取当前策略对应的支付渠道
     * @return 支付渠道
     */
    PaymentChannel getChannel();
    
    /**
     * 创建支付（统一下单）
     * @param request 支付请求
     * @return 支付结果
     */
    PaymentResult createPayment(PaymentRequest request);
    
    /**
     * 申请退款
     * @param request 退款请求
     * @return 退款结果
     */
    RefundResult refund(RefundRequest request);
    
    /**
     * 解析支付回调通知
     * @param params 回调参数
     * @return 回调解析结果
     */
    PaymentCallbackResult parseCallback(Map<String, Object> params);
    
    /**
     * 验证回调签名
     * @param params 回调参数
     * @return 签名是否有效
     */
    boolean verifyCallback(Map<String, Object> params);
    
    /**
     * 查询支付订单状态
     * @param outTradeNo 商户订单号
     * @return 支付结果
     */
    PaymentResult queryPayment(String outTradeNo);
}
