protected void Page_Load(object sender, EventArgs e) { //初始化结果及地址 ReturnKQDetailInfo result = new ReturnKQDetailInfo(); string showUrl = "http://" + HttpContext.Current.Request.Url.Authority + "/Pay/PayShow.aspx"; //获取网关账户号 string merchantAcctId = Request["merchantAcctId"].ToString().Trim(); result.MerchantAcctID = merchantAcctId; //设置网关密钥 ///区分大小写 string bossType1 = Request["bossType"].ToString().Trim();//根据获取的支付卡类型判断加载相应的密钥 string key = bossType1 == "0" ? ApplicationSettings.Get("keyValueYD") : bossType1 == "1" ? ApplicationSettings.Get("keyValueLT") : ApplicationSettings.Get("keyValueDX"); //获取网关版本.固定值 ///本代码版本号固定为v2.0 string version = Request["version"].ToString().Trim(); result.Version = version.Trim(); //获取语言种类.固定选择值。 ///只能选择1、2 ///1代表中文;2代表英文 string language = Request["language"].ToString().Trim(); result.Language = Convert.ToInt32(language.Trim()); //获取支付方式 ///可选择00、41、42、52 ///00 代表快钱默认支付方式,目前为神州行卡密支付和快钱账户支付;41 代表快钱账户支付;42 代表神州行卡密支付和快钱账户支付;52 代表神州行卡密支付 string payType = Request["payType"].ToString().Trim(); result.PayType = payType.Trim(); //神州行卡序号 ///如果通过神州行卡直接支付时返回 string cardNumber = Request["cardNumber"].ToString().Trim(); result.CardNumber = cardNumber; //获取神州行卡密码 ///如果通过神州行卡直接支付时返回 string cardPwd = Request["cardPwd"].ToString().Trim(); result.CardPwd = cardPwd; //获取商户订单号 string orderId = Request["orderId"].ToString().Trim(); result.OrderID = orderId.Trim(); //获取原始订单金额 ///订单提交到快钱时的金额,单位为分。 ///比方2 ,代表0.02元 string orderAmount = Request["orderAmount"].ToString().Trim(); result.OrderAmount = Convert.ToDecimal(orderAmount.Trim()) / 100; //获取快钱交易号 ///获取该交易在快钱的交易号 string dealId = Request["dealId"].ToString().Trim(); result.DealID = dealId.Trim(); //获取商户提交订单时的时间 ///14位数字。年[4位]月[2位]日[2位]时[2位]分[2位]秒[2位] ///如:20080101010101 string orderTime = Request["orderTime"].ToString().Trim(); //获取扩展字段1 ///与商户提交订单时的扩展字段1保持一致 string ext1 = Request["ext1"].ToString().Trim(); result.Ext1 = ext1.Trim(); //获取扩展字段2 ///与商户提交订单时的扩展字段2保持一致 string ext2 = Request["ext2"].ToString().Trim(); result.Ext2 = ext2.Trim(); //获取实际支付金额 ///单位为分 ///比方 2 ,代表0.02元 string payAmount = Request["payAmount"].ToString().Trim(); result.PayAmount = Convert.ToDecimal(payAmount.Trim()) / 100; //获取快钱处理时间 string billOrderTime = Request["billOrderTime"].ToString().Trim(); //获取处理结果 ///10代表支付成功; 11代表支付失败 string payResult = Request["payResult"].ToString().Trim(); result.PayResult = payResult.Trim(); //获取签名类型 ///1代表MD5签名 ///当前版本固定为1 string signType = Request["signType"].ToString().Trim(); result.SignType = Convert.ToInt32(signType.Trim()); //充值卡类型 ////与提交订单时的充值卡类型保持一致 string bossType = Request["bossType"].ToString().Trim(); result.BossType = bossType; //支付卡类型 ////固定选择值:0、1、3、4、9,用户实际支付的卡类型 ////0 代表神州行充值卡 ////1 代表联通充值卡 ////3 代表电信充值卡 ////4 代表骏网一卡通 ////9 代表已开通任一卡类型 ////比喻商户提交bossType类型为9,用户实际支付卡类型为0,则receiveBossType返回为0 string receiveBossType = Request["receiveBossType"].ToString().Trim(); result.ReceiveBossType = receiveBossType; //实际收款账号 ////用户实际支付的卡类型对应收款帐号必须对应receiveBossType卡类型收款帐号 ////比如提交的merchantAcctId=1000300079902,bossType=9,是全部支付方式都有,但实际支付时选择的是联通充值卡支付 ////那返回的receiveBossType=1,返回的bossType,返回的merchantAcctId=1000300079902,返回的receiverAcctId=1000300079909 string receiverAcctId = Request["receiverAcctId"].ToString().Trim(); result.ReceiverAcctId = receiverAcctId; //获取加密签名串 string signMsg = Request["signMsg"].ToString().Trim(); result.SignMsg = signMsg.Trim(); //生成加密串。必须保持如下顺序。 string merchantSignMsgVal = ""; merchantSignMsgVal = AppendParam(merchantSignMsgVal, "merchantAcctId", merchantAcctId); merchantSignMsgVal = AppendParam(merchantSignMsgVal, "version", version); merchantSignMsgVal = AppendParam(merchantSignMsgVal, "language", language); merchantSignMsgVal = AppendParam(merchantSignMsgVal, "payType", payType); merchantSignMsgVal = AppendParam(merchantSignMsgVal, "cardNumber", cardNumber); merchantSignMsgVal = AppendParam(merchantSignMsgVal, "cardPwd", cardPwd); merchantSignMsgVal = AppendParam(merchantSignMsgVal, "orderId", orderId); merchantSignMsgVal = AppendParam(merchantSignMsgVal, "orderAmount", orderAmount); merchantSignMsgVal = AppendParam(merchantSignMsgVal, "dealId", dealId); merchantSignMsgVal = AppendParam(merchantSignMsgVal, "orderTime", orderTime); merchantSignMsgVal = AppendParam(merchantSignMsgVal, "ext1", ext1); merchantSignMsgVal = AppendParam(merchantSignMsgVal, "ext2", ext2); merchantSignMsgVal = AppendParam(merchantSignMsgVal, "payAmount", payAmount); merchantSignMsgVal = AppendParam(merchantSignMsgVal, "billOrderTime", billOrderTime); merchantSignMsgVal = AppendParam(merchantSignMsgVal, "payResult", payResult); merchantSignMsgVal = AppendParam(merchantSignMsgVal, "signType", signType); merchantSignMsgVal = AppendParam(merchantSignMsgVal, "bossType", bossType); merchantSignMsgVal = AppendParam(merchantSignMsgVal, "receiveBossType", receiveBossType); merchantSignMsgVal = AppendParam(merchantSignMsgVal, "receiverAcctId", receiverAcctId); merchantSignMsgVal = AppendParam(merchantSignMsgVal, "key", key); string merchantSignMsg = FormsAuthentication.HashPasswordForStoringInConfigFile(merchantSignMsgVal, "MD5").ToUpper(); //订单提交时间 orderTime = orderTime.Substring(0, 4) + "-" + orderTime.Substring(4, 2) + "-" + orderTime.Substring(6, 2) + " " + orderTime.Substring(8, 2) + ":" + orderTime.Substring(10, 2) + ":" + orderTime.Substring(12, 2); result.OrderTime = Convert.ToDateTime(orderTime); //快钱交易时间 billOrderTime = billOrderTime.Substring(0, 4) + "-" + billOrderTime.Substring(4, 2) + "-" + billOrderTime.Substring(6, 2) + " " + billOrderTime.Substring(8, 2) + ":" + billOrderTime.Substring(10, 2) + ":" + billOrderTime.Substring(12, 2); result.DealTime = Convert.ToDateTime(billOrderTime); //快钱支付结果入库 treasureFacade.WriteReturnKQDetail(result); //商家进行数据处理,并跳转回商家显示支付结果的页面 ///首先进行签名字符串验证 if (signMsg.ToUpper() == merchantSignMsg.ToUpper()) { switch (payResult) { case "10": /* * // 商户网站逻辑处理,比方更新订单支付状态为成功 * // 特别注意:只有signMsg.ToUpper() == merchantSignMsg.ToUpper(),且payResult=10,才表示支付成功! */ //报告给快钱处理结果,并提供将要重定向的地址。 rtnOk = 1; ShareDetialInfo detailInfo = new ShareDetialInfo(); detailInfo.OrderID = result.OrderID; detailInfo.IPAddress = Utility.UserIP; detailInfo.PayAmount = result.PayAmount; //写充值记录 try { Message msg = treasureFacade.FilliedOnline(detailInfo, 0); if (msg.Success) { rtnUrl = showUrl + "?msg=1"; //在线充值成功 } else { rtnUrl = showUrl + "?msg=2"; //在线充值成功,数据正在更新中 } } catch { rtnUrl = showUrl + "?msg=2"; //在线充值成功,数据正在更新中 } break; default: rtnOk = 1; rtnUrl = showUrl + "?msg=3"; //在线充值失败! break; } } else { rtnOk = 1; rtnUrl = showUrl + "?msg=3"; } }
///// <summary> ///// 在线充值 ///// </summary> ///// <param name="olDetial"></param> ///// <returns></returns> //public void FilliedOnline(ShareDetailInfo olDetial) //{ // treasureData.FilliedOnline(olDetial); //} /// <summary> /// 在线充值 /// </summary> /// <param name="olDetial"></param> /// <returns></returns> public Message FilliedOnline(ShareDetialInfo olDetial, int isVB) { return(treasureData.FilliedOnline(olDetial, isVB)); }
protected void Page_Load(object sender, EventArgs e) { //初始化结果及地址 ReturnKQDetailInfo result = new ReturnKQDetailInfo( ); //获取充值卡网关账户号 String merchantAcctId = Request["merchantAcctId"].ToString( ).Trim( ); result.MerchantAcctID = merchantAcctId; //设置充值卡网关密钥 //区分大小写 String key = ApplicationSettings.Get("keyValueGame"); //获取处理结果 ///支付结果0为成功,3为失败 string payResult = Request["payResult"].ToString( ).Trim( ); result.PayResult = payResult; //获取快钱交易号 快钱多卡种订单号 ///获取该交易的交易号 String dealId = Request["dealId"].ToString( ).Trim( ); result.DealID = dealId; //获取商户订单号商户请求支付提交的订单号 String orderId = Request["orderId"].ToString( ).Trim( ); result.OrderID = orderId; //获取实际支付金额 ///单位为分 ///比方 2 ,代表0.02元 String payAmount = Request["payAmount"].ToString( ).Trim( ); result.PayAmount = Convert.ToDecimal(payAmount.Trim( )); //获取请求时充值卡卡号 String cardNumber = Request["cardNumber"].ToString( ).Trim( ); result.CardNumber = cardNumber.Trim( ); //获取商户扩展字段1 String ext1 = Request["ext1"].ToString( ).Trim( ); result.Ext1 = ext1.Trim( ); //获取商户扩展字段2 String ext2 = Request["ext2"].ToString( ).Trim( ); if (!string.IsNullOrEmpty(ext2)) { result.Ext2 = ext2.Trim( ).Split('/')[0]; //订单金额 result.OrderAmount = Convert.ToDecimal(ext2.Trim( ).Split('/')[1]); } else { result.Ext2 = ""; } //获取错误信息返回 String errInfo = Request["errInfo"].ToString( ).Trim( ); result.ErrCode = errInfo; //获取加密签名串 String signMsg = Request["signMsg"].ToString( ).Trim( ); result.SignMsg = signMsg; //生成加密串。必须保持如下顺序。 String merchantSignMsgVal = ""; merchantSignMsgVal = AppendParam(merchantSignMsgVal, "payResult", payResult.ToString( )); merchantSignMsgVal = AppendParam(merchantSignMsgVal, "dealId", dealId); merchantSignMsgVal = AppendParam(merchantSignMsgVal, "merchantAcctId", merchantAcctId); merchantSignMsgVal = AppendParam(merchantSignMsgVal, "orderId", orderId); merchantSignMsgVal = AppendParam(merchantSignMsgVal, "payAmount", payAmount); merchantSignMsgVal = AppendParam(merchantSignMsgVal, "cardNumber", cardNumber); merchantSignMsgVal = AppendParam(merchantSignMsgVal, "ext1", HttpUtility.UrlEncode(ext1, Encoding.GetEncoding("gb2312")).Trim( )); merchantSignMsgVal = AppendParam(merchantSignMsgVal, "ext2", HttpUtility.UrlEncode(ext2, Encoding.GetEncoding("gb2312")).Trim( )); merchantSignMsgVal = AppendParam(merchantSignMsgVal, "key", key); String merchantSignMsg = TextEncrypt.EncryptPassword(merchantSignMsgVal).ToUpper( ); //订单提交时间 result.OrderTime = DateTime.Now; //快钱交易时间 result.DealTime = DateTime.Now; //快钱支付结果入库 treasureFacade.WriteReturnKQDetail(result); //支付金额小于订单金额不做任何处理 //if( result.PayAmount != result.OrderAmount ) //{ // Response.Write( "OK" ); // Response.End( ); //} //商家进行数据处理,并跳转会商家显示支付结果的页面 ///首先进行签名字符串验证 if (signMsg.ToUpper( ) == merchantSignMsg.ToUpper( )) { switch (payResult) { case "0": /* * // 商户网站逻辑处理,比方更新订单支付状态为成功 * // 特别注意:只有signMsg.ToUpper() == merchantSignMsg.ToUpper(),且payResult=10,才表示支付成功! */ //报告给快钱处理结果,并提供将要重定向的地址。 ShareDetialInfo detailInfo = new ShareDetialInfo( ); detailInfo.OrderID = result.OrderID; detailInfo.PayAmount = result.PayAmount; detailInfo.IPAddress = Utility.UserIP; //写充值记录 Message msg = treasureFacade.FilliedOnline(detailInfo, 0); Response.Write("OK"); break; default: Response.Write("OK"); break; } } else { Response.Write("OK"); } }
protected void Page_Load(object sender, System.EventArgs e) { string text = ApplicationSettings.Get("key_ruiyun"); string text2 = base.Request["orderid"]; string text3 = base.Request["opstate"]; string text4 = base.Request["ovalue"]; string text5 = base.Request["sign"]; string value = base.Request["sysorderid"]; string value2 = base.Request["completiontime"]; string value3 = base.Request["attach"]; string value4 = base.Request["msg"]; System.Collections.Generic.Dictionary <string, string> dictionary = new System.Collections.Generic.Dictionary <string, string>(); dictionary["orderid"] = text2; dictionary["opstate"] = text3; dictionary["ovalue"] = text4; dictionary["sign"] = text5; dictionary["sysorderid"] = value; dictionary["completiontime"] = value2; dictionary["attach"] = value3; dictionary["msg"] = value4; string password = string.Format("orderid={0}&opstate={1}&ovalue={2}{3}", new object[] { text2, text3, text4, text }); if (text5.Equals(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(password, "MD5").ToLower())) { if (text3.Equals("0") || text3.Equals("-3")) { ShareDetialInfo shareDetialInfo = new ShareDetialInfo(); shareDetialInfo.OrderID = text2; shareDetialInfo.IPAddress = Utility.UserIP; shareDetialInfo.PayAmount = System.Convert.ToDecimal(text4); Message message = FacadeManage.aideTreasureFacade.FilliedOnline(shareDetialInfo, 0); if (message.Success) { base.Response.Write("ErrCode=0"); } else { Log.Write(message.Content + ":" + JsonHelper.SerializeObject(dictionary)); } } else { if (text3.Equals("-1")) { Log.Write("卡号密码错误:" + JsonHelper.SerializeObject(dictionary)); } else { if (text3.Equals("-2")) { Log.Write("卡实际面值和提交时面值不符:" + JsonHelper.SerializeObject(dictionary)); } else { if (text3.Equals("-4")) { Log.Write("卡在提交之前已经被使用:" + JsonHelper.SerializeObject(dictionary)); } else { if (text3.Equals("-5")) { Log.Write("瑞云返回失败:" + JsonHelper.SerializeObject(dictionary)); } } } } } } else { Log.Write("签名无效:" + JsonHelper.SerializeObject(dictionary)); base.Response.Write("签名错误"); } }
protected void Page_Load(object sender, EventArgs e) { Logger.Info("Game.Web.Pay.yifu.return_url开始"); string payKey = Request["payKey"].Trim(); Logger.Info("payKey" + payKey); string productName = Request["productName"].Trim(); Logger.Info("productName" + productName); string productType = Request["productType"].Trim(); Logger.Info("productType" + productType); string orderPrice = Request["orderPrice"].Trim(); Logger.Info("orderPrice" + orderPrice); string orderTime = Request["orderTime"].Trim(); Logger.Info("orderTime" + orderTime); string outTradeNo = Request["outTradeNo"].Trim(); Logger.Info("outTradeNo" + outTradeNo); string tradeStatus = Request["tradeStatus"].Trim(); Logger.Info("tradeStatus" + tradeStatus); string trxNo = Request["trxNo"].Trim(); Logger.Info("trxNo" + trxNo); string successTime = Request["successTime"].Trim(); Logger.Info("successTime" + successTime); string remark = Request["remark"].Trim(); Logger.Info("remark" + remark); string sign = Request["sign"].Trim(); Logger.Info("sign " + sign); if (!IsPostBack) { string str = "orderPrice=" + orderPrice + "&orderTime=" + orderTime + "&outTradeNo=" + outTradeNo + "&payKey=" + payKey + "&productName=" + productName + "&productType=" + productType + "&remark=" + remark + "&successTime=" + successTime + "&tradeStatus=" + tradeStatus + "&trxNo=" + trxNo + "&paySecret=" + paySecret; Logger.Info("str" + str); MD5 md = new MD5CryptoServiceProvider(); byte[] ss = md.ComputeHash(UnicodeEncoding.UTF8.GetBytes(str)); Game.Web.Pay.yifu.send send = new yifu.send(); string sign1 = send.byteArrayToHexString(ss).ToUpper(); Logger.Info("sign" + sign); Logger.Info("sign1" + sign1); if (sign == sign1 && tradeStatus == "SUCCESS") { Logger.Info("处理订单开始"); //处理订单 ShareDetialInfo shareDetialInfo = new ShareDetialInfo(); shareDetialInfo.OrderID = outTradeNo; shareDetialInfo.IPAddress = Utility.UserIP; shareDetialInfo.PayAmount = System.Convert.ToDecimal(orderPrice); Message message = FacadeManage.aideTreasureFacade.FilliedOnline(shareDetialInfo, 0); Logger.Info("message" + message.ToJson()); if (message.Success) { Logger.Info("充值成功"); base.Response.Write("充值成功"); } else { Log.Write(message.Content); base.Response.Write("充值失败:" + message.Content + "<br/>订单号:" + outTradeNo); } Response.Write("SUCCESS"); } } }
protected void Page_Load(object sender, System.EventArgs e) { string str = ApplicationSettings.Get("key_sl"); byte[] array = new byte[base.Request.InputStream.Length]; base.Request.InputStream.Read(array, 0, array.Length); string text = System.Text.Encoding.UTF8.GetString(array); text = System.Web.HttpUtility.UrlDecode(text); NameValueCollection nameValueCollection = System.Web.HttpUtility.ParseQueryString(text); string text2 = nameValueCollection.Get("orderid"); string text3 = nameValueCollection.Get("opstate"); string text4 = nameValueCollection.Get("ovalue"); string text5 = nameValueCollection.Get("sign"); nameValueCollection.Get("sysorderid"); nameValueCollection.Get("systime"); nameValueCollection.Get("attach"); string text6 = nameValueCollection.Get("Sign2"); if (!(text3 == "0")) { Log.Write("支付系统错误 opstate:" + text3 + " orderid:" + text2); base.Response.Write("支付系统错误"); } else { string text7 = text2 + text4 + str; string text8 = TextEncrypt.EncryptPassword(text7); if (!(text6.ToLower() == text8.ToLower())) { Log.Write(string.Concat(new string[] { "签名错误,signSource=", text7, " mySign=", text8, " Sign=", text5, " Sign2=", text6 })); base.Response.Write("签名错误"); } else { ShareDetialInfo shareDetialInfo = new ShareDetialInfo(); shareDetialInfo.OrderID = text2; shareDetialInfo.IPAddress = Utility.UserIP; shareDetialInfo.PayAmount = System.Convert.ToDecimal(text4); Message message = FacadeManage.aideTreasureFacade.FilliedOnline(shareDetialInfo, 0); if (message.Success) { base.Response.Write("success"); } else { Log.Write(message.Content); } } } }
/// <summary> /// 苹果充值 /// </summary> /// <param name="olDetial"></param> /// <returns></returns> public Message FilliedApp(ShareDetialInfo olDetial, string productID) { return(treasureData.FilliedApp(olDetial, productID)); }
protected void Page_Load(object sender, EventArgs e) { SortedDictionary <string, string> sPara = GetRequestPost(); if (sPara.Count > 0)//判断是否有带返回参数 { Notify aliNotify = new Notify(); bool verifyResult = aliNotify.Verify(sPara, Request["notify_id"], Request["sign"]); if (verifyResult)//验证成功 { //商户订单号 string out_trade_no = Request["out_trade_no"]; //支付宝交易号 string trade_no = Request["trade_no"]; //交易状态 string trade_status = Request["trade_status"]; //交易金额 string total_fee = Request["total_fee"]; if (Request["trade_status"] == "TRADE_FINISHED") { ShareDetialInfo detailInfo = new ShareDetialInfo(); detailInfo.OrderID = out_trade_no; detailInfo.IPAddress = Utility.UserIP; detailInfo.PayAmount = decimal.Parse(total_fee); Message msg = treasurefacade.FilliedOnline(detailInfo, 0); if (!msg.Success) { Response.Write(msg.Content); } } else if (Request["trade_status"] == "TRADE_SUCCESS") { ShareDetialInfo detailInfo = new ShareDetialInfo(); detailInfo.OrderID = out_trade_no; detailInfo.IPAddress = Utility.UserIP; detailInfo.PayAmount = decimal.Parse(total_fee); Message msg = treasurefacade.FilliedOnline(detailInfo, 0); if (!msg.Success) { Response.Write(msg.Content); } } else { } Response.Write("success");//请不要修改或删除 } else//验证失败 { Response.Write("fail"); } } else { Response.Write("无通知参数"); } }
protected void Page_Load(object sender, System.EventArgs e) { string value = base.Request["merchant_code"]; string value2 = base.Request["notify_type"]; string text = base.Request["sign"]; string text2 = base.Request["order_no"]; string text3 = base.Request["order_amount"]; string text4 = base.Request["order_time"]; string value3 = base.Request["return_params"]; string value4 = base.Request["trade_no"]; string value5 = base.Request["trade_time"]; string text5 = base.Request["trade_status"]; string str = ApplicationSettings.Get("key_41"); SortedDictionary <string, string> sortedDictionary = new SortedDictionary <string, string>(); sortedDictionary.Add("merchant_code", value); sortedDictionary.Add("notify_type", value2); sortedDictionary.Add("order_no", text2); sortedDictionary.Add("order_amount", text3); sortedDictionary.Add("order_time", text4); sortedDictionary.Add("return_params", value3); sortedDictionary.Add("trade_no", value4); sortedDictionary.Add("trade_time", value5); sortedDictionary.Add("trade_status", text5); string text6 = ""; foreach (System.Collections.Generic.KeyValuePair <string, string> current in sortedDictionary) { string text7 = text6; text6 = string.Concat(new string[] { text7, current.Key, "=", current.Value, "&" }); } string text8 = text6 + "key=" + str; text6 = Jiami.MD5(text8, "UTF-8"); string text9; if (text6 == text) { if ("success" == text5) { ShareDetialInfo shareDetialInfo = new ShareDetialInfo(); shareDetialInfo.OrderID = text2; shareDetialInfo.IPAddress = Utility.UserIP; shareDetialInfo.PayAmount = System.Convert.ToDecimal(text3); Message message = FacadeManage.aideTreasureFacade.FilliedOnline(shareDetialInfo, 0); if (message.Success) { Log.Write("充值成功"); text9 = "充值成功"; } else { Log.Write(message.Content); text9 = message.Content; } } else { Log.Write("支付失败"); text9 = "支付失败"; } } else { Log.Write(string.Concat(new string[] { "签名错误—加密前:", text8, "—加密后:", text6, "—sign:", text })); text9 = "签名错误"; } this.label_result.Text = text9; this.label_order_no.Text = text2; this.label_order_amount.Text = text3; this.label_order_time.Text = text4; }
protected void Page_Load(object sender, System.EventArgs e) { string text = base.Request["customerid"]; string text2 = base.Request["sdorderno"]; string text3 = base.Request["total_fee"]; string text4 = base.Request["status"]; string text5 = base.Request["paytype"]; string text6 = base.Request["sdpayno"]; string arg_78_0 = base.Request["remark"]; string text7 = base.Request["sign"]; if (!(text4 == "1")) { Log.Write("支付系统错误 opstate:" + text4 + " orderid:" + text2); base.Response.Write("支付系统错误"); } else { string text8 = ApplicationSettings.Get("key_wt"); string text9 = string.Format("customerid={0}&status={1}&sdpayno={2}&sdorderno={3}&total_fee={4}&paytype={5}&{6}", new object[] { text, text4, text6, text2, text3, text5, text8 }); string text10 = TextEncrypt.EncryptPassword(text9); if (!(text7.ToLower() == text10.ToLower())) { Log.Write(string.Concat(new string[] { "签名错误,signSource=", text9, " mySign=", text10, " Sign=", text7 })); base.Response.Write("签名错误"); } else { ShareDetialInfo shareDetialInfo = new ShareDetialInfo(); shareDetialInfo.OrderID = text2; shareDetialInfo.IPAddress = Utility.UserIP; shareDetialInfo.PayAmount = System.Convert.ToDecimal(text3); Message message = FacadeManage.aideTreasureFacade.FilliedOnline(shareDetialInfo, 0); if (message.Success) { base.Response.Write("success"); } else { Log.Write(message.Content); } } } }
protected void Page_Load(object sender, EventArgs e) { string partner = ApplicationSettings.Get("parter_jr"); //商户ID Log.Write("partner" + partner); string Key = ApplicationSettings.Get("key_jr"); //商户KEY Log.Write("Key" + Key); int orderstatus = Convert.ToInt32(Request["orderstatus"]); Log.Write("orderstatus" + orderstatus); string ordernumber = Request["ordernumber"]; Log.Write("ordernumber" + ordernumber); string paymoney = Request["paymoney"]; Log.Write("paymoney" + paymoney); string sign = Request["sign"]; Log.Write("sign" + sign); string attach = Request["attach"]; Log.Write("attach" + attach); string signSource = string.Format("partner={0}&ordernumber={1}&orderstatus={2}&paymoney={3}{4}", partner, ordernumber, orderstatus, paymoney, Key); Log.Write("sign" + sign); Log.Write("signSource" + signSource); if (sign.ToUpper() == JRAPI_NET_DEMO.JRAPICommon.MD5(signSource, false).ToUpper())//签名正确 { ShareDetialInfo shareDetialInfo = new ShareDetialInfo(); shareDetialInfo.OrderID = ordernumber; shareDetialInfo.IPAddress = Utility.UserIP; shareDetialInfo.PayAmount = System.Convert.ToDecimal(paymoney); Message message = FacadeManage.aideTreasureFacade.FilliedOnline(shareDetialInfo, 0); if (message.Success) { Log.Write("充值成功"); base.Response.Write("充值成功!订单号:" + ordernumber); } else { var dt = aideTreasureFacade.GetDataSetBySql("select OrderStatus from OnLineOrder where orderid = '" + ordernumber + "'").Tables[0]; if (dt.Rows.Count > 0) { if (dt.Rows[0][0].ToStringOrEmpty() == "2") { Log.Write(message.Content); base.Response.Write("充值成功!订单号:" + ordernumber); } else { Log.Write(message.Content); base.Response.Write("充值失败:" + message.Content + "<br/>订单号:" + ordernumber); } } else { Log.Write(message.Content); base.Response.Write("充值失败:" + message.Content + "<br/>订单号:" + ordernumber); } } } Response.Write("ok"); Response.End(); }
protected void Page_Load(object sender, EventArgs e) { #region 获取快钱支付结果,并且保存在数据库中-->跳转 //初始化结果及地址 ReturnKQDetailInfo result = new ReturnKQDetailInfo(); string showUrl = "http://" + HttpContext.Current.Request.Url.Authority + "/Pay/PayShow.aspx"; //人民币网关账户号 String merchantAcctId = Request["merchantAcctId"]; if (String.IsNullOrEmpty(merchantAcctId)) { merchantAcctId = ApplicationSettings.Get("merchantIdRMB"); } result.MerchantAcctID = merchantAcctId.Trim(); //人民币网关密钥--区分大小写 String key = ApplicationSettings.Get("keyValueRMB"); //网关版本.固定值 ///快钱会根据版本号来调用对应的接口处理程序。 ///本代码版本号固定为v2.0 String version = Request["version"]; if (String.IsNullOrEmpty(version)) { version = "v2.0"; } result.Version = version.Trim(); //语言种类.固定选择值。 ///只能选择1、2、3 ///1代表中文;2代表英文 ///默认值为1 String language = Request["language"]; if (String.IsNullOrEmpty(language)) { language = "1"; } result.Language = Convert.ToInt32(language.Trim()); //签名类型.固定值--1代表MD5签名 ///当前版本固定为1 String signType = Request["signType"]; if (String.IsNullOrEmpty(signType)) { signType = "1"; } result.SignType = Convert.ToInt32(signType.Trim()); //支付方式--值为:10、11、12、13、14 //00:组合支付(网关支付页面显示快钱支持的各种支付方式,推荐使用)10:银行卡支付(网关支付页面只显示银行卡支付).11:电话银行支付(网关支付页面只显示电话支付).12:快钱账户支付(网关支付页面只显示快钱账户支付).13:线下支付(网关支付页面只显示线下支付方式).14:B2B支付(网关支付页面只显示B2B支付,但需要向快钱申请开通才能使用) String payType = Request["payType"]; if (String.IsNullOrEmpty(payType)) { payType = "00"; } result.PayType = payType.Trim(); //银行代码-参见银行代码列表 String bankId = Request["bankId"]; if (String.IsNullOrEmpty(bankId)) { bankId = ""; } result.BankID = bankId.Trim(); //商户订单号 String orderId = Request["orderId"]; //String orderId = "KQ20120321094644143608554"; if (String.IsNullOrEmpty(orderId)) { orderId = ""; } result.OrderID = orderId.Trim(); //订单提交时间 ///商户提交订单时的时间.14位数字。年[4位]月[2位]日[2位]时[2位]分[2位]秒[2位] ///如:20080101010101 String orderTime = Request["orderTime"]; if (String.IsNullOrEmpty(orderTime)) { orderTime = "19000101010101"; } //原始订单金额-单位为分。 String orderAmount = Request["orderAmount"]; if (String.IsNullOrEmpty(orderAmount)) { orderAmount = "0"; } result.OrderAmount = Convert.ToDecimal(orderAmount.Trim()) / 100; //快钱交易号 String dealId = Request["dealId"]; if (String.IsNullOrEmpty(dealId)) { dealId = ""; } result.DealID = dealId.Trim(); //银行交易号--如未通过银行支付,则为空 String bankDealId = Request["bankDealId"]; if (String.IsNullOrEmpty(bankDealId)) { bankDealId = ""; } result.BankDealID = bankDealId.Trim(); //快钱交易时间-14位数字。年[4位]月[2位]日[2位]时[2位]分[2位]秒[2位] ///如;20080101010101 String dealTime = Request["dealTime"]; if (String.IsNullOrEmpty(dealTime)) { dealTime = "19000101010101"; } //实际支付金额-单位为分 String payAmount = Request["payAmount"]; //String payAmount = "3000"; if (String.IsNullOrEmpty(payAmount)) { payAmount = "0"; } result.PayAmount = Convert.ToDecimal(payAmount.Trim()) / 100; //交易手续费-单位为分 String fee = Request["fee"]; //String fee = "30"; if (String.IsNullOrEmpty(fee)) { fee = "0"; } result.Fee = Convert.ToDecimal(fee.Trim()) / 100; //扩展字段1 --损耗比例 String ext1 = Request["ext1"]; //String ext1 = "10"; if (String.IsNullOrEmpty(ext1)) { ext1 = "0"; } result.Ext1 = ext1.Trim(); //扩展字段2 String ext2 = Request["ext2"]; //String ext2 = "1000"; if (String.IsNullOrEmpty(ext2)) { ext2 = ""; } result.Ext2 = ext2.Trim(); //处理结果 10:成功; 11:失败 String payResult = Request["payResult"]; //payResult = "10"; if (String.IsNullOrEmpty(payResult)) { payResult = "11"; } result.PayResult = payResult.Trim(); //错误代码 String errCode = Request["errCode"]; if (String.IsNullOrEmpty(errCode)) { errCode = ""; } result.ErrCode = errCode.Trim(); //加密签名 String signMsg = Request["signMsg"]; if (String.IsNullOrEmpty(signMsg)) { signMsg = ""; } result.SignMsg = signMsg.Trim(); //生成加密串 String merchantSignMsgVal = ""; merchantSignMsgVal = AppendParam(merchantSignMsgVal, "merchantAcctId", merchantAcctId); merchantSignMsgVal = AppendParam(merchantSignMsgVal, "version", version); merchantSignMsgVal = AppendParam(merchantSignMsgVal, "language", language); merchantSignMsgVal = AppendParam(merchantSignMsgVal, "signType", signType); merchantSignMsgVal = AppendParam(merchantSignMsgVal, "payType", payType); merchantSignMsgVal = AppendParam(merchantSignMsgVal, "bankId", bankId); merchantSignMsgVal = AppendParam(merchantSignMsgVal, "orderId", orderId); merchantSignMsgVal = AppendParam(merchantSignMsgVal, "orderTime", orderTime); merchantSignMsgVal = AppendParam(merchantSignMsgVal, "orderAmount", orderAmount); merchantSignMsgVal = AppendParam(merchantSignMsgVal, "dealId", dealId); merchantSignMsgVal = AppendParam(merchantSignMsgVal, "bankDealId", bankDealId); merchantSignMsgVal = AppendParam(merchantSignMsgVal, "dealTime", dealTime); merchantSignMsgVal = AppendParam(merchantSignMsgVal, "payAmount", payAmount); merchantSignMsgVal = AppendParam(merchantSignMsgVal, "fee", fee); merchantSignMsgVal = AppendParam(merchantSignMsgVal, "ext1", ext1); merchantSignMsgVal = AppendParam(merchantSignMsgVal, "ext2", ext2); merchantSignMsgVal = AppendParam(merchantSignMsgVal, "payResult", payResult); merchantSignMsgVal = AppendParam(merchantSignMsgVal, "errCode", errCode); merchantSignMsgVal = AppendParam(merchantSignMsgVal, "key", key); String merchantSignMsg = FormsAuthentication.HashPasswordForStoringInConfigFile(merchantSignMsgVal, "MD5"); //订单提交时间 orderTime = orderTime.Substring(0, 4) + "-" + orderTime.Substring(4, 2) + "-" + orderTime.Substring(6, 2) + " " + orderTime.Substring(8, 2) + ":" + orderTime.Substring(10, 2) + ":" + orderTime.Substring(12, 2); result.OrderTime = Convert.ToDateTime(orderTime); //快钱交易时间 dealTime = dealTime.Substring(0, 4) + "-" + dealTime.Substring(4, 2) + "-" + dealTime.Substring(6, 2) + " " + dealTime.Substring(8, 2) + ":" + dealTime.Substring(10, 2) + ":" + dealTime.Substring(12, 2); result.DealTime = Convert.ToDateTime(dealTime); //快钱支付结果入库 treasureFacade.WriteReturnKQDetail(result); ///签名验证 if (signMsg.ToUpper() == merchantSignMsg.ToUpper()) { switch (payResult) { case "10": /* 商户网站逻辑处理,比方更新订单支付状态为成功 * 特别注意:只有signMsg.ToUpper() == merchantSignMsg.ToUpper(),且payResult=10,才表示支付成功!同时将订单金额与提交订单前的订单金额进行对比校验。*/ //报告给快钱处理结果,并提供将要重定向的地址。 rtnOk = 1; ShareDetialInfo detailInfo = new ShareDetialInfo(); detailInfo.OrderID = result.OrderID; detailInfo.IPAddress = Utility.UserIP; detailInfo.PayAmount = result.PayAmount; //写充值记录 try { Message umsg = treasureFacade.FilliedOnline(detailInfo, 0); if (umsg.Success) { rtnUrl = showUrl + "?msg=1"; //在线充值成功 } else { rtnUrl = showUrl + "?msg=2"; //在线充值成功,数据正在更新中 } } catch { rtnUrl = showUrl + "?msg=2"; //在线充值成功,数据正在更新中 } break; default: rtnOk = 1; rtnUrl = showUrl + "?msg=3"; //在线充值失败! break; } } else { rtnOk = 1; rtnUrl = showUrl + "?msg=3"; } #endregion }
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { // 校验返回数据包 Buy.logstr(FormatQueryString.GetQueryString("r6_Order"), Request.Url.Query, ""); BuyCallbackResult result = Buy.VerifyCallback(FormatQueryString.GetQueryString("p1_MerId"), FormatQueryString.GetQueryString("r0_Cmd"), FormatQueryString.GetQueryString("r1_Code"), FormatQueryString.GetQueryString("r2_TrxId"), FormatQueryString.GetQueryString("r3_Amt"), FormatQueryString.GetQueryString("r4_Cur"), FormatQueryString.GetQueryString("r5_Pid"), FormatQueryString.GetQueryString("r6_Order"), FormatQueryString.GetQueryString("r7_Uid"), FormatQueryString.GetQueryString("r8_MP"), FormatQueryString.GetQueryString("r9_BType"), FormatQueryString.GetQueryString("rp_PayDate"), FormatQueryString.GetQueryString("hmac")); if (string.IsNullOrEmpty(result.ErrMsg)) { //在接收到支付结果通知后,判断是否进行过业务逻辑处理,不要重复进行业务逻辑处理 if (result.R1_Code == "1") { if (result.R9_BType == "1") { Request.Cookies.Remove("ErrorMsg"); Response.Redirect("/showPayInfo.html"); // callback方式:浏览器重定向 // Response.Write("支付成功!" + // "<br>接口类型:" + result.R0_Cmd + // "<br>返回码:" + result.R1_Code + //"<br>商户号:" + result.P1_MerId + // "<br>交易流水号:" + result.R2_TrxId + // "<br>商户订单号:" + result.R6_Order + // "<br>交易金额:" + result.R3_Amt + // "<br>交易币种:" + result.R4_Cur + // "<br>订单完成时间:" + result.Rp_PayDate + // "<br>回调方式:" + result.R9_BType + // "<br>错误信息:" + result.ErrMsg + "<BR>"); } else if (result.R9_BType == "2") { // * 如果是服务器返回则需要回应一个特定字符串'SUCCESS',且在'SUCCESS'之前不可以有任何其他字符输出,保证首先输出的是'SUCCESS'字符串 Response.Write("SUCCESS"); ShareDetialInfo detailInfo = new ShareDetialInfo(); detailInfo.OrderID = result.R6_Order; detailInfo.IPAddress = Utility.UserIP; detailInfo.PayAmount = decimal.Parse(result.R3_Amt); treasureFacade.FilliedOnline(detailInfo, 0); } } else { HttpCookie UserCookie2 = new HttpCookie("ErrorMsg"); UserCookie2["error"] = HttpUtility.UrlEncode(result.ErrMsg); UserCookie2.Expires = DateTime.Now.AddMinutes(7); Response.Cookies.Add(UserCookie2); Response.Redirect("/showPayInfo.html"); } } else { HttpCookie UserCookie2 = new HttpCookie("ErrorMsg"); UserCookie2["error"] = HttpUtility.UrlEncode("交易签名无效"); UserCookie2.Expires = DateTime.Now.AddMinutes(7); Response.Cookies.Add(UserCookie2); Response.Redirect("/showPayInfo.html"); } } }
/// <summary> /// 实卡充值 /// </summary> /// <param name="associator"></param> /// <param name="operUserID"></param> /// <param name="accounts"></param> /// <param name="ip"></param> /// <returns></returns> public Message FilledLivcard(ShareDetialInfo detialInfo, string password) { return(treasureData.FilledLivcard(detialInfo, password)); }
/// <summary> /// 手游充值 /// </summary> /// <param name="olDetial"></param> /// <returns></returns> public Message FilliedMobile(ShareDetialInfo olDetial) { return(treasureData.FilliedMobile(olDetial)); }
protected void Page_Load(object sender, System.EventArgs e) { string text = ApplicationSettings.Get("partner_qianyifu"); string text2 = ApplicationSettings.Get("key_qianyifu"); string text3 = base.Request["returncode"]; string text4 = base.Request["orderid"]; string text5 = base.Request["money"]; string text6 = base.Request["sign"]; string arg_6C_0 = base.Request["ext"]; string password = string.Format("returncode={0}&userid={1}&orderid={2}&money={3}&keyvalue={4}", new object[] { text3, text, text4, text5, text2 }); if (!(text6.ToLower() == TextEncrypt.EncryptPassword(password).ToLower())) { Log.Write("签名错误"); base.Response.Write("签名错误"); } else { if (!(text3 == "1")) { Log.Write("商户业务数据失败处理:" + text4); base.Response.Write("商户业务数据失败处理"); } else { string url = "http://wangguan.qianyifu.com:8881/gateway/query.asp"; System.Collections.Generic.Dictionary <string, string> dictionary = new System.Collections.Generic.Dictionary <string, string>(); dictionary["userid"] = text; dictionary["orderid"] = text4; password = string.Format("userid={0}&orderid={1}&keyvalue={2}", dictionary["userid"], dictionary["orderid"], text2); dictionary["sign"] = TextEncrypt.EncryptPassword(password).ToLower(); string param = PayHelper.PrepareSign(dictionary); string text7 = HttpHelper.HttpRequest(url, param, "get", "GB2312"); if (!text7.Contains("成功")) { Log.Write(text7 + ":" + text4); base.Response.Write(text7); } else { text5 = text7.Substring(text7.IndexOf(":") + 1).Replace("元", ""); ShareDetialInfo shareDetialInfo = new ShareDetialInfo(); shareDetialInfo.OrderID = text4; shareDetialInfo.IPAddress = Utility.UserIP; shareDetialInfo.PayAmount = System.Convert.ToDecimal(text5); Message message = FacadeManage.aideTreasureFacade.FilliedOnline(shareDetialInfo, 0); if (message.Success) { base.Response.Write("success"); } else { Log.Write(message.Content); } } } } }
/// <summary> /// 写苹果返回记录 /// </summary> /// <param name="detialInfo"></param> /// <param name="receipt"></param> public void WriteReturnAppDetail(ShareDetialInfo detialInfo, AppReceiptInfo receipt) { treasureData.WriteReturnAppDetail(detialInfo, receipt); }
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { // 校验返回数据包 BuyCallbackResult result = Buy.VerifyCallback(FormatQueryString.GetQueryString("p1_MerId"), FormatQueryString.GetQueryString("r0_Cmd"), FormatQueryString.GetQueryString("r1_Code"), FormatQueryString.GetQueryString("r2_TrxId"), FormatQueryString.GetQueryString("r3_Amt"), FormatQueryString.GetQueryString("r4_Cur"), FormatQueryString.GetQueryString("r5_Pid"), FormatQueryString.GetQueryString("r6_Order"), FormatQueryString.GetQueryString("r7_Uid"), FormatQueryString.GetQueryString("r8_MP"), FormatQueryString.GetQueryString("r9_BType"), FormatQueryString.GetQueryString("rp_PayDate"), FormatQueryString.GetQueryString("hmac")); if (string.IsNullOrEmpty(result.ErrMsg)) { //写易宝记录 ReturnYPDetailInfo resultYB = new ReturnYPDetailInfo(); resultYB.P1_MerId = FormatQueryString.GetQueryString("p1_MerId"); resultYB.R0_Cmd = FormatQueryString.GetQueryString("r0_Cmd"); resultYB.R1_Code = FormatQueryString.GetQueryString("r1_Code"); resultYB.R2_TrxId = FormatQueryString.GetQueryString("r2_TrxId"); resultYB.R3_Amt = Convert.ToDecimal(FormatQueryString.GetQueryString("r3_Amt")); resultYB.R4_Cur = FormatQueryString.GetQueryString("r4_Cur"); resultYB.R5_Pid = FormatQueryString.GetQueryString("r5_Pid"); resultYB.R6_Order = FormatQueryString.GetQueryString("r6_Order"); resultYB.R7_Uid = FormatQueryString.GetQueryString("r7_Uid"); resultYB.R8_MP = FormatQueryString.GetQueryString("r8_MP"); resultYB.R9_BType = FormatQueryString.GetQueryString("r9_BType"); resultYB.Rb_BankId = FormatQueryString.GetQueryString("rb_BankId"); resultYB.Ro_BankOrderId = FormatQueryString.GetQueryString("ro_BankOrderId"); resultYB.Rp_PayDate = FormatQueryString.GetQueryString("rp_PayDate"); resultYB.Rq_CardNo = FormatQueryString.GetQueryString("rq_CardNo"); resultYB.Ru_Trxtime = FormatQueryString.GetQueryString("ru_Trxtime"); resultYB.Hmac = FormatQueryString.GetQueryString("hmac"); treasureFacade.WriteReturnYBDetail(resultYB); if (result.R1_Code == "1") { if (result.R9_BType == "1") { // 写充值记录 ShareDetialInfo detailInfo = new ShareDetialInfo(); detailInfo.OrderID = resultYB.R6_Order; detailInfo.IPAddress = Utility.UserIP; detailInfo.PayAmount = resultYB.R3_Amt; treasureFacade.FilliedOnline(detailInfo, 0); // callback方式:浏览器重定向 Response.Write("支付成功!<br>商品ID:" + result.R5_Pid + "<br>商户订单号:" + result.R6_Order + "<br>支付金额:" + result.R3_Amt + "<br>易宝支付交易流水号:" + result.R2_TrxId + "<BR>"); } else if (result.R9_BType == "2") { // * 如果是服务器返回则需要回应一个特定字符串'SUCCESS',且在'SUCCESS'之前不可以有任何其他字符输出,保证首先输出的是'SUCCESS'字符串 ShareDetialInfo detailInfo = new ShareDetialInfo(); detailInfo.OrderID = resultYB.R6_Order; detailInfo.IPAddress = Utility.UserIP; detailInfo.PayAmount = resultYB.R3_Amt; treasureFacade.FilliedOnline(detailInfo, 0); Response.Write("SUCCESS"); } } else { Response.Write("支付失败!"); } } else { Response.Write("交易签名无效!"); } } }
private void QueryOrder(string orgCode, string orgNo, string key) { string value = "2003"; System.Collections.Generic.Dictionary <string, string> dictionary = new System.Collections.Generic.Dictionary <string, string>(); dictionary["oldOrgNo"] = orgNo; string password = string.Format("orgCode={0}&oldOrgNo={1}&md5={2}", orgCode, orgNo, key); string value2 = TextEncrypt.EncryptPassword(password).ToLower(); System.Collections.Generic.Dictionary <string, string> dictionary2 = new System.Collections.Generic.Dictionary <string, string>(); dictionary2["orgCode"] = orgCode; dictionary2["serviceCode"] = value; dictionary2["orgNo"] = PayHelper.GetOrderIDByPrefix(""); dictionary2["jsonData"] = JsonHelper.SerializeObject(dictionary); dictionary2["sign"] = value2; string param = PayHelper.PrepareSign(dictionary2); string json = HttpHelper.HttpRequest(ApplicationSettings.Get("url_ft"), param); System.Collections.Generic.Dictionary <string, string> dictionary3 = JsonHelper.DeserializeJsonToObject <System.Collections.Generic.Dictionary <string, string> >(json); if (dictionary3.ContainsKey("respCode")) { if (!(dictionary3["respCode"] == "0000") && !(dictionary3["respCode"] == "0001")) { base.Response.Write(dictionary3["respDesc"]); Log.Write(dictionary3["respDesc"]); } else { string json2 = dictionary3["jsonData"]; System.Collections.Generic.Dictionary <string, string> dictionary4 = JsonHelper.DeserializeJsonToObject <System.Collections.Generic.Dictionary <string, string> >(json2); if (dictionary4.ContainsKey("status")) { if (!(dictionary4["status"] == "3")) { base.Response.Write(((notify_url.PayStatus)System.Convert.ToInt32(dictionary4["status"])).ToString()); Log.Write(((notify_url.PayStatus)System.Convert.ToInt32(dictionary4["status"])).ToString()); } else { ShareDetialInfo shareDetialInfo = new ShareDetialInfo(); shareDetialInfo.OrderID = orgNo; shareDetialInfo.IPAddress = Utility.UserIP; shareDetialInfo.PayAmount = System.Convert.ToDecimal(dictionary4["amt"]); Message message = FacadeManage.aideTreasureFacade.FilliedOnline(shareDetialInfo, 0); if (message.Success) { base.Response.Write("success"); } else { Log.Write(message.Content); } } } } } else { base.Response.Write("查询订单失败"); Log.Write("查询订单失败"); } }
protected void Page_Load(object sender, EventArgs e) { //创建ResponseHandler实例 ResponseHandler resHandler = new ResponseHandler(Context); resHandler.setKey(TenpayUtil.tenpay_key); //判断签名 if (resHandler.isTenpaySign()) { ///通知id string notify_id = resHandler.getParameter("notify_id"); //通过通知ID查询,确保通知来至财付通 //创建查询请求 RequestHandler queryReq = new RequestHandler(Context); queryReq.init(); queryReq.setKey(TenpayUtil.tenpay_key); queryReq.setGateUrl("https://gw.tenpay.com/gateway/simpleverifynotifyid.xml"); queryReq.setParameter("partner", TenpayUtil.bargainor_id); queryReq.setParameter("notify_id", notify_id); //通信对象 TenpayHttpClient httpClient = new TenpayHttpClient(); httpClient.setTimeOut(5); //设置请求内容 httpClient.setReqContent(queryReq.getRequestURL()); //后台调用 if (httpClient.call()) { //设置结果参数 ClientResponseHandler queryRes = new ClientResponseHandler(); queryRes.setContent(httpClient.getResContent()); queryRes.setKey(TenpayUtil.tenpay_key); //判断签名及结果 //只有签名正确,retcode为0,trade_state为0才是支付成功 if (queryRes.isTenpaySign()) { //取结果参数做业务处理 string out_trade_no = queryRes.getParameter("out_trade_no"); //财付通订单号 string transaction_id = queryRes.getParameter("transaction_id"); //金额,以分为单位 string total_fee = queryRes.getParameter("total_fee"); //如果有使用折扣券,discount有值,total_fee+discount=原请求的total_fee string discount = queryRes.getParameter("discount"); //支付结果 string trade_state = resHandler.getParameter("trade_state"); //交易模式,1即时到帐 2中介担保 string trade_mode = resHandler.getParameter("trade_mode"); #region //判断签名及结果 if ("0".Equals(queryRes.getParameter("retcode"))) { //Response.Write("id验证成功"); if ("1".Equals(trade_mode)) { //即时到账 if ("0".Equals(trade_state)) { //------------------------------ //即时到账处理业务开始 //------------------------------ //处理数据库逻辑 //注意交易单不要重复处理 //注意判断返回金额 //------------------------------ //即时到账处理业务完毕 //------------------------------ //给财付通系统发送成功信息,财付通系统收到此结果后不再进行后续通知 Response.Write("success"); ShareDetialInfo detailInfo = new ShareDetialInfo(); detailInfo.OrderID = out_trade_no; detailInfo.IPAddress = Utility.UserIP; detailInfo.PayAmount = decimal.Parse(total_fee); Message msg = treasurefacade.FilliedOnline(detailInfo, 0); if (!msg.Success) { Response.Write(msg.Content); } } else { Response.Write("即时到账支付失败"); } } else if ("2".Equals(trade_mode)) { //中介担保 //------------------------------ //中介担保处理业务开始 //------------------------------ //处理数据库逻辑 //注意交易单不要重复处理 //注意判断返回金额 int iStatus = Convert.ToInt32(trade_state); switch (iStatus) { case 0: //付款成功 ShareDetialInfo detailInfo = new ShareDetialInfo(); detailInfo.OrderID = out_trade_no; detailInfo.IPAddress = Utility.UserIP; detailInfo.PayAmount = decimal.Parse(total_fee); Message msg = treasurefacade.FilliedOnline(detailInfo, 0); if (!msg.Success) { Response.Write(msg.Content); } break; case 1: //交易创建 break; case 2: //收获地址填写完毕 break; case 4: //卖家发货成功 break; case 5: //买家收货确认,交易成功 break; case 6: //交易关闭,未完成超时关闭 break; case 7: //修改交易价格成功 break; case 8: //买家发起退款 break; case 9: //退款成功 break; case 10: //退款关闭 break; } //------------------------------ //中介担保处理业务开始 //------------------------------ //给财付通系统发送成功信息,财付通系统收到此结果后不再进行后续通知 Response.Write("success"); } } else { //错误时,返回结果可能没有签名,写日志trade_state、retcode、retmsg看失败详情。 //通知财付通处理失败,需要重新通知 Response.Write("查询验证签名失败或id验证失败"); Response.Write("retcode:" + queryRes.getParameter("retcode")); } #endregion } else { Response.Write("通知ID查询签名验证失败"); } } else { //通知财付通处理失败,需要重新通知 Response.Write("后台调用通信失败"); //写错误日志 Response.Write("call err:" + httpClient.getErrInfo() + "<br>" + httpClient.getResponseCode() + "<br>"); } } else { Response.Write("签名验证失败"); } Response.End(); }
//更新数据 private void BindData() { ReturnVBDetailInfo result = new ReturnVBDetailInfo(); string spid = ApplicationSettings.Get("spId"); //'sp号码 string sppwd = ApplicationSettings.Get("spKeyValue"); //'sp18位密码 //'接受服务器url get参数 string rtmd5 = Request.QueryString["v1"]; // '服务器MD5 result.Rtmd5 = rtmd5; string trka = Request.QueryString["v2"]; // 'V币号码15位 result.Rtka = trka; string rtmi = Request.QueryString["v3"]; // '密码'V币密码6位 (可能为空 老V币没有密码) result.Rtmi = rtmi; string rtmz = Request.QueryString["v4"]; // '面值1-999 整数 result.Rtmz = Convert.ToInt32(rtmz); string rtlx = Request.QueryString["v5"]; // '卡的类型 1 2 3 result.Rtlx = Convert.ToInt32(rtlx); string rtoid = Request.QueryString["v6"]; // '网盈一号通服务器端订单 result.Rtoid = rtoid; string rtcoid = Request.QueryString["v7"]; // '商户自己订单 result.OrderID = rtcoid; string rtuserid = Request.QueryString["v8"];// '商户的用户ID result.Rtuserid = rtuserid; string rtcustom = Request.QueryString["v9"]; //'商户自己定义数据 result.Rtcustom = rtcustom; string rtflag = Request.QueryString["v10"]; // '返回状态. 1正常发送 2补单发送 result.Rtflag = Convert.ToInt32(rtflag); string get_key = trka + rtmi + rtoid + spid + sppwd + rtcoid + rtflag + rtmz; result.EcryptStr = get_key; //'卡+密+网盈一号通服务器端订单+ 5位spid+ 18位SP密码+商户订单+rtflag返回类型1或2 +面值 //'LCase函数是将字符转换为小写; Ucase函数是将字符转换为大写 //'全国声讯支付联盟全国声讯电话支付接口对MD5值只认大写字符串,所以小写的MD5值得转换为大写 string md5password = TextEncrypt.EncryptPassword(get_key).ToUpper(); // '先MD5 32 然后转大写 result.SignMsg = md5password; //'流程 第1次访问此页面 是盈华讯方服务器调用此页面1次 ,你先判断订单(订单包含金额,面值,状态等消息) //'如果订单是没有使用状态并金额一致就MD5校验,校验通过 你发送“header("Data-Received:ok_vpay8"); ” //'给盈华讯方服务器,服务器接收到这个头 后判断( 你已经给用户加点了),然后就把本页面转向给你 //,此时转发的数据和第一次服务器直接调用的一致 此次你只需要根据订单,给用户提示冲值成功就可以了。 //如果你没有发送头或网络中断,我就会给用户提示补单的消息(他可以自己点击,也可以我方服务器自动 //补发,补发数据的MD5和第一发送的不一样,里面的“$_GET['v10']”'返回状态. 1为正常发送回来 2为补单发送回来) // 做好加点后一定要把订单 状态改变。!并注意安全处理。 //关于订单安全做法 如有不明请电话:0755-82126136 徐先生 //此页面不要使用SEESION cooke 请用数据库管理你的订单 */ //////////此处请商户自己编写求出订单状态代码 以备下方条件判断用! //写VB返回记录 if (rtmd5 == "" || rtmd5 == null) { litMsg.Text = "没有此订单信息"; return; } treasureFacade.WriteReturnVBDetail(result); //'步骤1 :包含A和B //'A步骤,盈华讯方服务器第一次探测商户服务器状态.并给该订单充值 //'B步骤,检查该订单如果订单使用了 就把该订单的充值记录给用户打印. if (rtflag == "1") { if (md5password == rtmd5) { //'校验商户订单号码状态 string orderID = rtcoid.Trim(); OnLineOrder order = treasureFacade.GetOnlineOrder(orderID); if (order != null) { if (order.OrderStatus == 0) { //充值 ShareDetialInfo detailInfo = new ShareDetialInfo(); detailInfo.OrderID = orderID; detailInfo.PayAmount = Convert.ToDecimal(rtmz); detailInfo.IPAddress = Utility.UserIP; Message msg = treasureFacade.FilliedOnline(detailInfo, 1); if (msg.Success) { BindText(order); } } else { BindText(order); } } } } //'步骤2 :包含A补单 //'A补单:如果由于网络服务器中断或加点失败,会在5分钟内开始给用户补发数据.持续200次 24个小时 if (rtflag == "2") { if (md5password == rtmd5) { //'校验商户订单号码状态 string orderID = rtcoid.Trim(); OnLineOrder order = treasureFacade.GetOnlineOrder(orderID); if (order != null) { if (order.OrderStatus == 0) { //充值 ShareDetialInfo detailInfo = new ShareDetialInfo( ); detailInfo.OrderID = orderID; detailInfo.PayAmount = Convert.ToDecimal(rtmz); detailInfo.IPAddress = Utility.UserIP; Message msg = treasureFacade.FilliedOnline(detailInfo, 1); if (msg.Success) { BindText(order); } } else { BindText(order); } } } } }