package cn.superdesk.uniorder.openapicall.thirdpart.szhtxx.paperInvoice.dto.request;

import cn.hutool.core.codec.Base64;
import cn.hutool.core.util.StrUtil;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;

import java.io.Serializable;
import java.io.UnsupportedEncodingException;

/**
 * @Description: BaseRequest
 * @Author: linjinyu
 * @CreateDate: 2021/12/23 下午6:01
 * @UpdateUser: linjinyu
 * @UpdateDate: 2021/12/23 下午6:01
 * @UpdateRemark: 修改内容
 * @Version: 1.0
 */
@NoArgsConstructor
@AllArgsConstructor
@SuperBuilder(toBuilder = true)
@Data
public class _SzhtxxPaperInvoiceBaseRequest implements Serializable {

    @ApiModelProperty("batchId")
    protected String batchId;

    @ApiModelProperty("fpqqlsh invoiceApplySn 发票请求唯一流水号")
    protected String fpqqlsh;

    @ApiModelProperty("SID 为服务ID")
    @JsonProperty("SID")
    protected String SID;

    //    请求的报文为 json 结构，返回报文统一封装成 {“ENCMSG”:“编码串”}。“编码串”中内容为 Base64 编码后的内容，此内容 base64 解码后至少包含{“retcode”: “X”, “retmsg”:“XXX”}
    @ApiModelProperty("SIDParam 为报文体")
    @JsonProperty("SIDParam")
    protected String SIDParam;


//注意：为了避免非法字符问题，报文的封装方式为：将 JSON 明文用 BASE64
//编码，且编码的字符集为 GBK，最外层传输使用的编码后的 BASE64 报文需要
//将“+”替换成“_”,以避免因为“+”造成报文进行 URL 传输时异常(内层如果
//还有嵌套 base64 编码的，请不要替换“+”成“_”)。控制台接口服务的回复报
//文也同样按照以上的要求来进行编码、替换加号 “+” 为输入法半角下的下滑
//线 “_” 。

    protected String base64EncodeAndReplace(String input) throws UnsupportedEncodingException {

        byte[] buf = input.getBytes("GBK");
        return StrUtil.replaceChars(Base64.encode(buf), "+", "_");

    }

    protected String base64Encode(String input) throws UnsupportedEncodingException {

        byte[] buf = input.getBytes("GBK");
        return Base64.encode(buf);

    }


}
