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(""); }
protected void Page_Load(object sender, EventArgs e) { //商户号 string partner = "1900000109"; //密钥 string key = "8934e7d15453e97507ef794cf7b0519d"; //创建请求对象 RequestHandler reqHandler = new RequestHandler(Context); //通信对象 TenpayHttpClient httpClient = new TenpayHttpClient(); //应答对象 ClientResponseHandler resHandler = new ClientResponseHandler(); //----------------------------- //设置请求参数 //----------------------------- reqHandler.init(); reqHandler.setKey(key); reqHandler.setGateUrl("https://gw.tenpay.com/gateway/normalrefundquery.xml"); reqHandler.setParameter("partner", partner); //out_trade_no和transaction_id、out_refund_no、refund_id至少一个必填,同时存在时以优先级高为准, //优先级为:refund_id>out_refund_no>transaction_id>out_trade_no //reqHandler.setParameter("refund_id", "1144357708"); //reqHandler.setParameter("out_refund_no", "1144357708"); reqHandler.setParameter("transaction_id", "1900000109201103020030626316"); //reqHandler.setParameter("out_trade_no", "1144357708"); string requestUrl = reqHandler.getRequestURL(); httpClient.setCertInfo("c:\\key\\1900000107.pfx", "1900000107"); //设置请求内容 httpClient.setReqContent(requestUrl); //设置超时 httpClient.setTimeOut(10); string rescontent = ""; //后台调用 if (httpClient.call()) { //获取结果 rescontent = httpClient.getResContent(); resHandler.setKey(key); //设置结果参数 resHandler.setContent(rescontent); //判断签名及结果 if (resHandler.isTenpaySign() && resHandler.getParameter("retcode") == "0") { //商户订单号 string out_trade_no = resHandler.getParameter("out_trade_no"); //财付通订单号 string transaction_id = resHandler.getParameter("transaction_id"); //金额,以分为单位 string total_fee = resHandler.getParameter("total_fee"); //如果有使用折扣券,discount有值,total_fee+discount=原请求的total_fee string discount = resHandler.getParameter("discount"); int refund_count = int.Parse(resHandler.getParameter("refund_count")); Response.Write("refund_count=" + refund_count + "<br>"); for (int i = 0; i < refund_count; i++) { string refund_state = resHandler.getParameter("refund_state_" + i); string refund_id = resHandler.getParameter("refund_id_" + i); Response.Write("OK,refund " + i + ",transaction_id=" + resHandler.getParameter("transaction_id") + ", refund_id=" + refund_id + ", refund_state=" + refund_state + "<br>"); } } else { //错误时,返回结果未签名。 //如包格式错误或未确认结果的,请使用原来订单号重新发起,确认结果,避免多次操作 Response.Write("业务错误信息或签名错误:" + resHandler.getParameter("retcode") + "," + resHandler.getParameter("retmsg") + "<br>"); } } else { //后台调用通信失败 Response.Write("call err:" + httpClient.getErrInfo() + "<br>" + httpClient.getResponseCode() + "<br>"); //有可能因为网络原因,请求已经处理,但未收到应答。 } //获取debug信息,建议把请求、应答内容、debug信息,通信返回码写入日志,方便定位问题 /* * Response.Write("http res:" + httpClient.getResponseCode() + "," + httpClient.getErrInfo() + "<br>"); * Response.Write("req url:" + requestUrl + "<br/>"); * Response.Write("req debug:" + reqHandler.getDebugInfo() + "<br/>"); * Response.Write("res content:" + Server.HtmlEncode(rescontent) + "<br/>"); * Response.Write("res debug:" + Server.HtmlEncode(resHandler.getDebugInfo()) + "<br/>"); */ }
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"); } else { Response.Write("即时到账支付失败"); } } else if ("2".Equals(trade_mode)) { //中介担保 //------------------------------ //中介担保处理业务开始 //------------------------------ //处理数据库逻辑 //注意交易单不要重复处理 //注意判断返回金额 int iStatus = Convert.ToInt32(trade_state); 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; } //------------------------------ //中介担保处理业务开始 //------------------------------ //给财付通系统发送成功信息,财付通系统收到此结果后不再进行后续通知 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) { //商户号 string partner = "1900000107"; //密钥 string key = "82d2f8b9fd7695aec51415ab2900a755"; //创建请求对象 RequestHandler reqHandler = new RequestHandler(Context); //通信对象 TenpayHttpClient httpClient = new TenpayHttpClient(); //应答对象 ClientResponseHandler resHandler = new ClientResponseHandler(); //----------------------------- //设置请求参数 //----------------------------- reqHandler.init(); reqHandler.setKey(key); reqHandler.setGateUrl("https://gw.tenpay.com/gateway/normalrefundquery.xml"); //reqHandler.setGateUrl("https://api.mch.tenpay.com/refundapi/gateway/normalrefundquery.xml"); reqHandler.setParameter("partner", partner); //out_trade_no和transaction_id至少一个必填,同时存在时transaction_id优先 reqHandler.setParameter("out_trade_no", "1144357708"); //reqHandler.setParameter("transaction_id", "1900000107201011300017102199"); string requestUrl = reqHandler.getRequestURL(); requestUrl = "http://localhost:8180/test/test.jsp"; //设置请求内容 httpClient.setReqContent(requestUrl); //设置超时 httpClient.setTimeOut(10); string rescontent = ""; //后台调用 if (httpClient.call()) { //获取结果 rescontent = httpClient.getResContent(); /* * resHandler.setKey(key); * //设置结果参数 * resHandler.setContent(rescontent); * * //判断签名及结果 * if (resHandler.isTenpaySign() && resHandler.getParameter("retcode") == "0") * { * //商户订单号 * string out_trade_no = resHandler.getParameter("out_trade_no"); * //财付通订单号 * string transaction_id = resHandler.getParameter("transaction_id"); * //金额,以分为单位 * string total_fee = resHandler.getParameter("total_fee"); * //如果有使用折扣券,discount有值,total_fee+discount=原请求的total_fee * string discount = resHandler.getParameter("discount"); * string refund_state_0 = resHandler.getParameter("refund_state_0"); * * Response.Write("OK,transaction_id=" + resHandler.getParameter("transaction_id") + ", refund_state_0=" + refund_state_0 + "<br>"); * * * } * else * { * //错误时,返回结果未签名。 * //如包格式错误或未确认结果的,请使用原来订单号重新发起,确认结果,避免多次操作 * Response.Write("业务错误信息或签名错误:" + resHandler.getParameter("retcode") + "," + resHandler.getParameter("retmsg") + "<br>"); * } * */ } else { //后台调用通信失败 Response.Write("call err:" + httpClient.getErrInfo() + "<br>" + httpClient.getResponseCode() + "<br>"); //有可能因为网络原因,请求已经处理,但未收到应答。 } //获取debug信息,建议把请求、应答内容、debug信息,通信返回码写入日志,方便定位问题 Response.Write("http res:" + httpClient.getResponseCode() + "," + httpClient.getErrInfo() + "<br>"); Response.Write("req url:" + requestUrl + "<br/>"); Response.Write("req debug:" + reqHandler.getDebugInfo() + "<br/>"); Response.Write("res content:" + Server.HtmlEncode(rescontent) + "<br/>"); Response.Write("res debug:" + Server.HtmlEncode(resHandler.getDebugInfo()) + "<br/>"); }
protected void Page_Load(object sender, EventArgs e) { //获取访问的商户COMID if (Domain_def.Domain_yanzheng(RequestUrl))//如果符合shop101.etown.cn的格式,则从多微信商户基本信息表中获取comid { comid = Int32.Parse(Domain_def.Domain_Huoqu(RequestUrl)); } else { B2b_company_info companyinfo = B2bCompanyData.GetComId(RequestUrl); if (companyinfo != null) { comid = companyinfo.Com_id; } } #region 获得财付通支付参数 tenpay_id,tenpay_key //根据产品判断商家是否含有自己的财付通支付: //a.含有的话支付到商家; //b.没有的话支付到平台财付通账户(易城账户,公司id=106) string tenpay_id = ""; string tenpay_key = ""; B2b_finance_paytype model = new B2b_finance_paytypeData().GetFinancePayTypeByComid(comid); if (model != null) { //商家财付通支付的所有参数都存在 if (model.Tenpay_id != "" && model.Tenpay_key != "") { tenpay_id = model.Tenpay_id; tenpay_key = model.Tenpay_key; } else { model = new B2b_finance_paytypeData().GetFinancePayTypeByComid(106); if (model == null) { Response.Write("商户财付通信息设置不完全!"); Response.End(); return; } else { //商家财付通支付的所有参数都存在 if (model.Tenpay_id != "" && model.Tenpay_key != "") { tenpay_id = model.Tenpay_id; tenpay_key = model.Tenpay_key; } else { Response.Write("商户财付通信息设置不完全!!"); Response.End(); return; } } } } else { model = new B2b_finance_paytypeData().GetFinancePayTypeByComid(106); if (model == null) { Response.Write("商户财付通信息设置不完全!"); Response.End(); return; } else { //商家财付通支付的所有参数都存在 if (model.Tenpay_id != "" && model.Tenpay_key != "") { tenpay_id = model.Tenpay_id; tenpay_key = model.Tenpay_key; } else { Response.Write("商户财付通信息设置不完全!!"); Response.End(); return; } } } #endregion //创建ResponseHandler实例 ResponseHandler resHandler = new ResponseHandler(Context); resHandler.setKey(tenpay_key); //判断签名 if (resHandler.isTenpaySign()) { ///通知id string notify_id = resHandler.getParameter("notify_id"); //通过通知ID查询,确保通知来至财付通 //创建查询请求 RequestHandler queryReq = new RequestHandler(Context); queryReq.init(); queryReq.setKey(tenpay_key); queryReq.setGateUrl("https://gw.tenpay.com/gateway/simpleverifynotifyid.xml"); queryReq.setParameter("partner", tenpay_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(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)) { //------------------------------ //即时到账处理业务开始 //------------------------------ //处理数据库逻辑 //注意交易单不要重复处理 //注意判断返回金额 //------------------------------ //即时到账处理业务完毕 //------------------------------ string retunstr = new PayReturnSendEticketData().PayReturnSendEticket(notify_id, Int32.Parse(out_trade_no), total_fee.ConvertTo <decimal>(), "TRADE_SUCCESS"); //对分销充值订单支付返回,对绑定订单进行处理确认 var handdata = OrderJsonData.agentorderpay_Hand(Int32.Parse(out_trade_no)); //给财付通系统发送成功信息,财付通系统收到此结果后不再进行后续通知 Response.Write("success"); } else { Response.Write("即时到账支付失败"); } } else if ("2".Equals(trade_mode)) { //中介担保 //------------------------------ //中介担保处理业务开始 //------------------------------ //处理数据库逻辑 //注意交易单不要重复处理 //注意判断返回金额 int iStatus = Convert.ToInt32(trade_state); 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; } //------------------------------ //中介担保处理业务开始 //------------------------------ //给财付通系统发送成功信息,财付通系统收到此结果后不再进行后续通知 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) { //商户号 string partner = "1900000109"; //密钥 string key = "8934e7d15453e97507ef794cf7b0519d"; //创建请求对象 CheckRequestHandler reqHandler = new CheckRequestHandler(Context); //通信对象 TenpayHttpClient httpClient = new TenpayHttpClient(); //----------------------------- //设置请求参数 //----------------------------- reqHandler.init(); reqHandler.setKey(key); reqHandler.setParameter("spid", partner); reqHandler.setParameter("trans_time", "2011-10-12"); reqHandler.setParameter("stamp", TenpayUtil.UnixStamp().ToString()); reqHandler.setParameter("cft_signtype", "0"); reqHandler.setParameter("mchtype", "0"); string requestUrl = reqHandler.getRequestURL(); //设置请求内容 httpClient.setReqContent(requestUrl); //设置超时 httpClient.setTimeOut(10); string rescontent = ""; //后台调用 if (httpClient.call()) { //获取结果 rescontent = httpClient.getResContent(); Response.Write("OK,内容:<br>\r\n" + httpClient.getResContent() + "<br>"); } else { //后台调用通信失败 Response.Write("call err:" + httpClient.getErrInfo() + "<br>" + httpClient.getResponseCode() + "<br>"); //有可能因为网络原因,请求已经处理,但未收到应答。 } //获取debug信息,建议把请求、应答内容、debug信息,通信返回码写入日志,方便定位问题 /* * Response.Write("http res:" + httpClient.getResponseCode() + "," + httpClient.getErrInfo() + "<br>"); * Response.Write("req url:" + requestUrl + "<br/>"); * Response.Write("req debug:" + reqHandler.getDebugInfo() + "<br/>"); * */ }
protected void Page_Load(object sender, EventArgs e) { //商户号 string partner = "1900000109"; //密钥 string key = "8934e7d15453e97507ef794cf7b0519d"; //创建ResponseHandler实例 ResponseHandler resHandler = new ResponseHandler(Context); resHandler.setKey(key); //判断签名 if (resHandler.isTenpaySign()) { ///通知id string notify_id = resHandler.getParameter("notify_id"); //通过通知ID查询,确保通知来至财付通 //创建查询请求 RequestHandler queryReq = new RequestHandler(Context); 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"); //------------------------------ //处理业务开始 //------------------------------ //处理数据库逻辑 //注意交易单不要重复处理 //注意判断返回金额 //------------------------------ //处理业务完毕 //------------------------------ //通知财付通已经处理成功,无需重新通知 Response.Write("success"); } else { //错误时,返回结果可能没有签名,写日志trade_state、retcode、retmsg看失败详情。 //通知财付通处理失败,需要重新通知 Response.Write("fail"); } //获取查询的debug信息,建议把请求、应答内容、debug信息,通信返回码写入日志,方便定位问题 /* * Response.Write("http res:" + httpClient.getResponseCode() + "," + httpClient.getErrInfo() + "<br>"); * Response.Write("query req url:" + queryReq.getRequestURL() + "<br/>"); * Response.Write("query req debug:" + queryReq.getDebugInfo() + "<br/>"); * Response.Write("query res content:" + Server.HtmlEncode(httpClient.getResContent()) + "<br/>"); * Response.Write("query res debug:" + Server.HtmlEncode(queryRes.getDebugInfo()) + "<br/>"); */ } else { //通知财付通处理失败,需要重新通知 Response.Write("fail"); //写错误日志 Response.Write("call err:" + httpClient.getErrInfo() + "<br>" + httpClient.getResponseCode() + "<br>"); } //获取debug信息,建议把debug信息写入日志,方便定位问题 /* * string debuginfo = resHandler.getDebugInfo(); * Response.Write("<br/>debuginfo:" + debuginfo + "<br/>"); */ } }
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 = resHandler.getParameter("out_trade_no"); //财付通订单号 string transaction_id = resHandler.getParameter("transaction_id"); //金额,以分为单位 string total_fee = resHandler.getParameter("total_fee"); //如果有使用折扣券,discount有值,total_fee+discount=原请求的total_fee string discount = resHandler.getParameter("discount"); //订单类型 string order_type = resHandler.getParameter("attach"); //支付结果 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)) { //------------------------------ //即时到账处理业务开始 //------------------------------ //处理数据库逻辑 //注意交易单不要重复处理 //注意判断返回金额 //修改支付状态、时间 if (order_type.ToLower() == DTEnums.AmountTypeEnum.Recharge.ToString().ToLower()) //在线充值 { BLL.amount_log bll = new BLL.amount_log(); Model.amount_log model = bll.GetModel(out_trade_no); if (model == null) { Response.Write("该订单号不存在"); return; } if (model.value != (decimal.Parse(total_fee) / 100)) { Response.Write("订单金额和支付金额不相符"); return; } model.status = 1; model.complete_time = DateTime.Now; bool result = bll.Update(model); if (!result) { Response.Write("修改订单状态失败"); return; } } else if (order_type.ToLower() == DTEnums.AmountTypeEnum.BuyGoods.ToString().ToLower()) //购买商品 { BLL.orders bll = new BLL.orders(); Model.orders model = bll.GetModel(out_trade_no); if (model == null) { Response.Write("该订单号不存在"); return; } if (model.order_amount != (decimal.Parse(total_fee) / 100)) { Response.Write("订单金额和支付金额不相符"); return; } bool result = bll.UpdateField(out_trade_no, "payment_status=2,payment_time='" + DateTime.Now + "'"); if (!result) { Response.Write("修改订单状态失败"); return; } //扣除积分 if (model.point < 0) { new BLL.point_log().Add(model.user_id, model.user_name, model.point, "换购扣除积分,订单号:" + model.order_no); } } //------------------------------ //即时到账处理业务完毕 //------------------------------ //给财付通系统发送成功信息,财付通系统收到此结果后不再进行后续通知 Response.Write("success"); } else { Response.Write("即时到账支付失败"); } } } 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) { //商户号 string partner = "1900000109"; //密钥 string key = "8934e7d15453e97507ef794cf7b0519d"; //创建请求对象 RequestHandler reqHandler = new RequestHandler(Context); //通信对象 TenpayHttpClient httpClient = new TenpayHttpClient(); //应答对象 ClientResponseHandler resHandler = new ClientResponseHandler(); //----------------------------- //设置请求参数 //----------------------------- reqHandler.init(); reqHandler.setKey(key); reqHandler.setGateUrl("https://mch.tenpay.com/refundapi/gateway/refund.xml"); reqHandler.setParameter("partner", partner); //out_trade_no和transaction_id至少一个必填,同时存在时transaction_id优先 //reqHandler.setParameter("out_trade_no", "1458268681"); reqHandler.setParameter("transaction_id", "1900000109201103020030626316"); reqHandler.setParameter("out_refund_no", "2011030201"); reqHandler.setParameter("total_fee", "1"); reqHandler.setParameter("refund_fee", "1"); reqHandler.setParameter("refund_fee", "1"); reqHandler.setParameter("op_user_id", "1900000109"); reqHandler.setParameter("op_user_passwd", MD5Util.GetMD5("111111", "GBK")); reqHandler.setParameter("service_version", "1.1"); string requestUrl = reqHandler.getRequestURL(); httpClient.setCertInfo("c:\\key\\1900000109.pfx", "1900000109"); //设置请求内容 httpClient.setReqContent(requestUrl); //设置超时 httpClient.setTimeOut(10); string rescontent = ""; //后台调用 if (httpClient.call()) { //获取结果 rescontent = httpClient.getResContent(); resHandler.setKey(key); //设置结果参数 resHandler.setContent(rescontent); //判断签名及结果 if (resHandler.isTenpaySign() && resHandler.getParameter("retcode") == "0") { //商户订单号 string out_trade_no = resHandler.getParameter("out_trade_no"); //财付通订单号 string transaction_id = resHandler.getParameter("transaction_id"); //业务处理 Response.Write("OK,transaction_id=" + resHandler.getParameter("transaction_id") + "<br>"); } else { //错误时,返回结果未签名。 //如包格式错误或未确认结果的,请使用原来订单号重新发起,确认结果,避免多次操作 Response.Write("业务错误信息或签名错误:" + resHandler.getParameter("retcode") + "," + resHandler.getParameter("retmsg") + "<br>"); } } else { //后台调用通信失败 Response.Write("call err:" + httpClient.getErrInfo() + "<br>" + httpClient.getResponseCode() + "<br>"); //有可能因为网络原因,请求已经处理,但未收到应答。 } //获取debug信息,建议把请求、应答内容、debug信息,通信返回码写入日志,方便定位问题 Response.Write("http res:" + httpClient.getResponseCode() + "," + httpClient.getErrInfo() + "<br>"); Response.Write("req url:" + requestUrl + "<br/>"); Response.Write("req debug:" + reqHandler.getDebugInfo() + "<br/>"); Response.Write("res content:" + Server.HtmlEncode(rescontent) + "<br/>"); Response.Write("res debug:" + Server.HtmlEncode(resHandler.getDebugInfo()) + "<br/>"); }
protected void Page_Load(object sender, EventArgs e) { //商户号 string bargainor_id = ConfigurationManager.AppSettings["bargainor_id"].ToString(); //密钥 string key = ConfigurationManager.AppSettings["tenpay_key"].ToString(); //创建请求对象 RequestHandler reqHandler = new RequestHandler(Context); //通信对象 TenpayHttpClient httpClient = new TenpayHttpClient(); //应答对象 ClientResponseHandler resHandler = new ClientResponseHandler(); //当前时间 yyyyMMdd string domain_url = ConfigurationManager.AppSettings["domain_url"].ToString(); string date = DateTime.Now.ToString("yyyyMMdd"); string sp_billno = Request["order_no"]; string product_name = Request["product_name"]; string order_price = Request["order_price"];; string remarkexplain = Request["remarkexplain"]; double money = 0; if (null == Request["order_price"]) { Response.End(); return; } try { money = Convert.ToDouble(order_price); } catch { //Response.Write("支付金额格式错误!"); //Response.End(); //return; } if (null == sp_billno) { //生成订单10位序列号,此处用时间和随机数生成,商户根据自己调整,保证唯一 sp_billno = DateTime.Now.ToString("HHmmss") + TenpayUtil.BuildRandomStr(4); } else { sp_billno = Request["order_no"].ToString(); } reqHandler.init(); //设置密钥 reqHandler.setKey(key); reqHandler.setGateUrl("https://wap.tenpay.com/cgi-bin/wappayv2.0/wappay_init.cgi"); //----------------------------- //设置支付初始化参数 //----------------------------- reqHandler.setParameter("ver", "2.0"); reqHandler.setParameter("charset", "1"); reqHandler.setParameter("bank_type", "0"); reqHandler.setParameter("desc", "订单" + sp_billno); reqHandler.setParameter("bargainor_id", bargainor_id); reqHandler.setParameter("sp_billno", sp_billno); reqHandler.setParameter("total_fee", (money * 100).ToString()); reqHandler.setParameter("fee_type", "1"); reqHandler.setParameter("notify_url", domain_url + "/PayRetrun/ZFPay/tenpay/payNotifyUrl.aspx"); reqHandler.setParameter("callback_url", domain_url + "/PayRetrun/ZFPay/tenpay/payCallbackUrl.aspx"); reqHandler.setParameter("attach", "attach"); string initRequestUrl = reqHandler.getRequestURL(); //设置请求内容 httpClient.setReqContent(initRequestUrl); //设置超时 httpClient.setTimeOut(5); string rescontent = ""; string payRequestUrl = ""; //后台调用 if (httpClient.call()) { //获取结果 rescontent = httpClient.getResContent(); //设置结果参数 resHandler.setContent(rescontent); string token_id = resHandler.getParameter("token_id"); //成功,则token_id有只 if (token_id != "") { //生成支付请求 payRequestUrl = "https://wap.tenpay.com/cgi-bin/wappayv2.0/wappay_gate.cgi?token_id=" + TenpayUtil.UrlEncode(token_id, Request.ContentEncoding.BodyName); //Get的实现方式 string a_link = "<script type='text/javascript'>window.location = '" + payRequestUrl + "';</script>"; Response.Write(a_link); } else { //获取token_id调用失败 ,显示错误 页面 Response.Write("支付初始化错误:" + resHandler.getParameter("err_info") + "<br>"); } } else { //后台调用通信失败 Response.Write("call err:" + httpClient.getErrInfo() + "<br>" + httpClient.getResponseCode() + "<br>"); //有可能因为网络原因,请求已经处理,但未收到应答。 } //获取debug信息,建议把请求、应答内容、debug信息,通信返回码写入日志,方便定位问题 /* * Response.Write("http res:" + httpClient.getResponseCode() + "," + httpClient.getErrInfo() + "<br>"); * Response.Write("req url:" + initRequestUrl + "<br/>"); * Response.Write("req debug:" + reqHandler.getDebugInfo() + "<br/>"); * Response.Write("res content:" + Server.HtmlEncode(rescontent) + "<br/>"); * Response.Write("res debug:" + Server.HtmlEncode(resHandler.getDebugInfo()) + "<br/>"); * Response.Write("pay req url:" + payRequestUrl + "<br/>"); */ }
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 = resHandler.getParameter("out_trade_no"); //財付通訂單號 string transaction_id = resHandler.getParameter("transaction_id"); //金額,以分為單位 string total_fee = resHandler.getParameter("total_fee"); //如果有使用折扣券,discount有值,total_fee+discount=原請求的total_fee string discount = resHandler.getParameter("discount"); //訂單類型 string order_type = resHandler.getParameter("attach"); //付款結果 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)) { //------------------------------ //即時到賬處理業務開始 //------------------------------ //處理資料庫邏輯 //注意交易單不要重複處理 //注意判斷返回金額 //修改付款狀態、時間 if (order_type.ToLower() == DTEnums.AmountTypeEnum.Recharge.ToString().ToLower()) //線上充值 { BLL.amount_log bll = new BLL.amount_log(); Model.amount_log model = bll.GetModel(out_trade_no); if (model == null) { Response.Write("該訂單號不存在"); return; } if (model.value != (decimal.Parse(total_fee) / 100)) { Response.Write("訂單金額和付款金額不相符"); return; } model.status = 1; model.complete_time = DateTime.Now; bool result = bll.Update(model); if (!result) { Response.Write("修改訂單狀態失敗"); return; } } else if (order_type.ToLower() == DTEnums.AmountTypeEnum.BuyGoods.ToString().ToLower()) //購買商品 { BLL.orders bll = new BLL.orders(); Model.orders model = bll.GetModel(out_trade_no); if (model == null) { Response.Write("該訂單號不存在"); return; } if (model.order_amount != (decimal.Parse(total_fee) / 100)) { Response.Write("訂單金額和付款金額不相符"); return; } bool result = bll.UpdateField(out_trade_no, "payment_status=2,payment_time='" + DateTime.Now + "'"); if (!result) { Response.Write("修改訂單狀態失敗"); return; } //扣除積分 if (model.point < 0) { new BLL.point_log().Add(model.user_id, model.user_name, model.point, "換購扣除積分,訂單號:" + model.order_no); } } //------------------------------ //即時到賬處理業務完畢 //------------------------------ //給財付通系統發送成功資訊,財付通系統收到此結果後不再進行後續通知 Response.Write("success"); } else { Response.Write("即時到賬付款失敗"); } } } 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(); }
/// <summary> /// 财付通支付接口 /// </summary> /// <returns></returns> public ActionResult Index(string id) //传入订单ID 输入订单价格等信息 订单必须是未支付状态 { try { var order = psv.GetOrderByOrderNo(id); var tenpay_id = ConfigurationManager.AppSettings["tenpay_bargainor_id"]; //商户号 var tenpay_key = ConfigurationManager.AppSettings["tenpay_key"]; //密钥 //创建RequestHandler实例 RequestHandler reqHandler = new RequestHandler(HttpContext); //通信对象 TenpayHttpClient httpClient = new TenpayHttpClient(); //应答对象 ClientResponseHandler resHandler = new ClientResponseHandler(); reqHandler.init(); //设置密钥 reqHandler.setKey(TenpayUtil.tenpay_key); reqHandler.setGateUrl("https://wap.tenpay.com/cgi-bin/wappayv2.0/wappay_init.cgi"); //----------------------------- //设置支付初始化参数 //----------------------------- reqHandler.setParameter("ver", "2.0"); reqHandler.setParameter("charset", "1"); reqHandler.setParameter("bank_type", "0"); reqHandler.setParameter("desc", "蛋糕"); //订单描述 reqHandler.setParameter("bargainor_id", tenpay_id); reqHandler.setParameter("sp_billno", order.No); //订单号 reqHandler.setParameter("total_fee", (Convert.ToDouble(order.NeedPay) * 100).ToString()); reqHandler.setParameter("fee_type", "1"); reqHandler.setParameter("notify_url", ConfigurationManager.AppSettings["tenpay_notify"]); reqHandler.setParameter("callback_url", ConfigurationManager.AppSettings["tenpay_return"]); reqHandler.setParameter("attach", "attach"); string initRequestUrl = reqHandler.getRequestURL(); //设置请求内容 httpClient.setReqContent(initRequestUrl); //设置超时 httpClient.setTimeOut(5); string rescontent = ""; string payRequestUrl = ""; //后台调用 if (httpClient.call()) { //获取结果 rescontent = httpClient.getResContent(); //设置结果参数 resHandler.setContent(rescontent); string token_id = resHandler.getParameter("token_id"); //成功,则token_id有只 if (token_id != "") { //生成支付请求 payRequestUrl = "https://wap.tenpay.com/cgi-bin/wappayv2.0/wappay_gate.cgi?token_id=" + TenpayUtil.UrlEncode(token_id, Request.ContentEncoding.BodyName); return(Redirect(payRequestUrl)); } else { return(Content("支付初始化错误:" + resHandler.getParameter("err_info") + "<br>")); } } else { return(Content("call err:" + httpClient.getErrInfo() + "<br>" + httpClient.getResponseCode() + "<br>")); } } catch { return(Content("支付失败")); } }
/// <summary> /// 订单查询接口 /// </summary> /// <param name="tenpayParam"></param> /// <returns></returns> public string ClientSplitInquire(TenPayParam tenpayParam) { StringBuilder sbxml = new StringBuilder(); //创建请求对象 BaseSplitRequestHandler reqHandler = new BaseSplitRequestHandler(HttpContext.Current); //通信对象 TenpayHttpClient httpClient = new TenpayHttpClient(); //应答对象 ScriptClientResponseHandler resHandler = new ScriptClientResponseHandler(); //----------------------------- //设置请求参数 //----------------------------- reqHandler.init(); reqHandler.setKey(key); reqHandler.setGateUrl("https://mch.tenpay.com/cgi-bin/inquire_refund.cgi"); reqHandler.setParameter("cmdno", "96"); reqHandler.setParameter("version", "4"); reqHandler.setParameter("bargainor_id", bargainor_id); //商户号 reqHandler.setParameter("sp_billno", tenpayParam.Orderid); //商家订单号 reqHandler.setParameter("transaction_id", tenpayParam.PayNo); //财付通订单号 reqHandler.setParameter("return_url", "http://127.0.0.1/"); //后台系统调用,必现填写为http://127.0.0.1/ reqHandler.setParameter("date", tenpayParam.Date); //设置通信参数 httpClient.setCertInfo(pfxPath, bargainor_id); string requestUrl = reqHandler.getRequestURL(); //设置请求内容 httpClient.setReqContent(requestUrl); //设置超时 httpClient.setTimeOut(10); string rescontent = ""; //后台调用 if (httpClient.call()) { //获取结果 rescontent = httpClient.getResContent(); resHandler.setKey(key); //设置结果参数 resHandler.setContent(rescontent); //判断签名及结果 if (resHandler.isTenpaySign() && resHandler.getParameter("pay_result") == "0") { sbxml.Append("订单已支付成功!\r\n"); sbxml.AppendFormat("财付通订单号:{0}\r\n", resHandler.getParameter("transaction_id")); sbxml.AppendFormat("支付时间:{0}\r\n", resHandler.getParameter("pay_time")); sbxml.AppendFormat("bus_type:{0}\r\n", resHandler.getParameter("bus_type")); sbxml.AppendFormat("分账参数:{0}\r\n", resHandler.getParameter("bus_args")); if (!string.IsNullOrEmpty(resHandler.getParameter("bus_split_refund_args"))) { sbxml.AppendFormat("分账回退成功:{0}\r\n", resHandler.getParameter("bus_split_refund_args")); } else { sbxml.AppendFormat("未分账回退\r\n"); } if (!string.IsNullOrEmpty(resHandler.getParameter("bus_platform_re"))) { sbxml.AppendFormat("平台退款成功:{0}\r\n", resHandler.getParameter("bus_platform_re")); } else { sbxml.Append("未平台退款\r\n"); } if (!string.IsNullOrEmpty(resHandler.getParameter("bus_freeze_args"))) { sbxml.AppendFormat("已冻结:{0}\r\n", resHandler.getParameter("bus_freeze_args")); } else { sbxml.Append("账户未冻结\r\n"); } } else { sbxml.Append("业务错误信息或签名错误\r\n返回码:" + resHandler.getParameter("pay_result") + "\r\n返回信息:" + resHandler.getParameter("pay_info")); } } else { //后台调用通信失败 sbxml.Append("call err:" + httpClient.getErrInfo() + "\r\n" + httpClient.getResponseCode()); //有可能因为网络原因,请求已经处理,但未收到应答。 } return(sbxml.ToString()); }
/// <summary> /// 分账退款接口 /// </summary> /// <returns></returns> public bool ClientSplitRollback(TenPayParam tenPayParam) { PbProject.Logic.Pay.Bill bill = new PbProject.Logic.Pay.Bill(); bool result = true; if (tenPayParam.BackState == 1) { #region 平台退款 string details = string.Format("分账参数:{0}", tenPayParam.Bus_Args); //平台退款 int returnresult = ClientPlatformRefund(tenPayParam); OnErrorNew("订单号:" + tenPayParam.Orderid + ",平台退款状态:" + returnresult + ",details: " + details); switch (returnresult) { case 0: bill.CreateBillRefundFailedLog(null, tenPayParam.Orderid, "财付通平台退款通信失败:" + details); result = false; break; case 1: bill.CreateBillRefund(tenPayParam.Orderid, tenPayParam.PayNo, 4, "在线退款", "财付通退款", details); result = true; break; case 2: bill.CreateBillRefundFailedLog(null, tenPayParam.Orderid, "财付通平台退款业务错误信息或签名错误:" + details); result = false; break; default: break; } #endregion } else { //创建请求对象 BaseSplitRequestHandler reqHandler = new BaseSplitRequestHandler(HttpContext.Current); //通信对象 TenpayHttpClient httpClient = new TenpayHttpClient(); //应答对象 ScriptClientResponseHandler resHandler = new ScriptClientResponseHandler(); //请求参数设置 reqHandler.init(); reqHandler.setKey(key); reqHandler.setGateUrl("https://mch.tenpay.com/cgi-bin/split_rollback.cgi"); reqHandler.setParameter("cmdno", "95"); reqHandler.setParameter("version", "4"); reqHandler.setParameter("fee_type", "1"); reqHandler.setParameter("bargainor_id", bargainor_id); //商户号 reqHandler.setParameter("sp_billno", tenPayParam.OldOrderid); //商家订单号 reqHandler.setParameter("transaction_id", tenPayParam.PayNo); //财付通交易单号[外部订单号] reqHandler.setParameter("return_url", "http://127.0.0.1/"); //后台系统调用,必现填写为http://127.0.0.1/ reqHandler.setParameter("total_fee", tenPayParam.Total_Tee); //退款ID,同个ID财付通认为是同一个退款,格式为109+10位商户号+8位日期+7位序列号 string refund_id = string.Format("109{0}{1}{2}", bargainor_id, DateTime.Now.ToString("yyyyMMdd"), TenpayUtil.BuildRandomStr(7)); reqHandler.setParameter("refund_id", refund_id); reqHandler.setParameter("bus_type", "97"); //格式:退款总额| (账户^退款金额)[|(账户^退款金额)]* reqHandler.setParameter("bus_args", tenPayParam.Bus_Args); //----------------------------- //设置通信参数 //----------------------------- //证书必须放在用户下载不到的目录,避免证书被盗取 httpClient.setCertInfo(pfxPath, bargainor_id); string requestUrl = reqHandler.getRequestURL(); //设置请求内容 httpClient.setReqContent(requestUrl); //设置超时 httpClient.setTimeOut(10); string rescontent = ""; //后台调用 if (httpClient.call()) { //获取结果 rescontent = httpClient.getResContent(); resHandler.setKey(key); //设置结果参数 resHandler.setContent(rescontent); //判断签名及结果 if (resHandler.isTenpaySign() && resHandler.getParameter("pay_result") == "0") { //分账回退成功 bill.UpdateBackState(tenPayParam.OldOrderid, 1); //取结果参数做业务处理 // resultMsg = "OK,transaction_id=" + resHandler.getParameter("transaction_id"); string details = string.Format("财付通交易号:{0} || {1}", resHandler.getParameter("transaction_id"), tenPayParam.Bus_Args); //平台退款 int returnresult = ClientPlatformRefund(tenPayParam); switch (returnresult) { case 0: bill.CreateBillRefundFailedLog(null, tenPayParam.Orderid, "财付通平台退款通信失败:" + details); result = false; break; case 1: bill.CreateBillRefund(tenPayParam.Orderid, tenPayParam.PayNo, 4, "在线退款", "财付通退款", details); result = true; break; case 2: bill.CreateBillRefundFailedLog(null, tenPayParam.Orderid, "财付通平台退款业务错误信息或签名错误:" + details); result = false; break; default: break; } } else { result = false; string details = string.Format("财付通分账退款业务错误信息或签名错误:{0},{1}--{2}", resHandler.getParameter("pay_result"), resHandler.getParameter("pay_info"), tenPayParam.Bus_Args); bill.CreateBillRefundFailedLog(null, tenPayParam.Orderid, details); //分账退款失败 //错误时,返回结果未签名。 //如包格式错误或未确认结果的,请使用原来订单号重新发起,确认结果,避免多次操作 } } else { result = false; //后台调用通信失败 string details = string.Format("财付通分账退款通信失败:{0}{1}=={2}", httpClient.getErrInfo(), httpClient.getResponseCode(), tenPayParam.Bus_Args); bill.CreateBillRefundFailedLog(null, tenPayParam.Orderid, details); //退款失败 //有可能因为网络原因,请求已经处理,但未收到应答。 } } return(result); }