public string Notify <T>(PayMointor <T> proc) where T : class { var request = HttpContext.Current.Request; string MerId = request["MerId"]; //商户号 string OrdId = request["OrderNo"]; //订单号 string TransAmt = request["Amount"]; //订单金额 string CuryId = request["CurrencyCode"]; //货币代码 string TransDate = request["TransDate"]; //订单日期 string TransType = request["TransType"]; //交易类型 string Priv1 = request["Priv1"]; //备注 string GateId = request["GateId"]; //网关 string status = request["status"]; proc.Init(OrdId); string CheckValue = request["checkvalue"];//签名数据 bool res = ChinaPaySignData.check(MerId, OrdId, TransAmt, CuryId, TransDate, TransType, status, CheckValue); if (res) { proc.PaidFail(); return("0"); } else { proc.PaidSuccess(); return("1"); } }
public string Notify <T>(PayMointor <T> proc) where T : class { /* * http://localhost:8080/pay/notify_1_3.html?body=%d6%a7%b8%b6%b6%a9%b5%a5&[email protected]&buyer_id=2088302384317810&exterface=create_direct_pay_by_user&is_success=T¬ify_id=RqPnCoPT3K9%2Fvwbh3I73%2FBJ%2FCypvvG4k72c8QSXT5yE44%2FMSUK0zqoTBaXxNf4BPOKZI¬ify_time=2013-03-21+11:42:53¬ify_type=trade_status_sync&out_trade_no=20130125033249408&payment_type=1&[email protected]&seller_id=2088801968591818&subject=%E6%94%AF%E4%BB%98%E8%AE%A2%E5%8D%95&total_fee=0.01&trade_no=2013032154249581&trade_status=TRADE_SUCCESS&sign=af01b9aa0bd11df2a723eb5ef52e9298&sign_type=MD5 */ var request = HttpContext.Current.Request; //商户号 string partner = AlipayMobileConfig.Partner; //密钥 string key = AlipayMobileConfig.Key; Dictionary <string, string> sPara = this.GetRequestPost(); if (sPara.Count > 0)//判断是否有带返回参数 { Notify aliNotify = new Notify(); bool verifyResult = aliNotify.VerifyNotify(sPara, request.Form["sign"]); if (verifyResult) //验证成功 { //解密(如果是RSA签名需要解密,如果是MD5签名则下面一行清注释掉) // sPara = aliNotify.Decrypt(sPara); //XML解析notify_data数据 try { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(sPara["notify_data"]); //商户订单号 string out_trade_no = xmlDoc.SelectSingleNode("/notify/out_trade_no").InnerText; //支付宝交易号 string trade_no = xmlDoc.SelectSingleNode("/notify/trade_no").InnerText; //交易状态 string trade_status = xmlDoc.SelectSingleNode("/notify/trade_status").InnerText; proc.Init(out_trade_no); if (trade_status == "TRADE_FINISHED") { //判断该笔订单是否在商户网站中已经做过处理 //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 //如果有做过处理,不执行商户的业务程序 //注意: //该种交易状态只在两种情况下出现 //1、开通了普通即时到账,买家付款成功后。 //2、开通了高级即时到账,从该笔交易成功时间算起,过了签约时的可退款时限(如:三个月以内可退款、一年以内可退款等)后。 proc.PaidSuccess(); return("success"); //请不要修改或删除 } else if (trade_status == "TRADE_SUCCESS") { //判断该笔订单是否在商户网站中已经做过处理 //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 //如果有做过处理,不执行商户的业务程序 //注意: //该种交易状态只在一种情况下出现——开通了高级即时到账,买家付款成功后。 proc.PaidSuccess(); return("success"); //请不要修改或删除 } else { return(trade_status); } } catch (Exception exc) { return(exc.Message); } proc.PaidSuccess(); //log.Append("success:" + request.Form["trade_status"]+"\r\n"+order_no+"\r\n"); return("success"); //请不要修改或删除 } } proc.PaidFail(); //log.Append("fail:" + request.Form["trade_status"] + "\r\n"); return("fail"); }
public string AlipayNotify <T>(PayMointor <T> proc) where T : class { SortedDictionary <string, string> sPara = PayUtil.GetRequestPost(); var request = HttpContext.Current.Request; if (sPara.Count > 0)//判断是否有带返回参数 { Notify aliNotify = new Notify(); bool verifyResult = aliNotify.Verify(sPara, request.Form["notify_id"], request.Form["sign"]); if (verifyResult)//验证成功 { ///////////////////////////////////////////////////////////////////////////////////////////////////////////// //请在这里加上商户的业务逻辑程序代码 //——请根据您的业务逻辑来编写程序(以下代码仅作参考)—— //获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表 //商户订单号 string out_trade_no = request.Form["out_trade_no"]; //支付宝交易号 string trade_no = request.Form["trade_no"]; //交易状态 string trade_status = request.Form["trade_status"]; proc.Init(out_trade_no); if (request.Form["trade_status"] == "WAIT_BUYER_PAY") { proc.AsyncState(PaymentAsyncState.WAIT_BUYER_PAY); } else if (request.Form["trade_status"] == "WAIT_SELLER_SEND_GOODS") { proc.PaidSuccess(); //该判断示买家已在支付宝交易管理中产生了交易记录且付款成功,但卖家没有发货 //判断该笔订单是否在商户网站中已经做过处理 //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 //如果有做过处理,不执行商户的业务程序 } else if (request.Form["trade_status"] == "WAIT_BUYER_CONFIRM_GOODS") {//该判断表示卖家已经发了货,但买家还没有做确认收货的操作 //判断该笔订单是否在商户网站中已经做过处理 //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 //如果有做过处理,不执行商户的业务程序 } else if (request.Form["trade_status"] == "TRADE_FINISHED") {//该判断表示买家已经确认收货,这笔交易完成 //判断该笔订单是否在商户网站中已经做过处理 //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 //如果有做过处理,不执行商户的业务程序 } else { } return("success"); //——请根据您的业务逻辑来编写程序(以上代码仅作参考)—— ///////////////////////////////////////////////////////////////////////////////////////////////////////////// } else//验证失败 { proc.PaidFail(); //log.Append("fail:" + request.Form["trade_status"] + "\r\n"); return("fail"); } } else { return("无通知参数"); } }
public string Notify <T>(PayMointor <T> proc) where T : class { //商户号 string partner = TenpayUtil.bargainor_id; //密钥 string key = TenpayUtil.tenpay_key; //创建ResponseHandler实例 ResponseHandler resHandler = new ResponseHandler(System.Web.HttpContext.Current); resHandler.setKey(key); //判断签名 if (resHandler.isTenpaySign()) { ///通知id string notify_id = resHandler.getParameter("notify_id"); //通过通知ID查询,确保通知来至财付通 //创建查询请求 RequestHandler queryReq = new RequestHandler(System.Web.HttpContext.Current); queryReq.init(); queryReq.setKey(key); queryReq.setGateUrl("https://gw.tenpay.com/gateway/verifynotifyid.xml"); queryReq.setParameter("partner", partner); 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(key); //判断签名及结果 //只有签名正确,retcode为0,trade_state为0才是支付成功 if (queryRes.isTenpaySign() && queryRes.getParameter("retcode") == "0" && queryRes.getParameter("trade_state") == "0" && queryRes.getParameter("trade_mode") == "1") { //取结果参数做业务处理 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"); proc.Init(out_trade_no); //判断签名及结果 if (queryRes.isTenpaySign() && "0".Equals(queryRes.getParameter("retcode"))) { // Response.Write("id验证成功"); if ("1".Equals(trade_mode)) { //即时到账 if ("0".Equals(trade_state)) { proc.PaidSuccess(); return("Success"); } else { proc.PaidFail(); //SetLogMessage("即时到账支付失败"); return("即时到账支付失败"); } } else if ("2".Equals(trade_mode)) { //中介担保 //------------------------------ //中介担保处理业务开始 //------------------------------ //处理数据库逻辑 //注意交易单不要重复处理 //注意判断返回金额 int iStatus = 0; switch (iStatus) { case 0: //付款成功 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; } //------------------------------ //中介担保处理业务开始 //------------------------------ //给财付通系统发送成功信息,财付通系统收到此结果后不再进行后续通知 proc.PaidSuccess(); return("Success"); } } else { //错误时,返回结果可能没有签名,写日志trade_state、retcode、retmsg看失败详情。 //通知财付通处理失败,需要重新通知\ // SetLogMessage("查询验证签名失败或id验证失败\r\nretcode:" + queryRes.getParameter("retcode")); proc.PaidFail(); return("查询验证签名失败或id验证失败retcode:" + queryRes.getParameter("retcode"));; } } else { //通知财付通处理失败,需要重新通知 //SetLogMessage("后台调用通信失败\r\ncall err:" + httpClient.getErrInfo() + "<br>" + httpClient.getResponseCode() + "<br>"); proc.PaidFail(); return("后台调用通信失败call err:" + httpClient.getErrInfo() + "<br>" + httpClient.getResponseCode() + "<br>"); } } else { proc.PaidFail(); return("通知签名验证失败"); } } return(""); }
public string Notify <T>(PayMointor <T> proc) where T : class { /* * http://localhost:8080/pay/notify_1_3.html?body=%d6%a7%b8%b6%b6%a9%b5%a5&[email protected]&buyer_id=2088302384317810&exterface=create_direct_pay_by_user&is_success=T¬ify_id=RqPnCoPT3K9%2Fvwbh3I73%2FBJ%2FCypvvG4k72c8QSXT5yE44%2FMSUK0zqoTBaXxNf4BPOKZI¬ify_time=2013-03-21+11:42:53¬ify_type=trade_status_sync&out_trade_no=20130125033249408&payment_type=1&[email protected]&seller_id=2088801968591818&subject=%E6%94%AF%E4%BB%98%E8%AE%A2%E5%8D%95&total_fee=0.01&trade_no=2013032154249581&trade_status=TRADE_SUCCESS&sign=af01b9aa0bd11df2a723eb5ef52e9298&sign_type=MD5 */ var request = HttpContext.Current.Request; //商户号 string partner = AlipayConfig.Partner; //密钥 string key = AlipayConfig.Key; SortedDictionary <string, string> sPara = PayUtil.GetRequestPost(); if (sPara.Count > 0)//判断是否有带返回参数 { Notify aliNotify = new Notify(); bool verifyResult = aliNotify.Verify(sPara, request.Form["notify_id"], request.Form["sign"]); if (verifyResult)//验证成功 { ///////////////////////////////////////////////////////////////////////////////////////////////////////////// //请在这里加上商户的业务逻辑程序代码 //——请根据您的业务逻辑来编写程序(以下代码仅作参考)—— //获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表 string trade_no = request.Form["trade_no"]; //支付宝交易号 string order_no = request.Form["out_trade_no"]; //获取订单号 string total_fee = request.Form["total_fee"]; //获取总金额 string subject = request.Form["subject"]; //商品名称、订单名称 string body = request.Form["body"]; //商品描述、订单备注、描述 string buyer_email = request.Form["buyer_email"]; //买家支付宝账号 string trade_status = request.Form["trade_status"]; //交易状态 proc.Init(order_no); if (request.Form["trade_status"] == "TRADE_FINISHED") { //判断该笔订单是否在商户网站中已经做过处理 //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 //如果有做过处理,不执行商户的业务程序 //注意: //该种交易状态只在两种情况下出现 //1、开通了普通即时到账,买家付款成功后。 //2、开通了高级即时到账,从该笔交易成功时间算起,过了签约时的可退款时限(如:三个月以内可退款、一年以内可退款等)后。 } else if (request.Form["trade_status"] == "TRADE_SUCCESS") { //判断该笔订单是否在商户网站中已经做过处理 //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 //如果有做过处理,不执行商户的业务程序 //注意: //该种交易状态只在一种情况下出现——开通了高级即时到账,买家付款成功后。 } else { } //——请根据您的业务逻辑来编写程序(以上代码仅作参考)—— proc.PaidSuccess(); //log.Append("success:" + request.Form["trade_status"]+"\r\n"+order_no+"\r\n"); return("success"); //请不要修改或删除 ///////////////////////////////////////////////////////////////////////////////////////////////////////////// } else//验证失败 { proc.PaidFail(); //log.Append("fail:" + request.Form["trade_status"] + "\r\n"); return("fail"); } } else { //log.Append("无通知参数:" + request.Form["trade_status"] + "\r\n"); return("无通知参数"); } }