const string ZhifuBaoUrl = "http://Gate.ekepay.com/paybank.aspx"; //支付宝 protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { if (string.IsNullOrEmpty(Request.QueryString["tok"])) { Response.End(); return; } //构建支付链接 //根据订单唯一id获取订单信息 IRecordTempService recordService = IoC.Resolve <IRecordTempService>(); var item = recordService.GetAll().Where(c => c.Guid == Request.QueryString["tok"]).FirstOrDefault(); if (null == item) { Response.End(); return; } if (item.IsCompled || !item.IsEnable) { Response.Write("请勿重复提交订单!"); return; } Eka365pay(item.MY18FY, "http://" + Request.Url.Host + ":" + Request.Url.Port + "/views/pay/yiyoufu/pay/Receive.aspx", item); //流程工作完成后调用Eka365pay方法,参数为:(String 订单号,String 返回地址--这里默认为:http://"+Request.Url.Host+":"+Request.Url.Port+"/Eka365pay/"+"Receive.aspx) //实例:Eka365pay("012345674980123456", "http://" + Request.Url.Host + ":" + Request.Url.Port + "/Eka365pay/" + "Receive.aspx"); } }
protected void btnSubmit_Click(object sender, EventArgs e) { //if (!Utils.IsShoping()) { // Alert("每天的充值处理时间为:早上 9:00 至 次日凌晨 2:00"); // return ; //} string radBank = Request.Form["bankCode"]; decimal monery; string inStr = Request.Params["amount"]; if (!decimal.TryParse(inStr, out monery)) { Alert("请输入正确的参数"); return; } if (radBank == "ZFB") { //跳转至支付宝界面 Response.Redirect("/Views/Users/AutoRechargeCnt.aspx?amount=" + monery + "&bankCode=" + radBank); return; } InintSettings();//获取充值设置 if (monery < Min || monery > Max) { Alert(" 单笔充值限额:最低:" + Min + "元,最高:" + Max + "元"); return; } //验证码判断 //var hour = DateTime.Now.Hour; //if (hour > 2 && hour < 9) //{ // Alert("该时间段不能充值,请在早上 9:00 至 次日凌晨2:00进行充值"); //} //else //{ IRecordTempService recordService = IoC.Resolve <IRecordTempService>(); var item = recordService.Create(new BasicModel.RecordTemp() { Guid = Guid.NewGuid().ToString(), IsCompled = false, IsEnable = true, OccDate = DateTime.Now, TradeAmt = monery, UserId = CookUserInfo.Id, MY18PT = radBank, MY18FY = "R" + Utils.BuilderNum() }); recordService.Save(); //跳转 Response.Redirect("/Views/pay/zhifu/PayConfim.aspx?orderid=" + item.Guid); //} }
protected void lkDel_Command(object sender, CommandEventArgs e) { if (e.CommandArgument == null) { return; } int id = Convert.ToInt32(e.CommandArgument.ToString()); IRecordTempService recordService = IoC.Resolve <IRecordTempService>(); recordService.Delete(id); JsAlert("删除成功!"); this.Bind(); }
// public NewRecordViewModel(IRecordTempService recordTempService, IWindowManager windowManager) { _recordTempService = recordTempService; _windowManager = windowManager; Date = DateTime.Today; SelectedNumber = "-"; SelectedLetter = "-"; // Command = new RelayCommand(executemethod, canexecutemethod); LessonList = new List <string>(); // }
public EditRecordViewModel(Record record, Func <Record, Task> saveChanges, IRecordTempService recordTempService = null, IRecordService recordService = null) { _record = record; _recordTempService = recordTempService; _recordService = recordService; _saveChanges = saveChanges; Teacher = record.Teacher; Room = record.Room; Note = record.Note; SelectedNumber = record.ClassNumber; SelectedLetter = record.ClassLetter; Lessons = record.Lessons; Date = record.Date; }
/// <summary> /// 提现数据列表绑定 /// </summary> private void Bind() { string code = this.txtUserCode.Text.Trim(); //用户编号 string seriaNo = this.txtSeriaNo.Text.Trim(); //业务单号 string beginDate = this.txtBeginDate.Text.Trim(); //业务开始日期 string endDate = this.txtEndDate.Text.Trim(); //业务截止日期 int isCompled = Convert.ToInt32(this.drpState.SelectedValue); //状态 int recordCount = 0; IRecordTempService sysUserBalanceDetailService = IoC.Resolve <IRecordTempService>(); List <RecordTempDTO> result = sysUserBalanceDetailService.GetRechingHis(code, seriaNo, beginDate, endDate, isCompled, pagerControl.CurrentPageIndex, pagerControl.PageSize, ref recordCount); this.repList.DataSource = result; this.repList.DataBind(); this.pagerControl.RecordCount = recordCount; }
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { if (string.IsNullOrEmpty(Request.QueryString["orderid"])) { Response.End(); return; } //构建支付链接 //根据订单唯一id获取订单信息 IRecordTempService recordService = IoC.Resolve <IRecordTempService>(); var item = recordService.GetAll().Where(c => c.Guid == Request.QueryString["orderid"]).FirstOrDefault(); if (null == item || item.IsCompled) { Alert("不存或已完成订单,请不要重复提交!"); return; } //根据相关参数构建 OpenUrl = BuilderMoBaoUrl(item); } }
public PublishViewModel(IRecordTempService recordTempService, IWindowManager windowManager, NewRecordViewModel newRecordView) //, NewRecordViewModel newRecordView { _recordTempService = recordTempService; _windowManager = windowManager; _newRecordView = newRecordView; }
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { //此处可增加一个日志来记录通知数据,便于调试接口。 Dictionary <string, string> dict = GetRequestPost(); // 判断是否有带返回参数 if (dict.Count > 0) { // 验证签名,先获取到签名源字符串和签名字符串后,做签名验证。 string srcString = string.Format("apiName={0}¬ifyTime={1}&tradeAmt={2}&merchNo={3}&merchParam={4}&orderNo={5}&tradeDate={6}&accNo={7}&accDate={8}&orderStatus={9}", dict["apiName"], dict["notifyTime"], dict["tradeAmt"], dict["merchNo"], dict["merchParam"], dict["orderNo"], dict["tradeDate"], dict["accNo"], dict["accDate"], dict["orderStatus"]); string sigString = dict["signMsg"]; string notifyType = dict["notifyType"]; //if (Int32.Parse(notifyType) == 1) //{ // sigString = System.Web.HttpUtility.UrlDecode(sigString); //} sigString = sigString.Replace("\r", "").Replace("\n", ""); bool verifyResult = MobaopaySignUtil.Instance.verifyData(sigString, srcString); veryfyDesc = verifyResult ? "签名验证通过" : "签名验证失败"; // 取出用于显示的各个数据,这里只是为了演示,实际应用中应该不需要把这些数据显示到页面上。 apiName = dict["apiName"]; notifyTime = dict["notifyTime"]; tradeAmt = dict["tradeAmt"]; //交易金额 merchNo = dict["merchNo"]; //商户号 merchParam = dict["merchParam"]; //商户参数,来自支付请求中的商户参数,原物返回,方便商户异步处理需要传递数据 orderNo = dict["orderNo"]; //商户订单号 tradeDate = dict["tradeDate"]; //商户交易日期 accNo = dict["accNo"]; //支付平台订单号 accDate = dict["accDate"]; //支付平台订单日期 orderStatus = dict["orderStatus"]; //订单状态:0-未支付,1-成功,2-失败;实际上只有成功才会发送通知 if (verifyResult) { /** * 验证通过后,请在这里加上商户自己的业务逻辑处理代码. * 比如: * 1、根据商户订单号取出订单数据 * 2、根据订单状态判断该订单是否已处理(因为通知会收到多次),避免重复处理 * 3、比对一下订单数据和通知数据是否一致,例如金额等 * 4、接下来修改订单状态为已支付或待发货 * 5、... */ try { //处理订单 if (orderStatus == "1") //支付成功 { //构建支付链接 //根据订单唯一id获取订单信息 IRecordTempService recordService = IoC.Resolve <IRecordTempService>(); /** * //处理订单 * item.IsCompled = true; * item.MY18oid = accNo; * item.MY18M = tradeAmt; * item.MY18DT = accDate; */ decimal dmTradeAmt; if (!decimal.TryParse(tradeAmt, out dmTradeAmt)) { Response.Write("非法请求!"); return; } Ytg.Scheduler.Comm.LogManager.Info(string.Format("接受订单请求:{0}", orderNo)); int stauts; var item = recordService.Compled_RecordTemp(orderNo, accNo, dmTradeAmt, accDate, out stauts); Ytg.Scheduler.Comm.LogManager.Info(string.Format("查询订单状态:{0}", stauts)); if (stauts == -1) { Response.Write("订单已处理成功!"); } else if (stauts == -3) { Response.Write("订单已过期!"); } else if (stauts == -2) { Response.Write("非法请求!"); } else { //获取当前数据 Ytg.Scheduler.Comm.LogManager.Info(string.Format("处理订单逻辑:{0}", stauts)); //增加用户余额,处理充值逻辑 if (ManagerCallBackLogic(item)) { recordService.Save();//保存 //逻辑处理完成,跳转 //Response.Write("恭喜您,充值成功!"); //插入充值成功消息 try { IMessageService messageService = IoC.Resolve <IMessageService>(); messageService.Create(new Message() { FormUserId = -1, MessageType = 8, OccDate = DateTime.Now, Status = 0, Title = "充值成功提示", MessageContent = string.Format("您通过在线充值{0}元已经成功到账!", item.TradeAmt), ToUserId = item.UserId }); messageService.Save(); } catch (Exception ex) { } //插入系统消息表 Response.Redirect("notify.aspx", true); // 回写‘SUCCESS’方式一: 重定向到一个专门用于处理回写‘SUCCESS’的页面,这样可以保证输出内容中只有'SUCCESS'这个字符串。 } else { AppendLog("充值失败:请求参数:" + srcString); Response.Write("充值失败,请联系在线客服确认是否充值成功!"); } } } } catch (Exception ex) { AppendLog("充值处理异常:" + ex.Message + " 请求参数:" + srcString); Response.Write("充值异常,请联系在线客服确认是否充值成功!"); } } } else { Response.Write("无通知参数"); AppendLog("无通知参数:"); } } }
protected void Page_Load(object sender, EventArgs e) { if (string.IsNullOrEmpty(Request.QueryString["tok"])) { Response.End(); return; } //构建支付链接 //根据订单唯一id获取订单信息 IRecordTempService recordService = IoC.Resolve<IRecordTempService>(); var item = recordService.GetAll().Where(c => c.Guid == Request.QueryString["tok"]).FirstOrDefault(); if (null == item) { Response.End(); return; } if (item.IsCompled || !item.IsEnable) { Response.Write("请勿重复提交订单!"); return; } var userAmt = Math.Round(item.TradeAmt, 2).ToString(); showProce = userAmt; if (userAmt.IndexOf(".") < 0) userAmt = userAmt + ".00"; if (!IsPostBack) { try { /////////////////////////////////接收表单提交参数//////////////////////////////////// ////////////////////////To receive the parameter form HTML form////////////////////// string interface_version = "V3.0";//Request.Form["interface_version"].ToString().Trim(); string service_type = "wxpay";//Request.Form["service_type"].ToString().Trim(); string sign_type = "RSA-S";//Request.Form["sign_type"].ToString().Trim(); string merchant_code = Ytg.ServerWeb.Views.pay.zhifu.ZhiFuPayConfig.Merchant_code;// Request.Form["merchant_code"].ToString().Trim(); string order_no = item.MY18FY;//Request.Form["order_no"].ToString().Trim(); string order_time = item.OccDate.ToString("yyyy-MM-dd HH:mm:ss"); //Request.Form["order_time"].ToString().Trim(); string order_amount = userAmt;// Request.Form["order_amount"].ToString().Trim(); string product_name = "乐诚网在线充值";//Request.Form["product_name"].ToString().Trim(); string product_code = "mhpro";//Request.Form["product_code"].ToString().Trim(); string product_num = "1";// Request.Form["product_num"].ToString().Trim(); string product_desc = "";//Request.Form["product_desc"].ToString().Trim(); string extra_return_param = "";// Request.Form["extra_return_param"].ToString().Trim(); string extend_param = "";//Request.Form["extend_param"].ToString().Trim(); string notify_url = Ytg.ServerWeb.Views.pay.zhifu.ZhiFuPayConfig.Notify_url;//Request.Form["notify_url"].ToString().Trim(); ////////////////组装签名参数////////////////// string signStr = ""; if (extend_param != "") { signStr = signStr + "extend_param=" + extend_param + "&"; } if (extra_return_param != "") { signStr = signStr + "extra_return_param=" + extra_return_param + "&"; } if (interface_version != "") { signStr = signStr + "interface_version=" + interface_version + "&"; } if (merchant_code != "") { signStr = signStr + "merchant_code=" + merchant_code + "&"; } if (notify_url != "") { signStr = signStr + "notify_url=" + notify_url + "&"; } if (order_amount != "") { signStr = signStr + "order_amount=" + order_amount + "&"; } if (order_no != "") { signStr = signStr + "order_no=" + order_no + "&"; } if (order_time != "") { signStr = signStr + "order_time=" + order_time + "&"; } if (product_code != "") { signStr = signStr + "product_code=" + product_code + "&"; } if (product_desc != "") { signStr = signStr + "product_desc=" + product_desc + "&"; } if (product_name != "") { signStr = signStr + "product_name=" + product_name + "&"; } if (product_num != "") { signStr = signStr + "product_num=" + product_num + "&"; } if (service_type != "") { signStr = signStr + "service_type=" + service_type; } if (sign_type == "RSA-S")//RSA-S签名方法 { //商家私钥 string merPriKey = ZhiFuPayConfig.Merchant_private_key;//"MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBALf/+xHa1fDTCsLYPJLHy80aWq3djuV1T34sEsjp7UpLmV9zmOVMYXsoFNKQIcEzei4QdaqnVknzmIl7n1oXmAgHaSUF3qHjCttscDZcTWyrbXKSNr8arHv8hGJrfNB/Ea/+oSTIY7H5cAtWg6VmoPCHvqjafW8/UP60PdqYewrtAgMBAAECgYEAofXhsyK0RKoPg9jA4NabLuuuu/IU8ScklMQIuO8oHsiStXFUOSnVeImcYofaHmzIdDmqyU9IZgnUz9eQOcYg3BotUdUPcGgoqAqDVtmftqjmldP6F6urFpXBazqBrrfJVIgLyNw4PGK6/EmdQxBEtqqgXppRv/ZVZzZPkwObEuECQQDenAam9eAuJYveHtAthkusutsVG5E3gJiXhRhoAqiSQC9mXLTgaWV7zJyA5zYPMvh6IviX/7H+Bqp14lT9wctFAkEA05ljSYShWTCFThtJxJ2d8zq6xCjBgETAdhiH85O/VrdKpwITV/6psByUKp42IdqMJwOaBgnnct8iDK/TAJLniQJABdo+RodyVGRCUB2pRXkhZjInbl+iKr5jxKAIKzveqLGtTViknL3IoD+Z4b2yayXg6H0g4gYj7NTKCH1h1KYSrQJBALbgbcg/YbeU0NF1kibk1ns9+ebJFpvGT9SBVRZ2TjsjBNkcWR2HEp8LxB6lSEGwActCOJ8Zdjh4kpQGbcWkMYkCQAXBTFiyyImO+sfCccVuDSsWS+9jrc5KadHGIvhfoRjIj2VuUKzJ+mXbmXuXnOYmsAefjnMCI6gGtaqkzl527tw="; //私钥转换成C#专用私钥 merPriKey = testOrder.wechart.HttpHelp.RSAPrivateKeyJava2DotNet(merPriKey); //签名 string signData = testOrder.wechart.HttpHelp.RSASign(signStr, merPriKey); //将signData进行UrlEncode编码 signData = HttpUtility.UrlEncode(signData); //组装字符串 string para = signStr + "&sign_type=" + sign_type + "&sign=" + signData; //将字符串发送到Dinpay网关 string _xml = testOrder.wechart.HttpHelp.HttpPost("https://api.dinpay.com/gateway/api/weixin", para); //将同步返回的xml中的参数提取出来 var el = XElement.Load(new StringReader(_xml)); //将XML中的参数逐个提取出来 var qrcode1 = el.XPathSelectElement("/response/trade/qrcode"); var resp_code1 = el.XPathSelectElement("/response/resp_code"); var resp_desc1 = el.XPathSelectElement("/response/resp_desc"); var dinpaysign1 = el.XPathSelectElement("/response/sign"); if (qrcode1 == null) { //Response.Write("状态:" + _xml + "<br/>"); Response.End(); } //去掉首尾的标签并转换成string string qrcode = Regex.Match(qrcode1.ToString(), "(?<=>).*?(?=<)").Value; //二维码链接 string resp_code = Regex.Match(resp_code1.ToString(), "(?<=>).*?(?=<)").Value; string resp_desc = Regex.Match(resp_desc1.ToString(), "(?<=>).*?(?=<)").Value; string dinpaysign = Regex.Match(dinpaysign1.ToString(), "(?<=>).*?(?=<)").Value; string signsrc = "qrcode=" + qrcode + "&resp_code=" + resp_code + "&resp_desc=" + resp_desc; //使用智付公钥对返回的数据验签 try { //将智付公钥转换成C#专用格式 dinpayPubKey = testOrder.wechart.HttpHelp.RSAPublicKeyJava2DotNet(dinpayPubKey); } catch (Exception ex) { // Response.Write(ex.Message); } //验签 bool validateResult = testOrder.wechart.HttpHelp.ValidateRsaSign(signsrc, dinpayPubKey, dinpaysign); if (validateResult == false) { Response.Write("失败"); Response.End(); } //验签成功后将支付链接生成二维码 My.Utility.QRCodeHandler qr = new My.Utility.QRCodeHandler(); string path = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + @"/Views/pay/zhifu/wechart/qrcode/"; //文件目录 string qrString = qrcode; //二维码字符串 string logoFilePath = path + "my.png";//商家Logo文件 fileName = "myCode" + Guid.NewGuid().ToString() + ".jpg"; string filePath = path + fileName; //二维码文件名 qr.CreateQRCode(qrcode, "Byte", 6, 6, "H", filePath, true, logoFilePath); //生成二维码 //Response.Write(qrcode+"<br/>"); //Response.Write("结果:" + signsrc + "<br/>"); // Response.Write("验签结果:" + validateResult + "<br/>"); //Response.End(); } else //RSA签名方法 { RSAWithHardware rsa = new RSAWithHardware(); string merPubKeyDir = "D:/1111110166.pfx"; //证书路径 string password = "******"; //证书密码 RSAWithHardware rsaWithH = new RSAWithHardware(); rsaWithH.Init(merPubKeyDir, password, "D:/dinpayRSAKeyVersion");//初始化(version路径需跟证书一致,证书会自动生成version) string signData = rsaWithH.Sign(signStr); //签名 signData = HttpUtility.UrlEncode(signData); //将signData进行UrlEncode编码 //组装字符串 string para = signStr + "&sign_type=" + sign_type + "&sign=" + signData; //将字符串发送到Dinpay网关 string _xml = testOrder.wechart.HttpHelp.HttpPost("https://api.dinpay.com/gateway/api/weixin", para); //将同步返回的xml中的参数提取出来 var el = XElement.Load(new StringReader(_xml)); //将XML中的参数逐个提取出来 var qrcode1 = el.XPathSelectElement("/response/trade/qrcode"); var resp_code1 = el.XPathSelectElement("/response/resp_code"); var resp_desc1 = el.XPathSelectElement("/response/resp_desc"); var dinpaysign1 = el.XPathSelectElement("/response/sign"); if (qrcode1 == null) { Response.Write("错误:" + _xml + "<br/>"); Response.End(); } //去掉首尾的标签并转换成string string qrcode = Regex.Match(qrcode1.ToString(), "(?<=>).*?(?=<)").Value; //二维码链接 string resp_code = Regex.Match(resp_code1.ToString(), "(?<=>).*?(?=<)").Value; string resp_desc = Regex.Match(resp_desc1.ToString(), "(?<=>).*?(?=<)").Value; string dinpaysign = Regex.Match(dinpaysign1.ToString(), "(?<=>).*?(?=<)").Value; //组装验签字符串 string signsrc = "qrcode=" + qrcode + "&resp_code=" + resp_code + "&resp_desc=" + resp_desc; //RSA验签 bool result = rsaWithH.VerifySign("1111110166", signsrc, dinpaysign); if (result == false) { Response.Write("验签失败"); Response.End(); } //验签成功后将支付链接生成二维码 //My.Utility.QRCodeHandler qr = new My.Utility.QRCodeHandler(); //string path = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + @"/Views/pay/zhifu/wechart/qrcode/"; //文件目录 //string qrString = qrcode; //二维码字符串 //string logoFilePath = path + "my.jpg"; //商家Logo路径 //string filePath = path + "myCode.jpg"; //二维码文件名 //qr.CreateQRCode(qrString, "Byte", 6, 6, "H", filePath, true, logoFilePath); //生成二维码 //Response.Write("结果:" + signsrc + "<br/>"); //Response.Write("验签结果:" + result + "<br/>"); //Response.End(); } } finally { } } }
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { if (string.IsNullOrEmpty(Request.QueryString["tok"])) { Response.End(); return; } //构建支付链接 //根据订单唯一id获取订单信息 IRecordTempService recordService = IoC.Resolve <IRecordTempService>(); var item = recordService.GetAll().Where(c => c.Guid == Request.QueryString["tok"]).FirstOrDefault(); if (null == item) { Response.End(); return; } if (item.IsCompled || !item.IsEnable) { Response.Write("请勿重复提交订单!"); return; } var userAmt = Math.Round(item.TradeAmt, 2).ToString(); if (userAmt.IndexOf(".") < 0) { userAmt = userAmt + ".00"; } try { /////////////////////////////////接收表单提交参数////////////////////////////////////// ////////////////////////To receive the parameter form HTML form////////////////////// string input_charset1 = "UTF-8"; //Request.Form["input_charset"].ToString().Trim(); string interface_version1 = "V3.0"; // Request.Form["interface_version"].ToString().Trim(); string merchant_code1 = Ytg.ServerWeb.Views.pay.zhifu.ZhiFuPayConfig.Merchant_code; //Request.Form["merchant_code"].ToString().Trim(); string notify_url1 = Ytg.ServerWeb.Views.pay.zhifu.ZhiFuPayConfig.Notify_url; //Request.Form["notify_url"].ToString().Trim(); string order_amount1 = userAmt; //Request.Form["order_amount"].ToString().Trim(); string order_no1 = item.MY18FY; //Request.Form["order_no"].ToString().Trim(); string order_time1 = item.OccDate.ToString("yyyy-MM-dd HH:mm:ss"); //Request.Form["order_time"].ToString().Trim(); string sign_type1 = "RSA-S"; //Request.Form["sign_type"].ToString().Trim(); string product_code1 = "mhpro"; //Request.Form["product_code"].ToString().Trim(); string product_desc1 = ""; //Request.Form["product_desc"].ToString().Trim(); string product_name1 = "美亚娱乐在线充值"; //Request.Form["product_name"].ToString().Trim(); string product_num1 = "1"; //Request.Form["product_num"].ToString().Trim(); string return_url1 = Ytg.ServerWeb.Views.pay.zhifu.ZhiFuPayConfig.Return_url; //Request.Form["return_url"].ToString().Trim(); string service_type1 = "direct_pay"; //Request.Form["service_type"].ToString().Trim(); string show_url1 = ""; //Request.Form["show_url"].ToString().Trim(); string extend_param1 = ""; //Request.Form["extend_param"].ToString().Trim(); string extra_return_param1 = ""; //Request.Form["extra_return_param"].ToString().Trim(); string bank_code1 = item.MY18PT; //Request.Form["bank_code"].ToString().Trim(); string client_ip1 = Utils.GetIp(); //Request.Form["client_ip"].ToString().Trim(); string redo_flag1 = ""; // Request.Form["redo_flag"].ToString().Trim(); string pay_type1 = ""; //Request.Form["pay_type"].ToString().Trim(); ////////////////组装签名参数////////////////// string signSrc = ""; //组织订单信息 if (bank_code1 != "") { signSrc = signSrc + "bank_code=" + bank_code1 + "&"; } if (client_ip1 != "") { signSrc = signSrc + "client_ip=" + client_ip1 + "&"; } if (extend_param1 != "") { signSrc = signSrc + "extend_param=" + extend_param1 + "&"; } if (extra_return_param1 != "") { signSrc = signSrc + "extra_return_param=" + extra_return_param1 + "&"; } if (input_charset1 != "") { signSrc = signSrc + "input_charset=" + input_charset1 + "&"; } if (interface_version1 != "") { signSrc = signSrc + "interface_version=" + interface_version1 + "&"; } if (merchant_code1 != "") { signSrc = signSrc + "merchant_code=" + merchant_code1 + "&"; } if (notify_url1 != "") { signSrc = signSrc + "notify_url=" + notify_url1 + "&"; } if (order_amount1 != "") { signSrc = signSrc + "order_amount=" + order_amount1 + "&"; } if (order_no1 != "") { signSrc = signSrc + "order_no=" + order_no1 + "&"; } if (order_time1 != "") { signSrc = signSrc + "order_time=" + order_time1 + "&"; } if (pay_type1 != "") { signSrc = signSrc + "pay_type=" + pay_type1 + "&"; } if (product_code1 != "") { signSrc = signSrc + "product_code=" + product_code1 + "&"; } if (product_desc1 != "") { signSrc = signSrc + "product_desc=" + product_desc1 + "&"; } if (product_name1 != "") { signSrc = signSrc + "product_name=" + product_name1 + "&"; } if (product_num1 != "") { signSrc = signSrc + "product_num=" + product_num1 + "&"; } if (redo_flag1 != "") { signSrc = signSrc + "redo_flag=" + redo_flag1 + "&"; } if (return_url1 != "") { signSrc = signSrc + "return_url=" + return_url1 + "&"; } if (service_type1 != "") { signSrc = signSrc + "service_type=" + service_type1; } if (show_url1 != "") { signSrc = signSrc + "&show_url=" + show_url1; } if (sign_type1 == "RSA-S")//RSA-S签名方法 { /** merchant_private_key,商户私钥,商户按照《密钥对获取工具说明》操作并获取商户私钥。获取商户私钥的同时,也要 * 获取商户公钥(merchant_public_key)并且将商户公钥上传到智付商家后台"公钥管理"(如何获取和上传请看《密钥对获取工具说明》), * 不上传商户公钥会导致调试的时候报错“签名错误”。 */ //demo提供的merchant_private_key是测试商户号1111110166的商户私钥,请自行获取商户私钥并且替换。 string merchant_private_key = Ytg.ServerWeb.Views.pay.zhifu.ZhiFuPayConfig.Merchant_private_key;// "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBALf/+xHa1fDTCsLYPJLHy80aWq3djuV1T34sEsjp7UpLmV9zmOVMYXsoFNKQIcEzei4QdaqnVknzmIl7n1oXmAgHaSUF3qHjCttscDZcTWyrbXKSNr8arHv8hGJrfNB/Ea/+oSTIY7H5cAtWg6VmoPCHvqjafW8/UP60PdqYewrtAgMBAAECgYEAofXhsyK0RKoPg9jA4NabLuuuu/IU8ScklMQIuO8oHsiStXFUOSnVeImcYofaHmzIdDmqyU9IZgnUz9eQOcYg3BotUdUPcGgoqAqDVtmftqjmldP6F6urFpXBazqBrrfJVIgLyNw4PGK6/EmdQxBEtqqgXppRv/ZVZzZPkwObEuECQQDenAam9eAuJYveHtAthkusutsVG5E3gJiXhRhoAqiSQC9mXLTgaWV7zJyA5zYPMvh6IviX/7H+Bqp14lT9wctFAkEA05ljSYShWTCFThtJxJ2d8zq6xCjBgETAdhiH85O/VrdKpwITV/6psByUKp42IdqMJwOaBgnnct8iDK/TAJLniQJABdo+RodyVGRCUB2pRXkhZjInbl+iKr5jxKAIKzveqLGtTViknL3IoD+Z4b2yayXg6H0g4gYj7NTKCH1h1KYSrQJBALbgbcg/YbeU0NF1kibk1ns9+ebJFpvGT9SBVRZ2TjsjBNkcWR2HEp8LxB6lSEGwActCOJ8Zdjh4kpQGbcWkMYkCQAXBTFiyyImO+sfCccVuDSsWS+9jrc5KadHGIvhfoRjIj2VuUKzJ+mXbmXuXnOYmsAefjnMCI6gGtaqkzl527tw="; //私钥转换成C#专用私钥 merchant_private_key = testOrder.HttpHelp.RSAPrivateKeyJava2DotNet(merchant_private_key); //签名 string signData = testOrder.HttpHelp.RSASign(signSrc, merchant_private_key); sign.Value = signData; } else //RSA签名方法 { RSAWithHardware rsa = new RSAWithHardware(); string merPubKeyDir = "D:/1111110166.pfx"; //证书路径 string password = "******"; //证书密码 RSAWithHardware rsaWithH = new RSAWithHardware(); rsaWithH.Init(merPubKeyDir, password, "D:/dinpayRSAKeyVersion"); //初始化 string signData = rsaWithH.Sign(signSrc); //签名 sign.Value = signData; } merchant_code.Value = merchant_code1; bank_code.Value = bank_code1; order_no.Value = order_no1; order_amount.Value = order_amount1; service_type.Value = service_type1; input_charset.Value = input_charset1; notify_url.Value = notify_url1; interface_version.Value = interface_version1; sign_type.Value = sign_type1; order_time.Value = order_time1; product_name.Value = product_name1; client_ip.Value = client_ip1; extend_param.Value = extend_param1; extra_return_param.Value = extra_return_param1; product_code.Value = product_code1; product_desc.Value = product_desc1; product_num.Value = product_num1; return_url.Value = return_url1; show_url.Value = show_url1; redo_flag.Value = redo_flag1; pay_type.Value = pay_type1; } finally { } } }
protected void Page_Load(object sender, EventArgs e) { String key = ConfigurationManager.AppSettings["ekakey"]; //配置文件密钥 //返回参数 String orderid = Request["orderid"]; //返回订单号 String opstate = Request["opstate"]; //返回处理结果 String ovalue = Request["ovalue"]; //返回实际充值金额 String sign = Request["sign"]; //返回签名 String ekaorderID = Request["sysorderid"]; //亿卡录入时产生流水号。 String ekatime = Request["systime"]; //亿卡处理时间。 String attach = Request["attach"]; //上行附加信息 String msg = Request["msg"]; //亿卡返回订单处理消息 //http://pay.cccwsm.cn/views/pay/yiyoufu/pay/Receive.aspx?orderid=R9C97BCE0F74C7467&opstate=0&ovalue=1&sysorderid=1604012306249990415&systime=2016-04-01+23%3a06%3a38&attach=&msg=& String param = String.Format("orderid={0}&opstate={1}&ovalue={2}{3}", orderid, opstate, ovalue, key);//组织参数 //比对签名是否有效 if (sign.Equals(FormsAuthentication.HashPasswordForStoringInConfigFile(param, "MD5").ToLower())) { //执行操作方法 if (opstate.Equals("0") || opstate.Equals("-3")) { //操作流程成功的情况 // //构建支付链接 Ytg.Scheduler.Comm.LogManager.Info(orderid + " " + opstate); //根据订单唯一id获取订单信息 IRecordTempService recordService = IoC.Resolve <IRecordTempService>(); var item = recordService.GetAll().Where(x => x.MY18FY == orderid && x.IsCompled == false && x.IsEnable).FirstOrDefault(); if (null == item) { Response.Write("请不要重复提交订单!"); return; } decimal dmTradeAmt; if (!decimal.TryParse(ovalue, out dmTradeAmt)) { Response.Write("非法请求!"); return; } if (item.TradeAmt != dmTradeAmt) { Response.Write("非法请求!"); } //处理订单 item.IsCompled = true; item.MY18oid = ekaorderID; item.MY18M = ovalue; item.MY18DT = ekatime; //增加用户余额,处理充值逻辑 if (ManagerCallBackLogic(item)) { recordService.Save();//保存 //逻辑处理完成,跳转 // Response.Redirect("notify.aspx", true); // 回写‘SUCCESS’方式一: 重定向到一个专门用于处理回写‘SUCCESS’的页面,这样可以保证输出内容中只有'SUCCESS'这个字符串。 Response.Write("恭喜您,充值成功!"); //插入充值成功消息 try { IMessageService messageService = IoC.Resolve <IMessageService>(); messageService.Create(new Message() { FormUserId = -1, MessageType = 8, OccDate = DateTime.Now, Status = 0, Title = "充值成功提示", MessageContent = string.Format("您通过在线充值{0}元已经成功到账!", item.TradeAmt), ToUserId = item.UserId }); messageService.Save(); } catch (Exception ex) { } //插入系统消息表 } else { // AppendLog("充值失败:请求参数:" + srcString); Response.Write("充值失败,请联系在线客服确认是否充值成功!"); } } else if (opstate.Equals("-1")) { //卡号密码错误 Response.Write("卡号密码错误!"); } else if (opstate.Equals("-2")) { //卡实际面值和提交时面值不符,卡内实际面值未使用 Response.Write("卡实际面值和提交时面值不符,卡内实际面值未使用!"); } else if (opstate.Equals("-4")) { //卡在提交之前已经被使用 Response.Write("卡在提交之前已经被使用!"); } else if (opstate.Equals("-5")) { //失败,原因请查看msg } } else { //签名无效 Response.Write("非法请求!"); } }
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { if (string.IsNullOrEmpty(Request.QueryString["tok"])) { Response.End(); return; } //构建支付链接 //根据订单唯一id获取订单信息 IRecordTempService recordService = IoC.Resolve<IRecordTempService>(); var item = recordService.GetAll().Where(c => c.Guid == Request.QueryString["tok"]).FirstOrDefault(); if (null == item ) { Response.End(); return; } if (item.IsCompled || !item.IsEnable) { Response.Write("请勿重复提交订单!"); return; } var userAmt = Math.Round(item.TradeAmt, 2).ToString(); if (userAmt.IndexOf(".") < 0) userAmt = userAmt + ".00"; // 组织数据和签名 Dictionary<string, string> payData = new Dictionary<string, string>(); payData.Add("apiName", MobaopayConfig.Mobaopay_apiname_pay); payData.Add("apiVersion", MobaopayConfig.Mobaopay_api_version); payData.Add("platformID", MobaopayConfig.Platform_id); payData.Add("merchNo", MobaopayConfig.Merchant_acc); payData.Add("orderNo", item.MY18FY); payData.Add("tradeDate", item.OccDate.ToString("yyyyMMdd")); payData.Add("amt", userAmt);//string.Format("{0:N}", item.TradeAmt)); payData.Add("merchUrl", MobaopayConfig.Merchant_notify_url); payData.Add("merchParam", "");//Request.Form["merchParam"] payData.Add("tradeSummary", "PayBill");//item.MY18FY /** * bankCode为空,提交表单后浏览器在新窗口显示摩宝支付收银台页面,在这里可以通过账户余额支付或者选择银行支付; * bankCode不为空,取值只能是接口文档中列举的银行代码,提交表单后浏览器将在新窗口直接打开选中银行的支付页面。 * 无论选择上面两种方式中的哪一种,支付成功后收到的通知都是同一接口。 */ payData.Add("bankCode", item.MY18PT); string requestStr = MobaopayMerchant.Instance.generatePayRequest(payData); // 组织签名源数据 payData.Add("signMsg", MobaopaySignUtil.Instance.sign(requestStr)); // 生成签名数据 // 生成表单并自动提交到支付网关。 StringBuilder sbHtml = new StringBuilder(); sbHtml.Append("<form id='mobaopaysubmit' name='mobaopaysubmit' action='" + MobaopayConfig.Mobaopay_gateway + "?' method='post'>"); foreach (KeyValuePair<string, string> temp in payData) { sbHtml.Append("<input type='hidden' name='" + temp.Key + "' value='" + temp.Value + "'/>"); } sbHtml.Append("</form>"); sbHtml.Append("<script>document.forms['mobaopaysubmit'].submit();</script>"); Response.ContentEncoding = System.Text.Encoding.UTF8; Response.Write(sbHtml.ToString()); } }
/* * MY18DT=到帐时间 * MY18oid=支付宝/财付通/网银交易流水号 * MY18JYF=打款人 * MY18FY=附言内容 * MY18M=打款金额 * MY18HF=手续费 * MY18SKR=收款人 * MY18PT=支付方式 * ?MY18DT=2015/06/09&MY18oid=1321611&MY18JYF=和清华&MY18FY=31&MY18M=50&MY18HF=0&MY18SKR=ss&MY18PT=招商银行 */ protected void Page_Load(object sender, EventArgs e) { string MY18DT = Request.Params["MY18DT"]; //到帐时间 string MY18oid = Request.Params["MY18oid"]; //支付宝/财付通/网银交易流水号 string MY18JYF = Request.Params["MY18JYF"]; //打款人 string MY18FY = Request.Params["MY18FY"]; //附言内容 string MY18M = Request.Params["MY18M"]; //打款金额 string MY18HF = Request.Params["MY18HF"]; //手续费 string MY18SKR = Request.Params["MY18SKR"]; //收款人 string MY18PT = Request.Params["MY18PT"]; //支付方式 LogManager.Info(string.Format("MY18DT={0} MY18oid={1} MY18JYF={2} MY18FY={3} MY18M={4} MY18HF={5} MY18SKR={6} MY18PT={7}", MY18DT, MY18oid, MY18JYF, MY18FY, MY18M, MY18HF, MY18SKR, MY18PT)); string ip = Utils.GetIp(); LogManager.Info(ip); if (!YtgConfig.mYtg_User_RechargeIps.Split(',').Contains(ip))//不是允许访问的ip地址列表,怎不做任何处理 { return; } int ourMY18FY; if (!string.IsNullOrEmpty(MY18DT) && !string.IsNullOrEmpty(MY18oid) && int.TryParse(MY18FY, out ourMY18FY)) { IRecordTempService recordService = IoC.Resolve <IRecordTempService>(); var tempItem = recordService.Get(ourMY18FY); if (null == tempItem || tempItem.IsCompled) { return; } tempItem.MY18DT = MY18DT; tempItem.MY18oid = MY18oid; tempItem.MY18JYF = MY18JYF; tempItem.MY18FY = MY18FY; tempItem.MY18M = MY18M; tempItem.MY18HF = MY18HF; tempItem.MY18SKR = MY18SKR; tempItem.MY18PT = MY18PT; bool isCompled = true; //验证充值金额是否和提交订单金额一致 decimal MY18HFDec; if (decimal.TryParse(MY18M, out MY18HFDec)) { if (MY18HFDec == tempItem.TradeAmt) { //订单完成,充值金额和订单金额一致 ISysUserBalanceService balanceService = IoC.Resolve <ISysUserBalanceService>();//用户余额 var balanceitem = balanceService.GetUserBalance(tempItem.UserId); try { //更新用户账变 balanceService.UpdateUserBalance(new Ytg.BasicModel.SysUserBalanceDetail() { BankId = tempItem.BankId, RelevanceNo = tempItem.Id.ToString(), SerialNo = "m" + Utils.BuilderNum(), Status = 0, TradeAmt = tempItem.TradeAmt, TradeType = Ytg.BasicModel.TradeType.用户充值, UserAmt = balanceitem.UserAmt, UserId = tempItem.UserId, }, tempItem.TradeAmt); tempItem.IsCompled = true; recordService.Save(); isCompled = Ytg.ServerWeb.Page.PageCode.UserComm.ManagerRecharge(tempItem.TradeAmt, tempItem.UserId); } catch (Exception ex) { isCompled = false; LogManager.Error("MY18充值失败", ex); } try { if (tempItem.IsCompled) { IMessageService messageService = IoC.Resolve <IMessageService>(); messageService.Create(new Message() { FormUserId = -1, MessageType = 8, OccDate = DateTime.Now, Status = 0, Title = "充值成功提示", MessageContent = string.Format("您通过在线充值{0}元已经成功到账!", tempItem.TradeAmt), ToUserId = balanceitem.UserId }); messageService.Save(); } } catch (Exception ex) { isCompled = false; LogManager.Error("MY18充值失败消息插入失败", ex); } } else { isCompled = false; } } else { isCompled = false; } if (isCompled == true) { //插入系统消息表 Response.Redirect("notify.aspx", true); // 回写‘SUCCESS’方式一: 重定向到一个专门用于处理回写‘SUCCESS’的页面,这样可以保证输出内容中只有'SUCCESS'这个字符串。 } else { Response.Write("充值失败,请联系在线客服确认是否充值成功!"); } } }
public RecordsTempController(IRecordTempService recordTempService, IEmailDataService emailDataService, IEmailSendingService emailSendingService) { _recordTempService = recordTempService; _emailDataService = emailDataService; _emailSendingService = emailSendingService; }
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { //获取智付反馈信息 string merchant_code = Request.Form["merchant_code"].ToString().Trim(); string notify_type = Request.Form["notify_type"].ToString().Trim(); string notify_id = Request.Form["notify_id"].ToString().Trim(); string interface_version = Request.Form["interface_version"].ToString().Trim(); string sign_type = Request.Form["sign_type"].ToString().Trim(); string dinpaysign = Request.Form["sign"].ToString().Trim(); string order_no = Request.Form["order_no"].ToString().Trim(); string order_time = Request.Form["order_time"].ToString().Trim(); string order_amount = Request.Form["order_amount"].ToString().Trim(); string extra_return_param = Request.Form["extra_return_param"]; string trade_no = Request.Form["trade_no"].ToString().Trim(); string trade_time = Request.Form["trade_time"].ToString().Trim(); string trade_status = Request.Form["trade_status"].ToString().Trim(); string bank_seq_no = Request.Form["bank_seq_no"]; /** *签名顺序按照参数名a到z的顺序排序,若遇到相同首字母,则看第二个字母,以此类推, *参数名1=参数值1&参数名2=参数值2&……&参数名n=参数值n **/ //组织订单信息 string signStr = ""; Ytg.Scheduler.Comm.LogManager.Info("signStr\n\t"); if (null != bank_seq_no && bank_seq_no != "") { signStr = signStr + "bank_seq_no=" + bank_seq_no.ToString().Trim() + "&"; } if (null != extra_return_param && extra_return_param != "") { signStr = signStr + "extra_return_param=" + extra_return_param + "&"; } signStr = signStr + "interface_version=V3.0" + "&"; signStr = signStr + "merchant_code=" + merchant_code + "&"; if (null != notify_id && notify_id != "") { signStr = signStr + "notify_id=" + notify_id + "¬ify_type=" + notify_type + "&"; } signStr = signStr + "order_amount=" + order_amount + "&"; signStr = signStr + "order_no=" + order_no + "&"; signStr = signStr + "order_time=" + order_time + "&"; signStr = signStr + "trade_no=" + trade_no + "&"; signStr = signStr + "trade_status=" + trade_status + "&"; if (null != trade_time && trade_time != "") { signStr = signStr + "trade_time=" + trade_time; } Ytg.Scheduler.Comm.LogManager.Info(signStr + "\n\t"); if (sign_type == "RSA-S") //RSA-S的验签方法 { /** * 1)dinpay_public_key,智付公钥,每个商家对应一个固定的智付公钥(不是使用工具生成的密钥merchant_public_key,不要混淆), * 即为智付商家后台"公钥管理"->"智付公钥"里的绿色字符串内容 * 2)demo提供的dinpay_public_key是测试商户号1111110166的智付公钥,请自行复制对应商户号的智付公钥进行调整和替换。 */ string dinpay_public_key = System.Configuration.ConfigurationManager.AppSettings["merchant_public_key"];// "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCKr1fqFErd5gvEJRclnCOqqK55JlCO67JZOOyvijVElMtNhRMDjAHCZWdzdl++L7lAIOxt5l8hmVDBeXj7zNPMZ170LZokL0f7niPa63zn9KF0eV59m+uddzi297GzAqXcdH13hktsVC4EkHNZqSB0I0S9o1D0XGzmvmU64Y7M0QIDAQAB"; //将智付公钥转换成C#专用格式 dinpay_public_key = testOrder.HttpHelp.RSAPublicKeyJava2DotNet(dinpay_public_key); // Ytg.Scheduler.Comm.LogManager.Info(dinpay_public_key + "\n\t"); //验签 bool result = testOrder.HttpHelp.ValidateRsaSign(signStr, dinpay_public_key, dinpaysign); Ytg.Scheduler.Comm.LogManager.Info(result + " " + result + "\n\t"); if (result == true) { //如果验签结果为true,则对订单进行更新 //订单更新完之后打印SUCCESS IRecordTempService recordService = IoC.Resolve <IRecordTempService>(); decimal dmTradeAmt; Ytg.Scheduler.Comm.LogManager.Info(order_amount + " " + order_amount + "\n\t"); if (!decimal.TryParse(order_amount, out dmTradeAmt)) { Response.Write("非法请求!"); return; } Ytg.Scheduler.Comm.LogManager.Info(string.Format("接受订单请求:{0}", order_no)); int stauts; var item = recordService.Compled_RecordTemp(order_no, trade_no, dmTradeAmt, trade_time, out stauts); Ytg.Scheduler.Comm.LogManager.Info(string.Format("查询订单状态:{0}", stauts)); if (stauts == -1) { Response.Write("订单已处理成功!"); } else if (stauts == -3) { Response.Write("订单已过期!"); } else if (stauts == -2) { Response.Write("非法请求!"); } else { //获取当前数据 Ytg.Scheduler.Comm.LogManager.Info(string.Format("处理订单逻辑:{0}", stauts)); //增加用户余额,处理充值逻辑 if (ManagerCallBackLogic(item)) { recordService.Save(); //保存 //逻辑处理完成,跳转 //Response.Write("恭喜您,充值成功!"); //插入充值成功消息 try { IMessageService messageService = IoC.Resolve <IMessageService>(); messageService.Create(new BasicModel.Message() { FormUserId = -1, MessageType = 8, OccDate = DateTime.Now, Status = 0, Title = "充值成功提示", MessageContent = string.Format("您通过在线充值{0}元已经成功到账!", item.TradeAmt), ToUserId = item.UserId }); messageService.Save(); Response.Write("SUCCESS"); } catch (Exception ex) { Ytg.Scheduler.Comm.LogManager.Info(string.Format("处理订单异常:{0}", ex.Message)); } } } } else { //验签失败 Response.Write("验签失败"); } } else //RSA验签方法 { string merPubKeyDir = "D:/1111110166.pfx"; string password = "******"; RSAWithHardware rsaWithH = new RSAWithHardware(); rsaWithH.Init(merPubKeyDir, password, "D:/dinpayRSAKeyVersion"); bool result = rsaWithH.VerifySign("1111110166", signStr, dinpaysign); if (result == true) { //如果验签结果为true,则对订单进行更新 //订单更新完之后必须打印SUCCESS来响应智付服务器以示商户已经正常收到智付服务器发送的异步数据通知,否则智付服务器将会在之后的时间内若干次发送同一笔订单的异步数据!! Response.Write("SUCCESS"); } else { //验签失败 Response.Write("验签失败"); } } } }