Example #1
0
        static void Main(string[] args)
        {
            SortedDictionary <string, string> parameters = new SortedDictionary <string, string>();

            parameters["Token"]       = "d89d32ab-f96d-4b29-be6f-8fb3f7a3cd6c";
            parameters["Id"]          = "44";
            parameters["Province"]    = "上海";
            parameters["City"]        = "上海";
            parameters["Mobile"]      = "13636651285";
            parameters["CallBackUrl"] = "http//:www.kxcall.com";
            string sectoken = "d89d32ab-f96d-4b29-be6f-8fb3f7a3cd6c";

            StringBuilder query = new StringBuilder();

            foreach (KeyValuePair <string, string> p in parameters)
            {
                if (query.ToString() == "")
                {
                    query.Append(p.Key);
                    query.Append("=");
                    query.Append(p.Value);
                }
                else
                {
                    query.Append("&");
                    query.Append(p.Key);
                    query.Append("=");
                    query.Append(p.Value);
                }
            }

            string sign = UrlSignUtil.GetMD5(query.ToString() + "&key=" + sectoken);
        }
Example #2
0
        private void GetToken(Resrouce_interface api)
        {
            lock (telcom)
            {
                Logger.Info("Gettoken...");
                if (DateTimeUtil.ConvertDateTimeToInt(DateTime.Now) < expiredTime)
                {
                    return;
                }
                //Logger.Info("id:"+api.Username);
                //Logger.Info("AppSecret:" + api.AppSecret);
                //Logger.Info("reqToken:" + UrlSignUtil.GetMD5(api.Username + api.AppSecret));
                NameValueCollection col = new NameValueCollection();
                col.Add("reqToken", UrlSignUtil.GetMD5(api.Username + api.AppSecret));
                col.Add("id", api.Username);
                Logger.Info("URL:" + api.GetTokenUrl);
                string resStr = HttpSercice.PostHttpRequest(api.GetTokenUrl, col, WeChat.Adapter.Requests.RequestType.POST, null);
                if (!string.IsNullOrEmpty(resStr))
                {
                    try
                    {
                        Newtonsoft.Json.Linq.JObject jsonResult = Newtonsoft.Json.Linq.JObject.Parse(resStr);
                        string result  = jsonResult["result"].ToString();
                        string rtoken  = jsonResult["token"] != null? jsonResult["token"].ToString():null;
                        string message = jsonResult["resultMsg"].ToString();
                        Logger.Info("Request token result:" + resStr);
                        if (!string.IsNullOrEmpty(result) && result.Trim() == "0")
                        {
                            token       = rtoken;
                            expiredTime = DateTimeUtil.ConvertDateTimeToInt(DateTime.Now) + expiredInterval;
                        }
                        else
                        {
                            Logger.Error(message != null?message:"Failed to request token.");
                        }
                    }
                    catch (Exception ex)
                    {
                        Logger.Fatal(ex);
                    }
                }
                else
                {
                    Logger.Info("Empty response.");
                }

                Logger.Info("Gettoken done!");
            }
        }
Example #3
0
        static void charge()
        {
            SortedDictionary <string, string> parameters = new SortedDictionary <string, string>();

            parameters["Token"] = "0ce9445505baa521ed1a2b0a34853164";
            parameters["Id"]    = "57";
            //parameters["Id"] = "48";
            parameters["Province"] = "河南";
            parameters["City"]     = "商丘";
            parameters["Mobile"]   = "15649939049";
            parameters["MobileSP"] = "中国联通";
            //parameters["Client_order_id"] = "102365";
            parameters["CallBackUrl"] = "http://113.31.21.238:8200/flux/callbackservice/yifengcb.ws";
            string sectoken = "0a483117-4e4d-4d97-aad4-d6576c2ffdec";

            StringBuilder query = new StringBuilder();

            foreach (KeyValuePair <string, string> p in parameters)
            {
                if (query.ToString() == "")
                {
                    query.Append(p.Key);
                    query.Append("=");
                    query.Append(p.Value);
                }
                else
                {
                    query.Append("&");
                    query.Append(p.Key);
                    query.Append("=");
                    query.Append(p.Value != null ? p.Value : "");
                }
            }
            string urlStr = query.ToString() + "&key=" + sectoken;
            string sign   = UrlSignUtil.GetMD5(urlStr);

            NameValueCollection col = new NameValueCollection();

            foreach (KeyValuePair <string, string> p in parameters)
            {
                col.Add(p.Key, p.Value);
            }
            col.Add("Sign", sign);
            string res = WeChat.Adapter.Requests.HttpSercice.PostHttpRequest(url + "Charge", col, WeChat.Adapter.Requests.RequestType.POST, null);
        }
Example #4
0
        static void products()
        {
            SortedDictionary <string, string> parameters = new SortedDictionary <string, string>();

            parameters["Token"] = "fd01e1c7c0e98db26b91d6f81ed20529";
            string sectoken = "0c16e09b-b822-4b5a-bab4-19e6855b3211";
            string query    = "Token=fd01e1c7c0e98db26b91d6f81ed20529";
            string sign     = UrlSignUtil.GetMD5(query + "&key=" + sectoken);

            NameValueCollection col = new NameValueCollection();

            foreach (KeyValuePair <string, string> p in parameters)
            {
                col.Add(p.Key, p.Value);
            }
            col.Add("Sign", sign);
            string res = WeChat.Adapter.Requests.HttpSercice.PostHttpRequest(url + "Products", col, WeChat.Adapter.Requests.RequestType.POST, null);

            Console.WriteLine(res);
        }
Example #5
0
        static void CallBack()
        {
            string url = "http://125.83.166.97:7892/";
            SortedDictionary <string, string> parameters = new SortedDictionary <string, string>();

            parameters["OrderId"]       = "45576";
            parameters["ClientOrderId"] = "20161207170612920";
            parameters["Status"]        = "FAILED";
            parameters["Message"]       = "充值失败";

            StringBuilder query = new StringBuilder();

            foreach (KeyValuePair <string, string> p in parameters)
            {
                if (query.ToString() == "")
                {
                    query.Append(p.Key);
                    query.Append("=");
                    query.Append(p.Value);
                }
                else
                {
                    query.Append("&");
                    query.Append(p.Key);
                    query.Append("=");
                    query.Append(p.Value != null ? p.Value : "");
                }
            }
            string urlStr           = query.ToString() + "&key=ce9213e7-b65f-40bf-996f-455078c8430a";
            string sign             = UrlSignUtil.GetMD5(urlStr);
            NameValueCollection col = new NameValueCollection();

            col.Add("OrderId", "45576");
            col.Add("ClientOrderId", "20161207170612920");
            col.Add("Status", "FAILED");
            col.Add("Message", "充值失败");
            col.Add("Sign", sign);

            string res = WeChat.Adapter.Requests.HttpSercice.PostHttpRequest(url, col, WeChat.Adapter.Requests.RequestType.POST, null);
        }
Example #6
0
        public async Task <Users> CreateAdministrator(Users dbUser)
        {
            if (dbUser == null)
            {
                throw new KMBitException("参数不正确");
            }
            if (string.IsNullOrEmpty(dbUser.Email))
            {
                throw new KMBitException("邮箱地址不能为空");
            }
            if (string.IsNullOrEmpty(dbUser.PasswordHash))
            {
                throw new KMBitException("用户密码不能为空");
            }
            if (!CurrentLoginUser.Permission.CREATE_USER)
            {
                throw new KMBitException("没有权限创建用户");
            }

            using (chargebitEntities db = new chargebitEntities())
            {
                Users u = (from usr in db.Users where usr.Email == dbUser.Email select usr).FirstOrDefault <Users>();
                if (u != null)
                {
                    throw new KMBitException("此邮箱已经注册过,不能重复注册");
                }
                ApplicationUserManager manager = new ApplicationUserManager(new ApplicationUserStore(new chargebitEntities()));
                ApplicationUser        appUser = new ApplicationUser();
                appUser.Address           = "";
                appUser.AccessFailedCount = 0;
                appUser.City_id           = 0;
                appUser.CreatedBy         = CurrentLoginUser.User.Id;
                appUser.Credit_amount     = 0;
                appUser.Description       = "";
                appUser.Email             = dbUser.Email;
                appUser.UserName          = dbUser.Email;
                appUser.Name         = dbUser.Name;
                appUser.PasswordHash = dbUser.PasswordHash;
                appUser.Pay_type     = 0;
                appUser.PhoneNumber  = dbUser.PhoneNumber;
                appUser.Province_id  = 0;
                appUser.Regtime      = DateTimeUtil.ConvertDateTimeToInt(DateTime.Now);
                appUser.Enabled      = dbUser.Enabled;
                appUser.Type         = 1;
                appUser.Update_time  = appUser.Regtime;
                appUser.AccessToken  = UrlSignUtil.GetMD5(Guid.NewGuid().ToString());
                var result = await manager.CreateAsync(appUser, dbUser.PasswordHash);

                if (result.Succeeded)
                {
                    u = (from usr in db.Users where usr.Email == dbUser.Email select usr).FirstOrDefault <Users>();

                    Admin_Users au = new Admin_Users()
                    {
                        Description = "管理员", IsSuperAdmin = false, IsWebMaster = false, User_Id = u.Id
                    };
                    db.Admin_Users.Add(au);
                    db.SaveChanges();
                }
                return(u);
            }
        }
Example #7
0
        public ChargeResult Charge(ChargeOrder order)
        {
            Logger.Info("Charging...");
            ChargeResult result = new ChargeResult()
            {
                Status = ChargeStatus.FAILED
            };
            chargebitEntities db = null;

            ProceedOrder(order, out result);
            if (result.Status == ChargeStatus.FAILED)
            {
                return(result);
            }
            List <WebRequestParameters> parmeters = new List <WebRequestParameters>();
            bool succeed = false;

            try
            {
                db = new chargebitEntities();
                Charge_Order corder = (from co in db.Charge_Order where co.Id == order.Id select co).FirstOrDefault <Charge_Order>();
                corder.Process_time = DateTimeUtil.ConvertDateTimeToInt(DateTime.Now);
                KMBit.DAL.Resrouce_interface rInterface = (from ri in db.Resrouce_interface where ri.Resource_id == order.ResourceId select ri).FirstOrDefault <Resrouce_interface>();
                Resource_taocan taocan = (from t in db.Resource_taocan where t.Id == order.ResourceTaocanId select t).FirstOrDefault <Resource_taocan>();
                ServerUri = new Uri(rInterface.APIURL);

                StringBuilder body = new StringBuilder();
                body.Append("{");
                body.Append("usernumber:\"" + rInterface.Username + "\"");
                body.Append(",gavingnumber:\"" + order.MobileNumber + "\"");
                body.Append(",packagetype:\"1\"");
                body.Append(",packagecode:\"" + taocan.Serial + "\"");
                body.Append(",validtype:\"0\"");
                body.Append("}");
                string appx      = order.Id.ToString();
                string timestamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                string method    = "ai.cuc.ll.method.gav";
                string appkey    = rInterface.AppKey;    // "ai.cuc.ll.appkey.test";
                string appSecret = rInterface.AppSecret; // "8888";
                parmeters.Add(new WebRequestParameters("apptx", appx, false));
                parmeters.Add(new WebRequestParameters("timestamp", timestamp, false));
                parmeters.Add(new WebRequestParameters("method", method, false));
                parmeters.Add(new WebRequestParameters("appkey", appkey, false));
                parmeters.Add(new WebRequestParameters("msg", body.ToString(), false));

                SortedDictionary <string, string> paras = new SortedDictionary <string, string>();
                foreach (WebRequestParameters p in parmeters)
                {
                    paras.Add(p.Name, p.Value);
                }

                string urlStr = string.Empty;
                foreach (KeyValuePair <string, string> p in paras)
                {
                    if (urlStr == string.Empty)
                    {
                        urlStr = p.Key + "=" + p.Value;
                    }
                    else
                    {
                        urlStr += "&" + p.Key + "=" + p.Value;
                    }
                }

                urlStr += "&" + UrlSignUtil.GetMD5(appSecret);
                string sign = UrlSignUtil.GetMD5(urlStr);
                parmeters.Add(new WebRequestParameters("sign", sign, false));
                parmeters.Add(new WebRequestParameters("signMethod", "MD5", false));
                SendRequest(parmeters, false, out succeed, RequestType.POST);

                //parse Response
                if (!string.IsNullOrEmpty(Response))
                {
                    result.Message = ChargeConstant.SUCCEED_CHARGE;
                    result.Status  = ChargeStatus.SUCCEED;
                    try
                    {
                        Newtonsoft.Json.Linq.JObject jsonResult = Newtonsoft.Json.Linq.JObject.Parse(Response);
                        string code    = jsonResult["code"].ToString();
                        string message = jsonResult["detail"].ToString();
                        switch (code)
                        {
                        case "0000":
                            result.Status = ChargeStatus.SUCCEED;
                            break;

                        case "9999":
                            result.Status  = ChargeStatus.FAILED;
                            result.Message = message;
                            break;

                        default:
                            result.Message = "未知错误";
                            result.Status  = ChargeStatus.FAILED;
                            break;
                        }
                    }
                    catch (Exception ex)
                    {
                        result.Message = ex.Message;
                        result.Status  = ChargeStatus.FAILED;
                    }
                }
                else
                {
                    result.Message = "未知错误";
                    result.Status  = ChargeStatus.FAILED;
                }
                if (result.Message != null && result.Message.Length > 5000)
                {
                    result.Message = result.Message.Substring(0, 5000);
                }
                ChangeOrderStatus(order, result);
            }
            catch (Exception ex)
            {
                Logger.Fatal(ex);
            }
            finally
            {
                if (db != null)
                {
                    db.Dispose();
                }
            }
            Logger.Info("Charging done!");
            return(result);
        }
Example #8
0
        public ChargeResult Charge(ChargeOrder order)
        {
            ChargeResult result = new ChargeResult()
            {
                Status = ChargeStatus.FAILED
            };
            chargebitEntities db = null;

            ProceedOrder(order, out result);
            if (result.Status == ChargeStatus.FAILED)
            {
                return(result);
            }
            List <WebRequestParameters> parmeters = new List <WebRequestParameters>();
            bool succeed = false;

            try
            {
                db = new chargebitEntities();
                Charge_Order corder = (from co in db.Charge_Order where co.Id == order.Id select co).FirstOrDefault <Charge_Order>();
                corder.Process_time = DateTimeUtil.ConvertDateTimeToInt(DateTime.Now);
                KMBit.DAL.Resrouce_interface rInterface = (from ri in db.Resrouce_interface where ri.Resource_id == order.ResourceId select ri).FirstOrDefault <Resrouce_interface>();
                Resource_taocan taocan = (from t in db.Resource_taocan where t.Id == order.ResourceTaocanId select t).FirstOrDefault <Resource_taocan>();
                ServerUri = new Uri(rInterface.APIURL);
                parmeters.Add(new WebRequestParameters("V", version, false));
                parmeters.Add(new WebRequestParameters("Action", "charge", false));
                parmeters.Add(new WebRequestParameters("Range", taocan.Area_id > 0 ? "1" : "0", false));
                SortedDictionary <string, string> paras = new SortedDictionary <string, string>();
                paras["Account"] = rInterface.Username;
                paras["Mobile"]  = order.MobileNumber;
                paras["Package"] = taocan.Quantity.ToString();
                string signStr = "";
                foreach (KeyValuePair <string, string> p in paras)
                {
                    if (signStr == string.Empty)
                    {
                        signStr += p.Key.ToLower() + "=" + p.Value;
                    }
                    else
                    {
                        signStr += "&" + p.Key.ToLower() + "=" + p.Value;
                    }
                }
                signStr      += "&key=" + KMAes.DecryptStringAES(rInterface.Userpassword);
                paras["Sign"] = UrlSignUtil.GetMD5(signStr);

                foreach (KeyValuePair <string, string> p in paras)
                {
                    parmeters.Add(new WebRequestParameters(p.Key, p.Value, false));
                }
                SendRequest(parmeters, false, out succeed);
                if (!string.IsNullOrEmpty(Response))
                {
                    JObject jsonResult = JObject.Parse(Response);
                    order.OutOrderId = jsonResult["TaskID"] != null ? jsonResult["TaskID"].ToString() : "";
                    string code    = jsonResult["Code"] != null ? jsonResult["Code"].ToString() : "";
                    string message = jsonResult["Message"] != null ? jsonResult["Message"].ToString() : "";
                    result.Message = message;
                    switch (code)
                    {
                    case "0":
                        result.Message = ChargeConstant.CHARGING;
                        result.Status  = ChargeStatus.ONPROGRESS;
                        break;

                    case "001":
                        result.Status = ChargeStatus.FAILED;
                        break;

                    case "002":
                        result.Status = ChargeStatus.FAILED;
                        break;

                    case "003":
                        result.Status = ChargeStatus.FAILED;
                        break;

                    case "004":
                        result.Status  = ChargeStatus.FAILED;
                        result.Message = ChargeConstant.RESOURCE_NOT_ENOUGH_MONEY;
                        break;

                    case "005":
                        result.Status = ChargeStatus.FAILED;
                        break;

                    case "006":
                        result.Status = ChargeStatus.FAILED;
                        break;

                    case "007":
                        result.Status = ChargeStatus.FAILED;
                        break;

                    case "008":
                        result.Status = ChargeStatus.FAILED;
                        break;

                    case "009":
                        result.Status = ChargeStatus.FAILED;
                        break;

                    case "100":
                        result.Status = ChargeStatus.FAILED;
                        break;

                    case "999":
                        result.Status = ChargeStatus.FAILED;
                        break;

                    default:
                        result.Status = ChargeStatus.FAILED;
                        break;
                    }
                    ChangeOrderStatus(order, result);
                }
            }
            catch (Exception ex)
            {
                Logger.Fatal(ex);
            }finally
            {
                if (db != null)
                {
                    db.Dispose();
                }
            }
            return(result);
        }
Example #9
0
        public void ImportProducts(int resourceId, int operate_user)
        {
            chargebitEntities db = null;

            try
            {
                bool succeed = false;
                List <WebRequestParameters> parmeters = new List <WebRequestParameters>();
                parmeters.Add(new WebRequestParameters("V", version, false));
                parmeters.Add(new WebRequestParameters("Action", "getPackage", false));
                db = new chargebitEntities();
                db.Configuration.AutoDetectChangesEnabled = false;
                KMBit.DAL.Resrouce_interface rInterface = (from ri in db.Resrouce_interface where ri.Resource_id == resourceId select ri).FirstOrDefault <Resrouce_interface>();
                ServerUri = new Uri(rInterface.ProductApiUrl);
                SortedDictionary <string, string> paras = new SortedDictionary <string, string>();
                paras["Account"] = rInterface.Username;
                paras["Type"]    = "0";
                string signStr = "";
                foreach (KeyValuePair <string, string> p in paras)
                {
                    if (signStr == string.Empty)
                    {
                        signStr += p.Key.ToLower() + "=" + p.Value;
                    }
                    else
                    {
                        signStr += "&" + p.Key.ToLower() + "=" + p.Value;
                    }
                }
                signStr      += "&key=" + KMAes.DecryptStringAES(rInterface.Userpassword);
                paras["Sign"] = UrlSignUtil.GetMD5(signStr);
                foreach (KeyValuePair <string, string> p in paras)
                {
                    parmeters.Add(new WebRequestParameters(p.Key, p.Value, false));
                }

                SendRequest(parmeters, false, out succeed);
                if (succeed)
                {
                    if (!string.IsNullOrEmpty(Response))
                    {
                        JObject json    = JObject.Parse(Response);
                        string  code    = json["Code"] != null? json["Code"].ToString():"";
                        string  message = json["Message"] != null ? json["Message"].ToString() : "";
                        if (!string.IsNullOrEmpty(code) && code == "0" && !string.IsNullOrEmpty(message) && message == "OK")
                        {
                            JArray packages = (JArray)json["Packages"];
                            if (packages != null)
                            {
                                for (int i = 0; i < packages.Count; i++)
                                {
                                    JObject package = (JObject)packages[i];

                                    if (package != null)
                                    {
                                        Resource_taocan taocan = null;
                                        int             sp     = 0;
                                        int             spId   = 0;
                                        int.TryParse(package["Type"].ToString(), out sp);
                                        int quantity = 0;
                                        int.TryParse(package["Package"].ToString(), out quantity);
                                        float price = 0;
                                        float.TryParse(package["Price"].ToString(), out price);

                                        if (sp == 2)
                                        {
                                            spId = 3;
                                        }
                                        else if (sp == 1)
                                        {
                                            spId = 1;
                                        }
                                        else if (sp == 3)
                                        {
                                            spId = 2;
                                        }

                                        taocan = (from t in db.Resource_taocan where t.Resource_id == rInterface.Resource_id && t.Quantity == quantity && t.Sp_id == spId select t).FirstOrDefault <Resource_taocan>();
                                        if (taocan != null)
                                        {
                                            taocan.Purchase_price = price;
                                            taocan.UpdatedBy      = operate_user;
                                            taocan.Updated_time   = DateTimeUtil.ConvertDateTimeToInt(DateTime.Now);
                                            db.SaveChanges();
                                        }
                                        else
                                        {
                                            taocan = new Resource_taocan()
                                            {
                                                Area_id           = 0,
                                                CreatedBy         = operate_user,
                                                Created_time      = DateTimeUtil.ConvertDateTimeToInt(DateTime.Now),
                                                Enabled           = false,
                                                EnableDiscount    = true,
                                                Purchase_price    = price,
                                                Quantity          = quantity,
                                                Resource_id       = rInterface.Resource_id,
                                                Sale_price        = price,
                                                Serial            = "",
                                                Sp_id             = spId,
                                                Taocan_id         = 0,
                                                Resource_Discount = 1
                                            };

                                            Taocan ntaocan = (from t in db.Taocan where t.Sp_id == taocan.Sp_id && t.Quantity == taocan.Quantity select t).FirstOrDefault <Taocan>();
                                            Sp     spO     = (from s in db.Sp where s.Id == taocan.Sp_id select s).FirstOrDefault <Sp>();
                                            if (ntaocan == null)
                                            {
                                                string taocanName = spO != null ? spO.Name + " " + taocan.Quantity.ToString() + "M" : "全网 " + taocan.Quantity.ToString() + "M";
                                                ntaocan = new Taocan()
                                                {
                                                    Created_time = taocan.Created_time, Description = taocanName, Name = taocanName, Sp_id = taocan.Sp_id, Quantity = taocan.Quantity, Updated_time = 0
                                                };
                                                db.Taocan.Add(ntaocan);
                                                db.SaveChanges();
                                            }
                                            if (ntaocan.Id > 0)
                                            {
                                                taocan.Taocan_id = ntaocan.Id;
                                                db.Resource_taocan.Add(taocan);
                                            }
                                        }
                                    }
                                }
                                db.SaveChanges();
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.Fatal(ex);
            }
            finally
            {
                if (db != null)
                {
                    db.Dispose();
                }
            }
        }
Example #10
0
        public void GetChargeStatus(int resourceId)
        {
            chargebitEntities db = new chargebitEntities();

            try
            {
                List <Charge_Order> orders = (from o in db.Charge_Order where o.Status == 1 select o).ToList <Charge_Order>();
                if (orders.Count <= 0)
                {
                    Logger.Info("No orders need to sync status of resourceId:" + resourceId);
                    return;
                }
                Logger.Info(string.Format("{0} orders need to sync status", orders.Count));
                KMBit.DAL.Resrouce_interface rInterface = (from ri in db.Resrouce_interface where ri.Resource_id == resourceId select ri).FirstOrDefault <Resrouce_interface>();
                ServerUri = new Uri(rInterface.APIURL);
                List <WebRequestParameters> parmeters = new List <WebRequestParameters>();
                parmeters.Add(new WebRequestParameters("V", version, false));
                parmeters.Add(new WebRequestParameters("Action", "getReports", false));
                SortedDictionary <string, string> paras = new SortedDictionary <string, string>();
                paras["Account"] = rInterface.Username;
                paras["Count"]   = statusCount.ToString();
                string signStr = "";
                foreach (KeyValuePair <string, string> p in paras)
                {
                    if (signStr == string.Empty)
                    {
                        signStr += p.Key.ToLower() + "=" + p.Value;
                    }
                    else
                    {
                        signStr += "&" + p.Key.ToLower() + "=" + p.Value;
                    }
                }
                signStr      += "&key=" + KMAes.DecryptStringAES(rInterface.Userpassword);
                paras["Sign"] = UrlSignUtil.GetMD5(signStr);

                foreach (KeyValuePair <string, string> p in paras)
                {
                    parmeters.Add(new WebRequestParameters(p.Key, p.Value, false));
                }
                bool succeed = false;
                SendRequest(parmeters, false, out succeed);
                if (succeed && !string.IsNullOrEmpty(Response))
                {
                    JObject jsonRes = JObject.Parse(Response);
                    string  code    = jsonRes["Code"] != null ? jsonRes["Code"].ToString() : "";
                    string  message = jsonRes["Message"] != null ? jsonRes["Message"].ToString() : "";
                    Logger.Info(string.Format("Code:{0}, Message:{1}", code, message));
                    if (!string.IsNullOrEmpty(code) && code == "0" && !string.IsNullOrEmpty(message) && message == "OK")
                    {
                        JArray charges = (JArray)jsonRes["Reports"];
                        if (charges != null)
                        {
                            Logger.Info(string.Format("Get {0} reports from resource", charges.Count));
                            for (int i = 0; i < charges.Count; i++)
                            {
                                JObject report  = (JObject)charges[i];
                                string  taskId  = report["TaskID"] != null? report["TaskID"].ToString():"";
                                string  phone   = report["Mobile"] != null? report["Mobile"].ToString():"";
                                string  status  = report["Status"] != null? report["Status"].ToString():"";
                                string  time    = report["ReportTime"] != null?report["ReportTime"].ToString():"";
                                string  rptCode = report["ReportCode"] != null? report["ReportCode"].ToString():"";
                                Logger.Info(string.Format("TaskId:{0}, MobilePhone:{1}, Status:{2}, Time:{3}", taskId, phone, status, time));
                                Charge_Order order = (from o in orders where o.Out_Order_Id == taskId && o.Phone_number == phone select o).FirstOrDefault <Charge_Order>();
                                if (order != null && !string.IsNullOrEmpty(taskId) && !string.IsNullOrEmpty(phone) && !string.IsNullOrEmpty(status))
                                {
                                    DateTime cTime = DateTime.MinValue;
                                    DateTime.TryParse(time, out cTime);
                                    if (cTime != DateTime.MinValue)
                                    {
                                        order.Completed_Time = DateTimeUtil.ConvertDateTimeToInt(cTime);
                                    }
                                    if (status == "4")
                                    {
                                        order.Status  = 2;
                                        order.Message = "充值成功:" + rptCode;
                                        RemoveQRCode(order);
                                    }
                                    else if (status == "5")
                                    {
                                        order.Status  = 3;
                                        order.Message = "充值失败:" + rptCode;
                                        if (order.Agent_Id > 0)
                                        {
                                            if (order.MarketOrderId <= 0)
                                            {
                                                Users agency = (from u in db.Users where u.Id == order.Agent_Id select u).FirstOrDefault <Users>();
                                                if (agency != null)
                                                {
                                                    agency.Remaining_amount += order.Purchase_price;
                                                    order.Refound            = true;
                                                }
                                            }
                                            else
                                            {
                                                order.Message = string.Format("充值失败:{0},二维码可以重复扫码使用直到充值成功", rptCode);
                                                order.Refound = false;
                                                Marketing_Orders mOrder = (from mo in db.Marketing_Orders where mo.Id == order.MarketOrderId select mo).FirstOrDefault <Marketing_Orders>();
                                                if (mOrder != null)
                                                {
                                                    mOrder.Used = false;
                                                }
                                            }

                                            db.SaveChanges();
                                        }
                                    }
                                }

                                //send back status to agent api calling
                                if (!string.IsNullOrEmpty(order.CallBackUrl))
                                {
                                    this.SendStatusBackToAgentCallback(order);
                                }
                            }
                            if (charges != null && charges.Count > 0)
                            {
                                db.SaveChanges();
                            }
                        }
                    }
                }
            }
            catch (KMBitException kex)
            {
                Logger.Warn(kex);
            }catch (Exception ex)
            {
                Logger.Fatal(ex);
            }finally
            {
                if (db != null)
                {
                    db.Dispose();
                }
            }
        }
Example #11
0
        public ActionResult DoSaoMa()
        {
            string p        = Request["p"];
            string number   = Request["mobile_number"];
            string spName   = Request["SPName"];
            string province = Request["Province"];
            string city     = Request["City"];

            if (string.IsNullOrEmpty(p))
            {
                ViewBag.Message = "参数错误,请正确扫码,输入手机号码点充值";
            }
            else
            {
                int    agentId         = 0;
                int    customerId      = 0;
                int    activityId      = 0;
                int    activityOrderId = 0;
                string parameters      = KMEncoder.Decode(p);
                if (!string.IsNullOrEmpty(parameters))
                {
                    string signature = string.Empty;
                    SortedDictionary <string, string> pvs = parseParameters(parameters, out signature);
                    if (string.IsNullOrEmpty(signature))
                    {
                        ViewBag.Message = "URL参数不正确,请重新扫码";
                        return(View("SaoMa"));
                    }
                    System.Text.StringBuilder pBuilder = new System.Text.StringBuilder();
                    if (pvs.Count > 0)
                    {
                        int count = 1;
                        foreach (KeyValuePair <string, string> pair in pvs)
                        {
                            pBuilder.Append(pair.Key);
                            pBuilder.Append("=");
                            pBuilder.Append(pair.Value);
                            if (count < pvs.Count)
                            {
                                pBuilder.Append("&");
                            }
                            count++;
                            switch (pair.Key)
                            {
                            case "agentId":
                                int.TryParse(pair.Value, out agentId);
                                break;

                            case "customerId":
                                int.TryParse(pair.Value, out customerId);
                                break;

                            case "activityId":
                                int.TryParse(pair.Value, out activityId);
                                break;

                            case "activityOrderId":
                                int.TryParse(pair.Value, out activityOrderId);
                                break;
                            }
                        }
                        CustomerManagement customerMgr = new CustomerManagement(0);
                        int total;
                        List <BCustomer> customers = customerMgr.FindCustomers(0, customerId, out total);
                        if (total <= 0 || total > 1)
                        {
                            ViewBag.Message = "URL参数不正确,请重新扫码";
                            return(View("SaoMa"));
                        }
                        pBuilder.Append("&key=");
                        pBuilder.Append(customers[0].Token);
                        string sign = UrlSignUtil.GetMD5(pBuilder.ToString());
                        if (sign != signature)
                        {
                            ViewBag.Message = "URL参数不正确,请重新扫码";
                            return(View("SaoMa"));
                        }
                        ActivityManagement activityMgr = new ActivityManagement(0);
                        BMarketOrderCharge order       = new BMarketOrderCharge()
                        {
                            ActivityId      = activityId,
                            ActivityOrderId = activityOrderId,
                            AgentId         = agentId,
                            CustomerId      = customerId,
                            City            = city,
                            Province        = province,
                            OpenId          = "",
                            Phone           = number,
                            SPName          = spName
                        };
                        KMBit.BL.Charge.ChargeResult result = activityMgr.MarketingCharge(order);
                        ViewBag.Message = result.Message;
                        //if(result.Status == ChargeStatus.FAILED)
                        //{
                        //    ViewBag.Paras = pvs;
                        //    //paras.Add("p", p);
                        //}
                    }
                }
                else
                {
                    ViewBag.Message = "不能重复扫码,或者修改扫码后的URL地址";
                }
            }

            return(View("SaoMa"));
        }
Example #12
0
        public static void ProcessOrders()
        {
            logger.Info("Going to process orders...");
            chargebitEntities db = null;

            try
            {
                List <Charge_Order> orders = null;
                db = new chargebitEntities();
                db.Configuration.AutoDetectChangesEnabled = true;
                if (resources == null)
                {
                    resources = (from r in db.Resource where r.Enabled == true select r).ToList <Resource>();
                }
                if (resourceAPIs == null)
                {
                    resourceAPIs = (from r in db.Resrouce_interface select r).ToList <Resrouce_interface>();
                }
                lock (o)
                {
                    logger.Info("Last Max Order Id:" + lastOrderId);
                    orders = (from o in db.Charge_Order where o.Id > lastOrderId && ((o.Payed == true && o.Charge_type == 0 && o.Status == 10) || (o.Charge_type == 1 && o.Status != 3 && o.Status != 2) || (o.Charge_type == 2 && o.Status != 3 && o.Status != 2)) orderby o.Charge_type ascending orderby o.Id ascending select o).ToList <Charge_Order>();
                    logger.Info(string.Format("Get {0} unprocessed orders", orders.Count));
                    if (orders.Count == 0)
                    {
                        logger.Info("No unprocessed orders, thread will exit!");
                        return;
                    }

                    lastOrderId = (from o in orders select o.Id).Max();
                    logger.Info("Max Order Id updated to:" + lastOrderId);
                }

                List <int>   agentIds = (from o in orders where o.Agent_Id > 0 select o.Agent_Id).ToList <int>();
                List <Users> agents   = new List <Users>();
                if (agentIds != null && agentIds.Count > 0)
                {
                    int[] ids = agentIds.ToArray <int>();
                    agents = (from u in db.Users where ids.Contains(u.Id) select u).ToList <Users>();
                }
                List <Charge_Order> frontEndOrders = (from o in orders where o.Payed == true && o.Charge_type == 0 && o.Status == 10 select o).ToList <Charge_Order>();
                List <Charge_Order> agentOrders    = (from o in orders where o.Charge_type == 1 && o.Status != 3 && o.Status != 2 select o).ToList <Charge_Order>();
                List <Charge_Order> backendOrders  = (from o in orders where o.Charge_type == 2 && o.Status != 3 && o.Status != 2 select o).ToList <Charge_Order>();
                //logger.Info(string.Format("{0} unprocessed frontend orders", frontEndOrders.Count));
                //logger.Info(string.Format("{0} unprocessed agent orders", agentOrders.Count));
                //logger.Info(string.Format("{0} unprocessed backend orders", backendOrders.Count));
                ChargeResult result = null;
                logger.Info("");
                foreach (Charge_Order corder in orders)
                {
                    Resource           resource    = (from r in resources where r.Id == corder.Resource_id select r).FirstOrDefault <Resource>();
                    Resrouce_interface resourceAPI = null;
                    if (resource != null)
                    {
                        resourceAPI = (from api in resourceAPIs where api.Resource_id == corder.Resource_id select api).FirstOrDefault <Resrouce_interface>();
                    }
                    logger.Info(string.Format("Processing order Id-{0}, Phone-{1}, Agent-{2}, ChargeType-{3}", corder.Id.ToString(), corder.Phone_number, corder.Agent_Id, corder.Charge_type));
                    ChargeOrder order = new ChargeOrder()
                    {
                        Payed            = corder.Payed,
                        ChargeType       = corder.Charge_type,
                        AgencyId         = corder.Agent_Id,
                        OperateUserId    = corder.Operate_User,
                        Id               = corder.Id,
                        Province         = corder.Province,
                        City             = corder.City,
                        MobileSP         = corder.MobileSP,
                        MobileNumber     = corder.Phone_number,
                        OutOrderId       = "",
                        ResourceId       = 0,
                        ResourceTaocanId = corder.Resource_taocan_id,
                        RouteId          = corder.RuoteId,
                        CreatedTime      = corder.Created_time
                    };

                    result = cb.Charge(order);
                    Users agent = (from u in agents where corder.Agent_Id > 0 && corder.Agent_Id == u.Id select u).FirstOrDefault <Users>();
                    logger.Info("Order status - " + order.Status);

                    //just for Synchronized resources
                    if (!string.IsNullOrEmpty(corder.CallBackUrl) && corder.Agent_Id > 0 &&
                        agent != null &&
                        resourceAPI != null &&
                        (resourceAPI.Synchronized == true || result.Status == ChargeStatus.FAILED)
                        )
                    {
                        logger.Info("Synchronized resource api or failed resource api submission.");
                        //send back the status to agent system
                        NameValueCollection col = new NameValueCollection();
                        SortedDictionary <string, string> param = new SortedDictionary <string, string>();
                        param.Add("OrderId", corder.Id.ToString());
                        param.Add("ClientOrderId", corder.Client_Order_Id != null?corder.Client_Order_Id.ToString():"");
                        param.Add("Message", result.Message);
                        param.Add("Status", result.Status.ToString());
                        string querystr = "";
                        foreach (KeyValuePair <string, string> p in param)
                        {
                            col.Add(p.Key, p.Value != null ? p.Value : "");
                            if (querystr == "")
                            {
                                querystr = p.Key + "=" + (p.Value != null ? p.Value : "");
                            }
                            else
                            {
                                querystr += "&" + p.Key + "=" + (p.Value != null ? p.Value : "");
                            }
                        }
                        logger.Info(string.Format("Post data to callback url - {0}", corder.CallBackUrl));
                        logger.Info(string.Format("Data - {0}", querystr));
                        querystr += "&key=" + agent.SecurityStamp;
                        string sign = UrlSignUtil.GetMD5(querystr);
                        col.Add("Sign", sign);
                        //logger.Info("sign=" + sign);
                        string resStr = HttpSercice.PostHttpRequest(corder.CallBackUrl, col, WeChat.Adapter.Requests.RequestType.POST, null);
                        if (resStr == null)
                        {
                            corder.PushedTimes += 1;
                            corder.Received     = true;
                        }
                        else if (resStr.ToLower() == "fail")
                        {
                            corder.PushedTimes += 1;
                            corder.Received     = false;
                        }
                        db.SaveChanges();
                    }
                    logger.Info(string.Format("Order ID:{2} - {0} - {1}", result.Status, result.Message, corder.Id));
                    logger.Info("");
                }
            }
            catch (Exception ex)
            {
                logger.Error(ex);
            }
            finally
            {
                if (db != null)
                {
                    db.Dispose();
                }
            }
        }
Example #13
0
 static string Md5(string s)
 {
     return(UrlSignUtil.GetMD5(s));
 }
Example #14
0
        protected void SendStatusBackToAgentCallback(Charge_Order order)
        {
            Logger.Info("SendStatusBackToAgentCallback");
            if (order == null || order.Agent_Id <= 0 || string.IsNullOrEmpty(order.CallBackUrl))
            {
                return;
            }
            Logger.Info(string.Format("Order Id {0}", order.Id.ToString()));
            Logger.Info(string.Format("Order Status {0}", order.Status.ToString()));
            Logger.Info(string.Format("Order Message {0}", order.Message != null?order.Message:""));
            chargebitEntities db = new chargebitEntities();

            try
            {
                List <WebRequestParameters>       parmeters = new List <WebRequestParameters>();
                SortedDictionary <string, string> paras     = new SortedDictionary <string, string>();
                string orderId = order.Id.ToString();
                string status  = order.Status.ToString();
                string message = order.Message != null ? order.Message : "";
                Users  agent   = (from u in db.Users where u.Id == order.Agent_Id select u).FirstOrDefault <Users>();
                Logger.Info(string.Format("Agent {0}", agent.Email));
                if (agent == null)
                {
                    status  = "3";
                    message = "代理商账户没有找到";
                }
                string token = agent.SecurityStamp;
                paras["OrderId"] = orderId;
                paras["Status"]  = status;
                paras["Message"] = message;
                string signStr = "";
                foreach (KeyValuePair <string, string> p in paras)
                {
                    if (signStr == string.Empty)
                    {
                        signStr += p.Key.ToLower() + "=" + p.Value;
                    }
                    else
                    {
                        signStr += "&" + p.Key.ToLower() + "=" + p.Value;
                    }
                }
                signStr += "&key=" + token;
                Logger.Info(string.Format("Sign String {0}", signStr));
                Logger.Info(string.Format("Signature {0}", UrlSignUtil.GetMD5(signStr)));
                paras["Signature"] = UrlSignUtil.GetMD5(signStr);
                foreach (KeyValuePair <string, string> p in paras)
                {
                    parmeters.Add(new WebRequestParameters(p.Key, p.Value, false));
                }
                ServerUri = new Uri(order.CallBackUrl);
                bool succeed = false;
                SendRequest(parmeters, false, out succeed);
                if (succeed)
                {
                    Logger.Info("Successfully sent back status to anegt callback API");
                }
                else
                {
                    Logger.Info("Failed sent back status to anegt callback API");
                }
            }
            catch (Exception ex)
            {
            }finally
            {
                if (db != null)
                {
                    db.Dispose();
                }

                Logger.Info("Leaving SendStatusBackToAgentCallback");
            }
        }
Example #15
0
        public HttpResponseMessage WeChatPayBack()
        {
            var    resp      = new HttpResponseMessage(HttpStatusCode.OK);
            string returnXML = null;

            logger.Info("PaymentController.WeChatPayBack is being called by Wechat payment notify service.........................");
            Stream stream = Request.InputStream;

            if (stream != null)
            {
                StreamReader rs = null;
                try
                {
                    rs = new StreamReader(stream);
                    string result = rs.ReadToEnd();
                    if (!string.IsNullOrEmpty(result))
                    {
                        logger.Info("Below is the data posted by wechat payment service");
                        logger.Info(result);
                        string paraValues = WeChatPaymentWrapper.ParsePaymentNotifySignParas(result);
                        logger.Info(string.Format("{0} needs to be signed", paraValues));
                        BaseResponse          baseresponse = WeChatPaymentWrapper.ParsePaymentNotify(result);
                        PaymentNotifyResponse response     = null;
                        if (baseresponse != null)
                        {
                            response = (PaymentNotifyResponse)baseresponse;
                        }
                        logger.Info(string.Format("Signature sent by wechat is {0}", response.sign));
                        WeChatPayConfig config = PersistentValueManager.config;
                        paraValues += "&key=" + config.ShopSecret;
                        string sign = UrlSignUtil.GetMD5(paraValues).ToUpper();
                        logger.Info(string.Format("Signature caculated by localsystem is {0}", sign));
                        if (sign != response.sign)
                        {
                            logger.Error("Two signatures are different, the request was not sent by wechat payment system.");
                            returnXML    = "<xml><return_code>FAIL</return_code><return_msg>签名不正确</return_msg></xml>";
                            resp.Content = new StringContent(returnXML, System.Text.Encoding.UTF8, "text/plain");
                        }
                        logger.Info("Sign verification passed");
                        OrderManagement   orderMgr = new OrderManagement(0);
                        PaymentManagement payMgr   = new PaymentManagement(0);
                        int paymentId = 0;
                        int.TryParse(response.out_trade_no, out paymentId);
                        if (paymentId > 0)
                        {
                            logger.Info("Going to process payment id" + paymentId);
                            ChargeResult cResult = null;
                            try
                            {
                                BPaymentHistory        payment  = null;
                                int                    total    = 0;
                                List <BPaymentHistory> payments = payMgr.FindUnProcessedOnLinePayments(paymentId, 0, 0, out total);
                                if (payments != null && payments.Count == 1)
                                {
                                    payment = payments[0];
                                    if (payment.PayType == 0)//直冲用户支付
                                    {
                                        logger.Info("OpenId:" + response.openid);
                                        logger.Info("OpenTradeNo:" + response.transaction_id);
                                        cResult = orderMgr.ProcessOrderAfterPaid(paymentId, response.transaction_id, response.openid);
                                        logger.Info(cResult.Status.ToString());
                                        logger.Info(cResult.Message);
                                        if (cResult.Status == ChargeStatus.SUCCEED)
                                        {
                                            logger.Info("The payment status has been successfully synced to local system.");
                                            returnXML    = "<xml><return_code>SUCCESS</return_code><return_msg>OK</return_msg></xml>";
                                            resp.Content = new StringContent(returnXML, System.Text.Encoding.UTF8, "text/plain");
                                            return(resp);
                                        }
                                        else
                                        {
                                            logger.Error(cResult.Message);
                                            returnXML    = "<xml><return_code>FAIL</return_code><return_msg>unexpected error</return_msg></xml>";
                                            resp.Content = new StringContent(returnXML, System.Text.Encoding.UTF8, "text/plain");
                                            return(resp);
                                        }
                                    }
                                }
                                else
                                {
                                    logger.Warn("Didn't find payment by id:" + paymentId);
                                    returnXML    = "<xml><return_code>FAIL</return_code><return_msg>out_trade_no is wrong</return_msg></xml>";
                                    resp.Content = new StringContent(returnXML, System.Text.Encoding.UTF8, "text/plain");
                                }
                            }
                            catch (KMBitException e)
                            {
                                returnXML    = "<xml><return_code>FAIL</return_code><return_msg>unexpected error</return_msg></xml>";
                                resp.Content = new StringContent(returnXML, System.Text.Encoding.UTF8, "text/plain");
                                logger.Error(e);
                            }
                            catch (Exception ex)
                            {
                                returnXML    = "<xml><return_code>FAIL</return_code><return_msg>unexpected error</return_msg></xml>";
                                resp.Content = new StringContent(returnXML, System.Text.Encoding.UTF8, "text/plain");
                                logger.Fatal(ex);
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    logger.Error(ex);
                }
            }
            logger.Info("Done...................");
            return(resp);
        }
Example #16
0
        public JsonResult PreCharge(WeChatChargeModel model)
        {
            logger.Info("WeChatController.PreCharge......................................................");
            ApiMessage  message = new ApiMessage();
            ChargeOrder order   = null;

            if (ModelState.IsValid)
            {
                try
                {
                    if (string.IsNullOrEmpty(model.OpenId))
                    {
                        message.Status  = "ERROR";
                        message.Message = "请从公众号菜单打开此页面";
                        return(Json(message, JsonRequestBehavior.AllowGet));
                    }
                    //ChargeBridge cb = new ChargeBridge();
                    order = new ChargeOrder()
                    {
                        ChargeType       = 0,
                        AgencyId         = 0,
                        Id               = 0,
                        Province         = model.Province,
                        City             = model.City,
                        MobileSP         = model.SPName,
                        MobileNumber     = model.Mobile,
                        OutOrderId       = "",
                        ResourceId       = 0,
                        ResourceTaocanId = model.ResourceTaocanId,
                        RouteId          = 0,
                        CreatedTime      = DateTimeUtil.ConvertDateTimeToInt(DateTime.Now),
                        Payed            = false,
                        OpenId           = model.OpenId,
                        OpenAccountType  = 1
                    };
                    //
                    OrderManagement    orderMgt    = new OrderManagement();
                    ResourceManagement resourceMgr = new ResourceManagement(0);

                    string msg = string.Empty;
                    if (orderMgt.IsThisMonthCharged(order.MobileNumber, order.ResourceTaocanId, out msg))
                    {
                        message.Status  = "ERROR";
                        message.Message = msg;
                        return(Json(message, JsonRequestBehavior.AllowGet));
                    }

                    order = orderMgt.GenerateOrder(order);
                    int total = 0;
                    List <BResourceTaocan> taocans = resourceMgr.FindResourceTaocans(order.ResourceTaocanId, 0, 0, out total);
                    if (taocans == null || taocans.Count == 0)
                    {
                        message.Message = "当前套餐不可用";
                        message.Status  = "ERROR";
                        return(Json(message, JsonRequestBehavior.AllowGet));
                    }
                    logger.Info(string.Format("Order is generated, Id - {0}, mobile - {1}", order.Id, order.MobileNumber));
                    BResourceTaocan taocan = taocans[0];
                    message.Status  = "OK";
                    message.Message = "预充值订单已经生成";
                    message.Item    = null;
                    //
                    string ip = Request.ServerVariables["REMOTE_ADDR"];
                    if (ip != null && ip.IndexOf("::") > -1)
                    {
                        ip = "127.0.0.1";
                    }
                    string prepayId = WeChatPaymentWrapper.GetPrepayId(PersistentValueManager.config, Session["wechat_openid"] != null ? Session["wechat_openid"].ToString() : "", order.PaymentId.ToString(), "TEST WECHATPAY", ip, (int)taocan.Taocan.Sale_price * 100, TradeType.JSAPI);
                    logger.Info(string.Format("Prepay Id - {0}", prepayId));
                    WeChatOrder weOrder = new WeChatOrder();
                    weOrder.Order = new ChargeOrder {
                        Id = order.Id, Payed = order.Payed, PaymentId = order.PaymentId, MobileNumber = order.MobileNumber, MobileSP = order.MobileSP, Province = order.Province
                    };
                    weOrder.PrepayId = prepayId;
                    weOrder.PaySign  = "";
                    message.Item     = weOrder;

                    AccessToken token  = PersistentValueManager.GetWeChatAccessToken();
                    JSAPITicket ticket = PersistentValueManager.GetWeChatJsApiTicket();
                    SortedDictionary <string, string> parameters = new SortedDictionary <string, string>();
                    parameters.Add("appId", PersistentValueManager.config.APPID);
                    parameters.Add("timeStamp", model.timestamp);
                    parameters.Add("nonceStr", model.nancestr);
                    parameters.Add("package", "prepay_id=" + prepayId);
                    parameters.Add("signType", "MD5");

                    logger.Info(string.Format("timeStamp:{0}", model.timestamp));
                    logger.Info(string.Format("nonceStr:{0}", model.nancestr));
                    logger.Info(string.Format("package:{0}", "prepay_id=" + prepayId));

                    string querystr = null;
                    foreach (KeyValuePair <string, string> para in parameters)
                    {
                        if (querystr == null)
                        {
                            querystr = para.Key + "=" + para.Value;
                        }
                        else
                        {
                            querystr += "&" + para.Key + "=" + para.Value;
                        }
                    }
                    querystr += "&key=" + PersistentValueManager.config.ShopSecret;
                    logger.Info(querystr);
                    string sign = UrlSignUtil.GetMD5(querystr);
                    model.paySign   = sign.ToUpper();
                    model.prepay_id = prepayId;
                    logger.Info(string.Format("paySign:{0}", sign.ToUpper()));
                    message.Item = model;
                }
                catch (KMBitException kex)
                {
                    logger.Error(kex);
                    message.Message = kex.Message;
                    message.Status  = "ERROR";
                }
                catch (Exception ex)
                {
                    message.Message = "未知错误,请联系我们";
                    message.Status  = "ERROR";
                    logger.Fatal(ex);
                }
                finally
                {
                }
            }

            logger.Info("Done.");
            return(Json(message, JsonRequestBehavior.AllowGet));
        }
Example #17
0
        // GET: WeChat
        public ActionResult Index()
        {
            logger.Info(this.GetType().FullName + " - Index....");
            WeChatChargeModel model = new WeChatChargeModel();

            //get weichat account openid from redirect URL parameters
            if (!string.IsNullOrEmpty(Request["openid"]))
            {
                model.OpenId             = Request["openid"].ToString();
                Session["wechat_openid"] = model.OpenId;
            }
            else
            {
                if (Session["wechat_openid"] != null)
                {
                    logger.Info("already has wechat openid stored.");
                    model.OpenId = Session["wechat_openid"] != null ? Session["wechat_openid"].ToString() : "";
                }
                else
                {
                    string code = Request["code"];
                    if (!string.IsNullOrEmpty(code))
                    {
                        logger.Info("new request from wechat public account, code is " + code);
                        AccessToken weChatAccessToken = AuthHelper.GetAccessToken(PersistentValueManager.config, code);
                        if (weChatAccessToken != null)
                        {
                            logger.Info("get wechat account openid by code " + code);
                            model.OpenId             = weChatAccessToken.OpenId;
                            Session["wechat_openid"] = model.OpenId;
                        }
                    }
                }
            }
            if (!string.IsNullOrEmpty(model.OpenId))
            {
                logger.Info("Wechat OpenId:" + model.OpenId);
            }
            else
            {
                logger.Error("Wechat OpenId is empty, cannot processing any more.");
            }
            model.nancestr = Guid.NewGuid().ToString().Replace("-", "");
            if (model.nancestr.Length > 32)
            {
                model.nancestr = model.nancestr.Substring(0, 32);
            }
            model.appid     = PersistentValueManager.config.APPID;
            model.timestamp = DateTimeUtil.ConvertDateTimeToInt(DateTime.Now).ToString();
            SortedDictionary <string, string> param = new SortedDictionary <string, string>();
            JSAPITicket ticket = PersistentValueManager.GetWeChatJsApiTicket();

            if (ticket != null)
            {
                param.Add("jsapi_ticket", ticket.Ticket);
                logger.Info("jsapi_ticket:" + ticket.Ticket);
            }
            //param.Add("appId", model.appid);
            param.Add("timestamp", model.timestamp);
            param.Add("noncestr", model.nancestr);
            param.Add("url", Request.Url.AbsoluteUri.ToString());
            logger.Info(Request.Url.AbsoluteUri.ToString());
            //param.Add("jsApiList", "[chooseWXPay]");
            string sign = UrlSignUtil.SHA1_Hash(param);

            model.signature = sign;
            logger.Info("Done Index....");
            return(View(model));
        }
Example #18
0
        public string GenerateActivityQRCode(int agendId, int customerId, int activityId)
        {
            string codePath = string.Empty;

            agendId = agendId > 0 ? agendId : CurrentLoginUser.User.Id;
            AppSettings settings = AppSettings.GetAppSettings();

            using (chargebitEntities db = new chargebitEntities())
            {
                Marketing_Activities activity = (from a in db.Marketing_Activities where a.Id == activityId select a).FirstOrDefault <Marketing_Activities>();
                if (activity == null)
                {
                    throw new KMBitException(string.Format("编号为:{0}的活动不存在", activityId));
                }
                if (activity.CustomerId != customerId)
                {
                    throw new KMBitException(string.Format("编号为{0}的活动不属于编号为{1}的客户", activityId, customerId));
                }
                if (activity.AgentId != agendId)
                {
                    throw new KMBitException(string.Format("编号为{0}的活动不属于编号为{1}的代理的客户的活动", activityId, agendId));
                }

                Customer customer = (from c in db.Customer where c.Id == customerId select c).FirstOrDefault <Customer>();
                codePath = agendId + "\\" + customerId;
                string fileName      = Guid.NewGuid().ToString() + ".png";
                string absPath       = agendId + "/" + customerId + "/" + fileName;
                string fullDirectory = Path.Combine(settings.RootDirectory + "\\" + settings.QRFolder, codePath);
                if (!string.IsNullOrEmpty(activity.CodePath) && File.Exists(Path.Combine(settings.RootDirectory + "\\" + settings.QRFolder, activity.CodePath.Replace('/', '\\'))))
                {
                    return(activity.CodePath);
                }
                string parameter = string.Empty;// string.Format("agentId={0}&customerId={1}&activityId={2}", agendId, customerId, activityId);
                SortedDictionary <string, string> ps = new SortedDictionary <string, string>();
                ps["agentId"]    = activity.AgentId.ToString();
                ps["customerId"] = activity.CustomerId.ToString();
                ps["activityId"] = activity.Id.ToString();

                StringBuilder pstr  = new StringBuilder();
                int           count = 1;
                foreach (KeyValuePair <string, string> p in ps)
                {
                    pstr.Append(p.Key);
                    pstr.Append("=");
                    pstr.Append(p.Value);
                    if (count < ps.Count)
                    {
                        pstr.Append("&");
                    }
                    count++;
                }
                parameter = pstr.ToString();
                pstr.Append("&key=");
                pstr.Append(customer.Token);
                parameter = parameter + "&signature=" + UrlSignUtil.GetMD5(pstr.ToString());
                parameter = KMEncoder.Encode(parameter);
                string codeContent = string.Format("{0}/Product/SaoMa?p={1}", settings.WebURL, parameter);
                QRCodeUtil.CreateQRCode(fullDirectory, fileName, codeContent);
                if (File.Exists(Path.Combine(fullDirectory, fileName)))
                {
                    activity.CodePath = absPath;
                }

                db.SaveChanges();
                return(absPath);
            }
        }
Example #19
0
        public void SendStatusBackToAgentCallback(object oorder)
        {
            if (oorder.GetType() != typeof(Charge_Order))
            {
                return;
            }
            Charge_Order order = oorder as Charge_Order;

            Logger.Info("SendStatusBackToAgentCallback...");
            if (order == null || order.Agent_Id <= 0 || string.IsNullOrEmpty(order.CallBackUrl))
            {
                Logger.Info("Not an agent order, no need to proceed anymore.");
                return;
            }
            Logger.Info(string.Format("Order Id {0}", order.Id.ToString()));
            if (!string.IsNullOrEmpty(order.Client_Order_Id))
            {
                Logger.Info(string.Format("Client OrderId {0}", order.Client_Order_Id.ToString()));
            }
            if (!string.IsNullOrEmpty(order.Out_Order_Id))
            {
                Logger.Info(string.Format("Out Order Id {0}", order.Out_Order_Id.ToString()));
            }
            Logger.Info(string.Format("Order Status {0}", order.Status.ToString()));
            Logger.Info(string.Format("Order Message {0}", order.Message != null?order.Message:""));
            chargebitEntities db = null;

            try
            {
                if (string.IsNullOrEmpty(order.CallBackUrl))
                {
                    Logger.Info("Order callback URL is empty, no need to callback.");
                    return;
                }
                db = new chargebitEntities();
                NameValueCollection col = new NameValueCollection();
                SortedDictionary <string, string> paras = new SortedDictionary <string, string>();
                string orderId = order.Id.ToString();
                string status  = order.Status.ToString();
                string message = order.Message != null ? order.Message : "";
                Users  agent   = (from u in db.Users where u.Id == order.Agent_Id select u).FirstOrDefault <Users>();
                Logger.Info(string.Format("Agent {0}", agent.Email));
                if (agent == null)
                {
                    status  = "3";
                    message = "代理商账户没有找到";
                }
                string token = agent.SecurityStamp;
                paras["OrderId"]       = orderId;
                paras["Status"]        = status;
                paras["ClientOrderId"] = order.Client_Order_Id != null? order.Client_Order_Id:"";
                paras["Message"]       = message;
                string signStr = "";
                foreach (KeyValuePair <string, string> p in paras)
                {
                    if (signStr == string.Empty)
                    {
                        signStr += p.Key.ToLower() + "=" + p.Value;
                    }
                    else
                    {
                        signStr += "&" + p.Key.ToLower() + "=" + p.Value;
                    }
                }
                Logger.Info(string.Format("Post data {1} to {0}", order.CallBackUrl, signStr));
                signStr += "&key=" + token;
                Logger.Info(string.Format("String to be signed {0}", signStr));
                Logger.Info(string.Format("Signature is {0}", UrlSignUtil.GetMD5(signStr)));
                paras["Sign"] = UrlSignUtil.GetMD5(signStr);
                foreach (KeyValuePair <string, string> p in paras)
                {
                    col[p.Key] = p.Value;
                }
                Charge_Order dborder = (from o in db.Charge_Order where o.Id == order.Id select o).FirstOrDefault <Charge_Order>();
                string       resStr  = HttpSercice.PostHttpRequest(order.CallBackUrl, col, WeChat.Adapter.Requests.RequestType.POST, null);
                if (resStr == null)
                {
                    dborder.PushedTimes += 1;
                    dborder.Received     = true;
                }
                else if (resStr.ToLower() == "fail")
                {
                    dborder.PushedTimes += 1;
                    dborder.Received     = false;
                }
                db.SaveChanges();
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
            }
            finally
            {
                if (db != null)
                {
                    db.Dispose();
                }

                Logger.Info("Leaving SendStatusBackToAgentCallback...");
            }
        }
Example #20
0
        public void GenerateQRCodeForMarketingOrders(int activityTaocanId)
        {
            AppSettings settings = AppSettings.GetAppSettings();
            string      qrfolder = System.IO.Path.Combine(settings.RootDirectory, settings.QRFolder);

            using (chargebitEntities db = new chargebitEntities())
            {
                Marketing_Activities    activity = null;
                Customer                customer = null;
                List <Marketing_Orders> orders   = (from o in db.Marketing_Orders where o.ActivityTaocanId == activityTaocanId select o).ToList <Marketing_Orders>();
                if (orders.Count > 0)
                {
                    foreach (Marketing_Orders order in orders)
                    {
                        if (order.Used)
                        {
                            continue;
                        }
                        if (!string.IsNullOrEmpty(order.CodePath))
                        {
                            string tmpPhysicalPath = Path.Combine(settings.RootDirectory, order.CodePath.Replace('/', '\\'));
                            if (File.Exists(tmpPhysicalPath))
                            {
                                continue;
                            }
                        }
                        if (activity == null)
                        {
                            activity = (from a in db.Marketing_Activities where a.Id == order.ActivityId select a).FirstOrDefault <Marketing_Activities>();
                            if (activity == null)
                            {
                                continue;
                            }

                            if (customer == null)
                            {
                                customer = (from c in db.Customer where c.Id == activity.CustomerId select c).FirstOrDefault <Customer>();
                            }
                        }

                        string midPhysicalPath = string.Format("{0}\\{1}", activity.AgentId, activity.CustomerId);
                        string fileName        = Guid.NewGuid().ToString() + ".png";
                        string urlAbsPath      = string.Format("{0}/{1}/{2}", activity.AgentId, activity.CustomerId, fileName);
                        string parameter       = string.Empty; //string.Format("agentId={0}&customerId={1}&activityId={2}&activityOrderId={3}", activity.AgentId, activity.CustomerId,activity.Id,order.Id);
                        SortedDictionary <string, string> ps = new SortedDictionary <string, string>();
                        ps["agentId"]         = activity.AgentId.ToString();
                        ps["customerId"]      = activity.CustomerId.ToString();
                        ps["activityId"]      = activity.Id.ToString();
                        ps["activityOrderId"] = order.Id.ToString();
                        StringBuilder pstr  = new StringBuilder();
                        int           count = 1;
                        foreach (KeyValuePair <string, string> p in ps)
                        {
                            pstr.Append(p.Key);
                            pstr.Append("=");
                            pstr.Append(p.Value);
                            if (count < ps.Count)
                            {
                                pstr.Append("&");
                            }
                            count++;
                        }
                        parameter = pstr.ToString();
                        pstr.Append("&key=");
                        pstr.Append(customer.Token);
                        parameter = parameter + "&signature=" + UrlSignUtil.GetMD5(pstr.ToString());
                        parameter = KMEncoder.Encode(parameter);
                        string codeContent = string.Format("{0}/Product/SaoMa?p={1}", settings.WebURL, parameter);
                        string fullFolder  = Path.Combine(qrfolder, midPhysicalPath);
                        QRCodeUtil.CreateQRCode(fullFolder, fileName, codeContent);
                        if (File.Exists(Path.Combine(fullFolder, fileName)))
                        {
                            order.CodePath = urlAbsPath;
                        }
                    }

                    db.SaveChanges();
                }
            }
        }
Example #21
0
        public async Task <bool> CreateAgency(Users dbUser)
        {
            ApplicationUserManager manager = null;

            if (!CurrentLoginUser.Permission.CREATE_USER)
            {
                throw new KMBitException("没有权限创建代理商");
            }
            int          total        = 0;
            List <BUser> existedUsers = FindAgencies(0, dbUser.Email, null, 0, 0, out total);

            if (existedUsers.Count > 0)
            {
                throw new KMBitException(string.Format("Email:{0}已经注册过"));
            }

            bool ret = false;

            try
            {
                manager = new ApplicationUserManager(new ApplicationUserStore(new chargebitEntities()));
                ApplicationUser appUser = new ApplicationUser();
                appUser.Address           = dbUser.Address;
                appUser.AccessFailedCount = 0;
                appUser.City_id           = dbUser.City_id;
                appUser.CreatedBy         = dbUser.CreatedBy;
                appUser.Credit_amount     = dbUser.Credit_amount;
                appUser.Description       = dbUser.Description;
                appUser.Email             = dbUser.Email;
                appUser.UserName          = dbUser.Email;
                appUser.Name         = dbUser.Name;
                appUser.PasswordHash = dbUser.PasswordHash;
                appUser.Pay_type     = dbUser.Pay_type;
                appUser.PhoneNumber  = dbUser.PhoneNumber;
                appUser.Province_id  = dbUser.Province_id;
                appUser.Regtime      = dbUser.Regtime;
                appUser.Enabled      = dbUser.Enabled;
                appUser.AccessToken  = UrlSignUtil.GetMD5(Guid.NewGuid().ToString());
                if (appUser.Regtime == 0)
                {
                    appUser.Regtime = DateTimeUtil.ConvertDateTimeToInt(DateTime.Now);
                }
                appUser.Type        = dbUser.Type;
                appUser.Update_time = appUser.Regtime;
                appUser.UserName    = dbUser.Email;
                var result = await manager.CreateAsync(appUser, dbUser.PasswordHash);

                if (result.Succeeded)
                {
                    ret = true;
                }
            }
            catch { }
            finally
            {
                if (manager != null)
                {
                    manager.Dispose();
                }
            }

            return(ret);
        }