protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { // 校验返回数据包 BuyCallbackResult result = Buy.VerifyCallback(Game.Web.Pay.YbBuy.FormatQueryString.GetQueryString("p1_MerId"), Game.Web.Pay.YbBuy.FormatQueryString.GetQueryString("r0_Cmd"), Game.Web.Pay.YbBuy.FormatQueryString.GetQueryString("r1_Code"), Game.Web.Pay.YbBuy.FormatQueryString.GetQueryString("r2_TrxId"), Game.Web.Pay.YbBuy.FormatQueryString.GetQueryString("r3_Amt"), Game.Web.Pay.YbBuy.FormatQueryString.GetQueryString("r4_Cur"), Game.Web.Pay.YbBuy.FormatQueryString.GetQueryString("r5_Pid"), Game.Web.Pay.YbBuy.FormatQueryString.GetQueryString("r6_Order"), Game.Web.Pay.YbBuy.FormatQueryString.GetQueryString("r7_Uid"), Game.Web.Pay.YbBuy.FormatQueryString.GetQueryString("r8_MP"), Game.Web.Pay.YbBuy.FormatQueryString.GetQueryString("r9_BType"), Game.Web.Pay.YbBuy.FormatQueryString.GetQueryString("rp_PayDate"), Game.Web.Pay.YbBuy.FormatQueryString.GetQueryString("hmac")); if (string.IsNullOrEmpty(result.ErrMsg)) { if (result.R1_Code == "1") { if (result.R9_BType == "1") { // 写充值记录 ShareDetialInfo detailInfo = new ShareDetialInfo(); detailInfo.OrderID = result.R6_Order; detailInfo.IPAddress = Utility.UserIP; detailInfo.PayAmount = decimal.Parse(result.R3_Amt); Message msg = treasureFacade.FilliedOnline(detailInfo, 0); // 下面的错误提示和成功提示要POST出去。这个判断力。用户访问不到,充值成功与否都得给用户提示。 // 卡密的页面也是如此。都要想办法给用户展示,最好这个页面影藏显示去。别给用户看。 // 你们测试的时候自己看下。 if (!msg.Success) { Response.Redirect("/WiteCard.html?OID=" + result.R6_Order); Response.End(); } else { Response.Redirect("/WiteCard.html?OID=" + result.R6_Order); } // 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'字符串 // 这里用户可以看见。想办法不要用户看见。但这句绝对不能取消 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); Response.Redirect("/WiteCard.html?OID=" + result.R6_Order); } } else { Response.Write("支付失败!请重试<a href='/'>点击返回</a>"); } } else { Response.Write("交易签名无效!请重试<a href='/pay/payIndex.aspx'>点击返回</a>"); } } }
protected void Page_Load(object sender, EventArgs e) { string outOrder_no = Request["outOrder_no"].ToString(); string sign = Request["sign"].ToString(); string realsign = weixindes.Decrypt(sign, pwd); if (("?outOrder_no=" + outOrder_no).Equals(realsign)) { ShareDetialInfo detailInfo = new ShareDetialInfo(); detailInfo.OrderID = outOrder_no; detailInfo.IPAddress = Utility.UserIP; OnLineOrder onlineorder = treasureFacade.GetOnlineOrder(outOrder_no); if (onlineorder != null) { detailInfo.PayAmount = onlineorder.CardPrice; Message msg = treasureFacade.FilliedOnline(detailInfo, 0); if (!msg.Success) { Response.Write("Fail"); } else { Response.Write("Success"); } } else { Response.Write("Fail"); } } else { Response.Write("Fail"); } }
protected void Page_Load(object sender, EventArgs e) { TreasureFacade treasureFacade = new TreasureFacade(); string yb_data = Request["data"].ToString(); string yb_encryptkey = Request["encryptkey"].ToString(); Boolean ok = EncryptUtil.checkDecryptAndSign(yb_data, yb_encryptkey, Config.yibaoPublickey, Config.merchantPrivatekey); if (ok) { string AESKey = RSA.Class.RSAFromPkcs8.decryptData(yb_encryptkey, Config.merchantPrivatekey, "UTF-8"); string realData = payapi_mobile_demo.AES.Decrypt(yb_data, AESKey); SortedDictionary <string, object> sd = Newtonsoft.Json.JsonConvert.DeserializeObject <SortedDictionary <string, object> >(realData); /** 3.取得data明文sign。 */ string sign = (string)sd["sign"]; /** 4.对map中的值进行验证 */ StringBuilder signData = new StringBuilder(); foreach (var item in sd) { /** 把sign参数隔过去 */ if (item.Key == "sign") { continue; } signData.Append(item.Value); } string orderid = (string)sd["orderid"]; string money = (Convert.ToInt32(sd["amount"])).ToString(); ShareDetialInfo detailInfo = new ShareDetialInfo();//请不要修改或删除 detailInfo.PayAmount = decimal.Parse(money) / 100; detailInfo.OrderID = orderid; detailInfo.IPAddress = GameRequest.GetUserIP(); Message message = treasureFacade.FilliedOnline(detailInfo, 0); if (message.Success) { Response.Write("success"); } else { Response.Write("sorry"); } } else { Response.Write("sorry"); } }
protected void Page_Load(object sender, EventArgs e) { string key = System.Configuration.ConfigurationSettings.AppSettings["DayKey"]; //密钥 string merId = System.Configuration.ConfigurationSettings.AppSettings["DayMerId"]; //商户ID string status = GameRequest.GetFormString("status"); //交易状态 string sign = GameRequest.GetFormString("sign"); //签名 string orderId = GameRequest.GetFormString("orderId"); //订单号 float payMoney = GameRequest.GetFormFloat("payMoney", 0); //金额 string operDate = GameRequest.GetFormString("operDate"); //订单日期 string userName = GameRequest.GetFormString("userName"); //用户名 string showUrl = "http://" + HttpContext.Current.Request.Url.Authority + "/Pay/PayShow.aspx"; //交易完成后提示地址 string signStr = merId + "|" + orderId + "|" + status + "|" + payMoney + "|" + operDate + "|" + userName + "|" + key; string testSign = EncryptMD5(signStr, false, 32); //计算签名 ReturnDayDetailInfo result = new ReturnDayDetailInfo( ); result.OrderID = orderId; result.PayMoney = Convert.ToDecimal(payMoney); result.Sign = sign; result.UserName = userName; result.PayType = 1; result.Status = status; //天天付支付结果入库 treasureFacade.WriteReturnDayDetail(result); if (signStr == testSign) { //交易状态为005时表示交易完成 if (status == "055") { ShareDetialInfo detailInfo = new ShareDetialInfo( ); detailInfo.OrderID = orderId; detailInfo.IPAddress = Utility.UserIP; Message umsg = treasureFacade.FilliedOnline(detailInfo, 0); if (umsg.Success) { rtnUrl = showUrl + "?msg=1";//在线充值成功 } else { rtnUrl = showUrl + "?msg=2";//在线充值成功,数据正在更新中 } } else { rtnOk = 1; rtnUrl = showUrl + "?msg=3"; //在线充值失败! } } }
protected void Logic(SZXCallbackResult result) { if (result.R1_Code == "1") { ShareDetialInfo detailInfo = new ShareDetialInfo(); TreasureFacade treasureFacade = new TreasureFacade(); detailInfo.OrderID = result.P2_Order; detailInfo.IPAddress = Utility.UserIP; detailInfo.PayAmount = decimal.Parse(result.P7_realAmount); Message msg = treasureFacade.FilliedOnline(detailInfo, 0); Response.Write(detailInfo.PayAmount); Response.Write(msg.Content); Response.Write("支付成功"); } else { Response.Write("支付失败"); } }
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'字符串 Response.Write("SUCCESS"); } } else { Response.Write("支付失败!"); } } else { Response.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(); }
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, 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"; } }
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, 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"); } } }
//更新数据 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); } } } } }