using Hncore.Infrastructure.Common;
using System.Xml;
using System.Xml.Serialization;

namespace Hncore.Pass.PaymentCenter.WxPay.WechatJsPay
{
    /// <summary>
    /// 微信扫码付款
    /// </summary>
    [XmlRoot("xml", Namespace = "")]
    public class WxH5PayCreateOrderRequest : WxJsPayDataBase
    {        
        /// <summary>
        /// 商户系统内部的订单号 ,5到32个字符、 只能包含字母数字或者下划线，区分大小写，每次下单请求确保在商户系统唯一
        /// </summary>
        [XmlElement("out_trade_no")]
        public string OutTradeNo { get; set; }

        [XmlElement("attach")]
        public string Attach { get; set; }
        /// <summary>
        /// 商品描述
        /// </summary>
        [XmlElement("body")]
        public string Body { get; set; }

        /// <summary>
        /// 总金额，以分为单位，不允许包含任何字、符号
        /// </summary>
        [XmlElement("total_fee")]
        public int TotalFee { get; set; }

        /// <summary>
        /// H5支付
        /// </summary>
        [XmlElement("trade_type")]
        public string TradeType { get; set; } = "MWEB";

        [XmlElement("notify_url")]
        public string NotifyUrl { get; set; }
        
        /// <summary>
        /// 公众账号或小程序ID
        /// </summary>
        [XmlElement("appid")]
        public string AppId { get; set; }

        /// <summary>
        /// 公众账号或小程序ID
        /// </summary>
        [XmlElement("mch_id")]
        public string MchId { get; set; }

        /// <summary>
        /// 订单生成的机器 IP
        /// </summary>
        [XmlElement("spbill_create_ip")]
        public string MchCreateIp { get; set; } = NetworkHelper.GetPublicIp();

        /// <summary>
        /// 商品Id
        /// </summary>
        [XmlElement("product_id")]
        public string ProductId { get; set; }

        

        /// <summary>
        /// 随机字符串
        /// </summary>
        [XmlElement("nonce_str")]
        public string NonceStr { get; set; }

        /// <summary>
        /// 绝对过期时间 yyyyMMddHHmmss
        /// </summary>
        [XmlElement("time_expire")]
        public string TimeExpire { get; set; }


        public int TenantId { get; set; }

        public int StoreId { get; set; }


        public WxH5PayCreateOrderRequest()
        {
            this.NonceStr =this.GenerateNonceStr();
        }
    }
}