public void GoPay(string tnum, string sign) { if (tnum.IsNullOrEmpty() || sign.IsNullOrEmpty()) { Response.Redirect("/mobile/error.html?msg=参数错误[01]"); return; } if ((tnum + "NewPay").GetMD5().Substring(8, 8) != sign) { Response.Redirect("/mobile/error.html?msg=参数错误[00]"); return; } Orders Orders = Entity.Orders.FirstOrDefault(o => o.TNum == tnum); Users baseUsers = Entity.Users.FirstOrDefault(n => n.Id == Orders.UId); if (baseUsers == null)//用户不存在 { Response.Redirect("/mobile/error.html?msg=用户不存在或信息有误"); return; } if (baseUsers.State != 1)//用户被锁定 { Response.Redirect("/mobile/error.html?msg=用户被锁定"); return; } if (Orders == null) { Response.Redirect("/mobile/error.html?msg=订单不存在"); return; } //if (Orders.InState != 1) //{ // Response.Redirect("/mobile/error.html?msg=订单状态异常"); // return; //} if (Orders.TType != 6 && Orders.TType != 10) { Response.Redirect("/mobile/error.html?msg=订单类型错误"); return; } if (Orders.PayState == 1) { Response.Redirect("/mobile/error.html?msg=订单已支付"); return; } PayConfig PayConfig = Entity.PayConfig.FirstOrDefault(n => n.DllName == "AliPay"); if (PayConfig == null) { Response.Redirect("/mobile/error.html?msg=无支付通道"); return; } //获取支付方式并提交 string[] PayConfigArr = PayConfig.QueryArray.Split(new char[] { ',' });//接口信息 商户号,密钥,支付宝号 if (PayConfigArr.Length != 3) { Response.Redirect("/mobile/error.html?msg=配置错误"); return; } AliPayCom Com = new AliPayCom(); string app_id = PayConfigArr[2]; Com.app_id = app_id; Com.method = "alipay.trade.precreate"; Com.notify_url = PayPath + "/paycenter/alipay/alipaynotice.html"; Dictionary <string, string> Dic = new Dictionary <string, string>(); Dic.Add("out_trade_no", Orders.TNum); Dic.Add("total_amount", Orders.Amoney.ToMoney()); Dic.Add("timeout_express ", "30m"); string subject = "用户升级VIP"; if (Orders.TType == 10) { subject = "用户升级代理商"; } Dic.Add("subject", subject); string response = Com.Send(Dic); JObject JObj = (JObject)JsonConvert.DeserializeObject(response); JObject Obj = (JObject)JObj["alipay_trade_precreate_response"]; string code = Obj["code"].ToString(); if (code == "10000") { string qr_code = Obj["qr_code"].ToString(); Response.Redirect(qr_code); } else { string msg = Obj["msg"].ToString(); Response.Redirect("/mobile/error.html?msg=" + msg); } }
//支付宝直接支付 public void AlipayNotice() { SortedDictionary <string, string> sPara = new SortedDictionary <string, string>(); NameValueCollection coll = Request.Form; String[] requestItem = coll.AllKeys; int i = 0; for (i = 0; i < requestItem.Length; i++) { sPara.Add(requestItem[i], Request.Form[requestItem[i]]); } if (sPara.Count > 0) { string out_trade_no = Request.Form["out_trade_no"]; //商户订单号 string trade_no = Request.Form["trade_no"]; //支付宝交易号 Orders Orders = Entity.Orders.FirstOrDefault(n => n.TNum == out_trade_no); if (Orders == null) { Response.Write("E4"); return; } PayConfig PayConfig = Entity.PayConfig.FirstOrDefault(n => n.Id == Orders.PayWay && n.State == 1); if (PayConfig == null) { Response.Write("E0"); return; } string[] PayConfigArr = PayConfig.QueryArray.Split(new char[] { ',' });//接口信息 商户号,密钥,支付宝号 if (PayConfigArr.Length != 3) { Response.Write("E1"); return; } if (Orders.TType != 6 && Orders.TType != 10) { Response.Write("E1"); return; } if (Orders.PayState == 1)//已支付 { Response.Write("0000"); return; } //================================================ //记录通知信息 string AllString = Request.Form.ToString(); AllString = System.Web.HttpUtility.UrlDecode(AllString); PayLog PayLog = new PayLog(); PayLog.PId = PayConfig.Id; PayLog.OId = out_trade_no; PayLog.TId = trade_no; PayLog.Amount = Orders.Amoney; PayLog.Way = "POST"; PayLog.AddTime = DateTime.Now; PayLog.Data = AllString; PayLog.State = 1; Entity.PayLog.AddObject(PayLog); Entity.SaveChanges(); //================================================ Dictionary <string, string> Dic = Utils.FilterPara(sPara, "sign|sign_type"); string SignString = Utils.CreateLinkString(Dic); string sign = sPara["sign"]; string sign_type = sPara["sign_type"]; AliPayCom Com = new AliPayCom(); string app_id = PayConfigArr[2]; Com.app_id = app_id; //========================== //读取公钥 string FilePath = AppDomain.CurrentDomain.BaseDirectory; string file = FilePath + "certs\\"; //========================== //对异步通知进行验签 if (Com.CheckSign(SignString, sign)) { string trade_status = sPara["trade_status"]; if (trade_status == "TRADE_FINISHED") { //退款及关闭处理 //支付完成超退款时间 } else if (trade_status == "TRADE_SUCCESS") { //付款完成后 Orders = Orders.PaySuccess(Entity); } else { } Response.Write("success");//请不要修改或删除 } else { Response.Write("E99"); } } else { Response.Write("E0"); return; } }