趣幕网

i茅台 预约软件

小编
软件简介:

i茅台预约软件是一款专为茅台酒爱好者设计的便捷预约工具。该软件的核心功能包括实时更新茅台酒的库存信息、提供多种预约方式以及智能提醒服务。用户可以通过软件快速查看最新的茅台酒库存情况,选择心仪的产品进行预约。软件支持多种预约方式,包括线上预约和线下门店预约,满足不同用户的需求。此外,i茅台预约软件还具备智能提醒功能,当有新的茅台酒上架或预约成功时,用户会收到及时的通知,确保不错过任何抢购机会。软件界面简洁易用,操作流畅,为用户提供高效、便捷的茅台酒预约体验。

软件截图:
  • 软件截图

bin/debug目录里有编译好的exe,可以直接用。
1. 自己写了验证码登录、预约功能,登录的数据可保存。下次登录软件就不用在验证码登录了,直到这个cookie过期。
2. 需要自己把要抢的个人信息先做个配置在userconfig.json,第一次使用费力点,但以后就不用了。
{
        "data": [{
                        "mobile": "13511111111",   #手机号码样例
                        "shopIds": "100330100004@133330100001@100330100002@133330100002@22330100025001@133330121002",   #自己身边的茅台店id 优先级从左到右,由高到低
                        "province": "浙江省",
                        "deviceId": "21EC2020-3AEA-1069-A2DD-08002B30309D",   #设备id  网上可以搜索或者自己生成,说白了就guid的随机码,不知道有没有影响,不同肯定好点
                        "productIds":"10941@10942",     ##需要抢的产品代码
                        "params":"MT-K:1695430951361@MT-Lng:121.231099@MT-Lat:31.272769"  ##经纬度
                }
        ]
}
注:不喜欢的请别下载,下载了觉得不好的请别抱怨,特别是吹毛求疵的朋友还是不要下为好。觉得好的点个赞、评个分,尊重一下别人的劳动成果。下一步开发自动预约的。

001.png

主要功能代码如下:

[C#]

/// <summary>[/size]
[size=14px]        /// 发送验证码[/size]
[size=14px]        /// </summary>[/size]
[size=14px]        /// <returns></returns>[/size]
[size=14px]        public string RequestCode()[/size]
[size=14px]        {[/size]
[size=14px]            System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1, 0, 0, 0, 0));[/size]
[size=14px]            long t = (DateTime.Now.Ticks - startTime.Ticks) / 10000;[/size]
[size=14px] [/size]
[size=14px]            var timestamp = t;[/size]
[size=14px]            JObject param = new JObject{[/size]
[size=14px]                { "mobile", this.UserName },[/size]
[size=14px]                { "md5", Signature(this.UserName,timestamp) },[/size]
[size=14px]                {"timestamp",timestamp+""}[/size]
[size=14px]            };[/size]
[size=14px] [/size]
[size=14px]            string string_ = param.ToString();[/size]
[size=14px]            //Hashtable headers = new Hashtable();[/size]
[size=14px]            //headers.Add("firmId","82610");[/size]
[size=14px]            this.request.DeviceId = GetDeviceId(this.UserName);[/size]
[size=14px]            string result = this.request.RequestCode("https://app.moutai519.com.cn/xhr/front/user/register/vcode", null, string_);[/size]
[size=14px]            var jObject = JObject.Parse(result);[/size]
[size=14px]            if (jObject.GetValue("code").Value<int>() != 2000)[/size]
[size=14px]            {[/size]
[size=14px]                throw new InvalidOperationException("发送验证码失败:" + result);[/size]
[size=14px]            }[/size]
[size=14px] [/size]
[size=14px]            return result;[/size]
[size=14px]        }[/size]
[size=14px] [/size]
[size=14px]        public string Login()[/size]
[size=14px]        {[/size]
[size=14px]            JObject param = new JObject{[/size]
[size=14px]                                { "mobile", this.UserName },[/size]
[size=14px]                { "ydToken", "" },[/size]
[size=14px]                {"vCode",this.Code},[/size]
[size=14px]                {"ydLogId",""}[/size]
[size=14px]            };[/size]
[size=14px]            string string_ = param.ToString();[/size]
[size=14px]            this.request.DeviceId = GetDeviceId(this.UserName);[/size]
[size=14px]            string result = this.request.RequestCode("https://app.moutai519.com.cn/xhr/front/user/register/login", null, string_);[/size]
[size=14px]            var jObject = JObject.Parse(result);[/size]
[size=14px]            if (jObject.GetValue("code").Value<int>() != 2000)[/size]
[size=14px]            {[/size]
[size=14px]                throw new InvalidOperationException("登录失败:" + result);[/size]
[size=14px]            }[/size]
[size=14px]            return result;[/size]
[size=14px]        }[/size]
[size=14px] [/size]
[size=14px]        public RResponse Reservation(UserEntity user, string itemId, string shopId)[/size]
[size=14px]        {[/size]
[size=14px]            var info = new Dictionary<string, object>[/size]
[size=14px]            {[/size]
[size=14px]                { "itemId", itemId },[/size]
[size=14px]                { "count", 1 }[/size]
[size=14px]            };[/size]
[size=14px]            var values = new Dictionary<string, object>[/size]
[size=14px]            {[/size]
[size=14px]                { "itemInfoList", new List<Dictionary<string, object>>() { info } },[/size]
[size=14px]                { "sessionId", this.request.Session},[/size]
[size=14px]                {"shopId",shopId},[/size]
[size=14px]                {"userId",user.UserId + ""}[/size]
[size=14px]            };[/size]
[size=14px] [/size]
[size=14px]            Hashtable headers = new Hashtable();[/size]
[size=14px]            headers.Add("MT-Token", user.Token);[/size]
[size=14px]            headers.Add("userId", user.UserId.ToString());[/size]
[size=14px]            values.Add("actParam", EncryptAES_CBC(JsonConvert.SerializeObject(values).Replace("\\\"", "\"")));[/size]
[size=14px]            var requestBody = JsonConvert.SerializeObject(values);[/size]
[size=14px]            System.Console.WriteLine(requestBody);[/size]
[size=14px]            // string string_ = param.ToString();[/size]
[size=14px]            this.request.DeviceId = GetDeviceId(user.Mobile);[/size]
[size=14px]            string result = this.request.RequestCode("https://app.moutai519.com.cn/xhr/front/mall/reservation/add", headers, requestBody);[/size]
[size=14px]            System.Console.WriteLine(result);[/size]
[size=14px]            var jObject = JObject.Parse(result);[/size]
[size=14px]            if (jObject.GetValue("code").Value<int>() == 2000)[/size]
[size=14px]            {[/size]
[size=14px]                var dataJObject = jObject["data"];[/size]
[size=14px] [/size]
[size=14px]                return new RResponse()[/size]
[size=14px]                {[/size]
[size=14px]                    Code = jObject.GetValue("code").Value<int>(),[/size]
[size=14px]                    Message = dataJObject["successDesc"].Value<string>()[/size]
[size=14px]                };[/size]
[size=14px] [/size]
[size=14px]            }[/size]
[size=14px]            else {[/size]
[size=14px]                return new RResponse()[/size]
[size=14px]                {[/size]
[size=14px]                    Code = jObject.GetValue("code").Value<int>(),[/size]
[size=14px]                    Message = jObject.GetValue("message").Value<string>()[/size]
[size=14px]                };[/size]
[size=14px]            }[/size]
[size=14px]        }


软件评论:
匿名用户
i茅台预约软件是一款专为茅台酒爱好者设计的应用程序,旨在简化茅台酒的购买流程。用户界面设计简洁直观,使得即使是初次使用的用户也能快速上手。软件的主要功能包括实时更新的茅台酒库存信息、预约购买以及订单跟踪等,这些功能极大地提升了用户的购物体验。 首先,i茅台预约软件的实时库存更新功能非常实用。用户可以随时查看茅台酒的库存情况,避免了因库存不足而导致的购买失败。其次,预约购买功能让用户可以在茅台酒上架前进行预约,大大提高了购买成功率。此外,订单跟踪功能让用户可以实时了解订单状态,从下单到收货的每一个环节都清晰可见,增加了购物的透明度和安全感。 在用户体验方面,i茅台预约软件也表现出色。软件的响应速度快,操作流畅,几乎没有卡顿现象。同时,软件还提供了详细的用户指南和客服支持,帮助用户解决在使用过程中遇到的问题。总的来说,i茅台预约软件凭借其强大的功能和良好的用户体验,成为了茅台酒爱好者的必备工具。
匿名用
匿名用
匿名用