package shop.alien.entity.store.dto;

import com.fasterxml.jackson.annotation.JsonAlias;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;
import java.util.Map;

/**
 * 支付宝直付通 / 二级商户进件类接口统一请求体。
 * <p>
 * {@code bizContent} 需与官方接口的 {@code biz_content} 一致，字段以
 * <a href="https://opendocs.alipay.com/solution/0dec7x">支付宝方案文档</a> 为准。
 * <p>
 * 公共参数中 {@code format}、{@code charset}、{@code sign_type}、签名、时间戳等由 SDK 自动处理。
 * {@link #appId} 可显式传入；不传则使用门店支付配置中的应用 ID。第三方代调用时可传 {@link #appAuthToken}。
 */
@Data
@ApiModel("支付宝直付通 biz_content 请求")
public class AlipayZftBizRequestDto implements Serializable {

    private static final long serialVersionUID = 1L;

    @ApiModelProperty(value = "门店ID（用于选取该门店已配置的支付宝应用与证书）", required = true)
    private Integer storeId;

    @ApiModelProperty("异步通知地址，进件类接口按文档选填")
    private String notifyUrl;

    @ApiModelProperty("支付宝应用 app_id；不传则使用门店 store_payment_config.app_id（须与证书同属该应用）")
    @JsonProperty("app_id")
    @JsonAlias("appId")
    private String appId;

    @ApiModelProperty("应用授权令牌 app_auth_token（第三方代调用时选填，见开放平台应用授权）")
    @JsonProperty("app_auth_token")
    @JsonAlias("appAuthToken")
    private String appAuthToken;

    @ApiModelProperty("接口版本 api_version，一般无需传；需覆盖 SDK 默认时填写，如 1.0")
    @JsonProperty("api_version")
    @JsonAlias("apiVersion")
    private String apiVersion;

    @ApiModelProperty(value = "对应支付宝接口的 biz_content（JSON 对象）；不传或为空时按 {} 提交")
    private Map<String, Object> bizContent;
}
