package com.jsowell.wxpay.response;

import lombok.Data;

import java.util.List;

@Data
public class WechatPayNotifyResource {

	/**
	 * 商户号
	 */
	private String mchid;

	/**
	 * 应用ID
	 */
	private String appid;

	/**
	 * 商户订单号  商户系统内部订单号，只能是数字、大小写字母_-*且在同一个商户号下唯一。
	 */
	private String out_trade_no;

	/**
	 * 微信支付订单号  微信支付系统生成的订单号。
	 */
	private String transaction_id;

	/**
	 * 交易类型
	 * JSAPI：公众号支付
	 * NATIVE：扫码支付
	 * APP：APP支付
	 * MICROPAY：付款码支付
	 * MWEB：H5支付
	 * FACEPAY：刷脸支付
	 */
	private String trade_type;

	/**
	 * 交易状态，枚举值：
	 * SUCCESS：支付成功
	 * REFUND：转入退款
	 * NOTPAY：未支付
	 * CLOSED：已关闭
	 * REVOKED：已撤销（付款码支付）
	 * USERPAYING：用户支付中（付款码支付）
	 * PAYERROR：支付失败(其他原因，如银行返回失败)
	 */
	private String trade_state;

	/**
	 * 交易状态描述
	 */
	private String trade_state_desc;

	/**
	 * 付款银行  银行类型，采用字符串类型的银行标识。
	 * https://pay.weixin.qq.com/wiki/doc/apiv3/terms_definition/chapter1_1_3.shtml#part-6
	 */
	private String bank_type;

	/**
	 * 附加数据
	 */
	private String attach;

	/**
	 * 支付完成时间  支付完成时间，遵循rfc3339标准格式，格式为yyyy-MM-DDTHH:mm:ss+TIMEZONE
	 */
	private String success_time;

	/**
	 * 支付者信息
	 */
	private Payer payer;

	/**
	 * 订单金额
	 */
	private Amount amount;

	/**
	 * 优惠功能，享受优惠时返回该字段。
	 */
	private List<Promotion> promotion_detail;

	@Data
	public static class Payer {
		/**
		 * 用户标识  用户在直连商户appid下的唯一标识。
		 */
		private String openid;
	}

	@Data
	public static class Amount {
		/**
		 * 总金额  订单总金额，单位为分。
		 */
		private String total;

		/**
		 * 用户支付金额  用户支付金额，单位为分。
		 */
		private String payer_total;

		/**
		 * 货币类型  CNY：人民币，境内商户号仅支持人民币。
		 */
		private String currency;

		/**
		 * 用户支付币种
		 */
		private String payer_currency;
	}

	@Data
	public static class Promotion{
		// 券ID
		private String coupon_id;
		// 优惠名称
		private String name;
		// 优惠范围 GLOBAL：全场代金券 SINGLE：单品优惠
		private String scope;
		//优惠类型 CASH：充值型代金券 NOCASH：免充值型代金券
		private String type;
		// 优惠券面额
		private String amount;
		// 活动ID
		private String stock_id;
		// 微信出资
		private String wechatpay_contribute;
		// 商户出资
		private String merchant_contribute;
		// 其他出资
		private String other_contribute;
		// 优惠币种
		private String currency;
	}
}
