public void HandleClientRequest(ICommand command, ClientResponseHandler handler) { lock (this) { ExecuteCommand(command, handler); } }
public bool ExecuteCommand(ICommand command, ClientResponseHandler handler = null) { lock (this) { if (role == Role.Leader) { logger.LogInformation($"{this} is executing a command"); Entry e = Log.Append(currentTerm, command); if (e != null) { if (handler != null) { lock (pendingCommands) { pendingCommands.Enqueue(new PendingCommand(e, handler)); } } return(true); } if (handler != null) { handler(null); } } return(false); } }
public void ExecuteAfterCommandProcessed(Entry e, ClientResponseHandler handler) { if (e.Index <= Log.StateMachineIndex) { handler(e); } else { lock (pendingCommands) { pendingCommands.Enqueue(new PendingCommand(e, handler)); } } }
/// <summary> /// 回调结果解释 /// </summary> /// <param name="callbackContent">回调字符串</param> /// <returns></returns> public CallbackData Callback(string callbackContent) { _logger.LogInformation("callback收到的信息:" + callbackContent); var handler = new ClientResponseHandler(); handler.SetContent(callbackContent); handler.SetKey(_key); var param = handler.GetAllParameters(); handler.IsTenpaySign(); var data = new CallbackData(); data.FillBy(param); _logger.LogDebug("callback-back TransactionId:" + data.TransactionId); return(data); }
public static void Main() { IServiceCollection service = new ServiceCollection(); ConfigureServices(service); IServiceProvider serviceProvider = service.BuildServiceProvider(); IScheduleCommandManager scheduleCommandManager = new ScheduleCommandManager(); ConfigureScheduleManager(scheduleCommandManager); IClientResponseHandler clientResponseHandler = new ClientResponseHandler(); IClientCommandHandler clientCommandHandler = new ClientCommandHandler(serviceProvider); IUserInterface userInterface = new UserInterface(); IClient client = new CommandResponseProtocol.CRClient.Client(clientCommandHandler, clientResponseHandler, scheduleCommandManager, userInterface); client.Start(); }
public void Notify() { try { LogWrite("Notify"); resHandler = new ClientResponseHandler(HttpContext.Current); LogWrite("isTenpaySign"); if (this.resHandler.isTenpaySign()) { string opstate = "-1"; int status = 4; string msg = "支付失败"; decimal result = 0M; if (int.Parse(resHandler.getParameter("status").ToString()) == 0 && int.Parse(resHandler.getParameter("result_code").ToString()) == 0) { //Utils.writeFile("接口回调", resParam); //此处可以在添加相关处理业务 if (decimal.TryParse(resHandler.getParameter("total_fee").ToString(), out result)) { msg = "支付成功"; opstate = "0"; status = 2; } } OrderBankUtils.SuppNotify(SuppId , resHandler.getParameter("out_trade_no").ToString() , resHandler.getParameter("transaction_id").ToString() , status , opstate , msg , result / 100M , 0M, "success", "failure"); } } catch (Exception exception) { ExceptionHandler.HandleException(exception); } }
public void SendIssueCommand(int peerId, ICommand command, ClientResponseHandler handler) { if (rafts.TryGetValue(peerId, out var r)) { Task.Run(() => { // await Task.Delay(randomDelay()); try { r.HandleClientRequest(command, handler); } catch (Exception) { // logger.error(t.getMessage(), t); } }); } }
void Awake() { ResponseManager.instance.Clear(); _client = gameObject.AddComponent <Client>(); _client.clientSettings = Resources.Load <ClientSettingsScriptableObject>(ClientSettingsScriptableObject.location); if (_client.clientSettings == null) { instance = null; Destroy(this.gameObject); throw new Exception("ClientSettings Missing... Go to Tools/SNetworking/Client Settings to create and configure ClientSettings"); } _clientResponseHandler = new ClientResponseHandler(_client); _clientResponseHandler.Initialize(); SNetwork.Network.Initialize(); ResponseManager.instance.AddServerResponse(MessageResponse, 7); ResponseManager.instance.AddServerResponse(InstantiateGameObject, 50); DontDestroyOnLoad(this.gameObject); _client.sceneChangeCallback += OnSceneChange; }
protected override string OnNotify(System.Web.HttpContext context) { var handler = new ResponseHandler(context); handler.setKey(key); if (handler.isTenpaySign()) { ///通知id string notify_id = handler.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", 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(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"); PayHistory order = OnlinePayBusiness.Instance.GetOrder(out_trade_no, ThisCompanyType); if (order == null) { CoreHelper.EventLog.Log(string.Format("在线支付确认时找不到订单{0} 订单号{1}", ThisCompanyType, out_trade_no), true); //context.Response.Write("fail"); return("fail"); } order.SpBillno = transaction_id; decimal fee = Convert.ToDecimal(total_fee); lock (thisLock) { Confirm(order, GetType(), fee / 100); } //context.Response.Write("success"); return("success"); } } } //context.Response.Write("fail"); return("fail"); }
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) { //創建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) { TenpayUtil tenpayUtil = new TenpayUtil(); ResponseHandler responseHandler = new ResponseHandler(this.Context); responseHandler.setKey(tenpayUtil.key); if (responseHandler.isTenpaySign()) { string parameter1 = responseHandler.getParameter("notify_id"); RequestHandler requestHandler = new RequestHandler(this.Context); requestHandler.init(); requestHandler.setKey(tenpayUtil.key); requestHandler.setGateUrl("https://gw.tenpay.com/gateway/simpleverifynotifyid.xml"); requestHandler.setParameter("partner", tenpayUtil.partner); requestHandler.setParameter("notify_id", parameter1); TenpayHttpClient tenpayHttpClient = new TenpayHttpClient(); tenpayHttpClient.setTimeOut(5); tenpayHttpClient.setReqContent(requestHandler.getRequestURL()); if (tenpayHttpClient.call()) { ClientResponseHandler clientResponseHandler = new ClientResponseHandler(); clientResponseHandler.setContent(tenpayHttpClient.getResContent()); clientResponseHandler.setKey(tenpayUtil.key); if (clientResponseHandler.isTenpaySign()) { string upper = responseHandler.getParameter("out_trade_no").ToUpper(); string parameter2 = responseHandler.getParameter("transaction_id"); string parameter3 = responseHandler.getParameter("total_fee"); responseHandler.getParameter("discount"); string parameter4 = responseHandler.getParameter("trade_state"); string parameter5 = responseHandler.getParameter("trade_mode"); if ("0".Equals(clientResponseHandler.getParameter("retcode"))) { if ("1".Equals(parameter5)) { if ("0".Equals(parameter4)) { if (upper.StartsWith("R")) { Rain.BLL.user_recharge userRecharge = new Rain.BLL.user_recharge(); Rain.Model.user_recharge model = userRecharge.GetModel(upper); if (model == null) { this.Response.Write("该订单号不存在"); return; } if (model.status == 1) { this.Response.Write("success"); return; } if (model.amount != Decimal.Parse(parameter3) / new Decimal(100)) { this.Response.Write("订单金额和支付金额不相符"); return; } if (!userRecharge.Confirm(upper)) { this.Response.Write("修改订单状态失败"); return; } } else if (upper.StartsWith("B")) { Rain.BLL.orders orders = new Rain.BLL.orders(); Rain.Model.orders model = orders.GetModel(upper); if (model == null) { this.Response.Write("该订单号不存在"); return; } if (model.payment_status == 2) { this.Response.Write("success"); return; } if (model.order_amount != Decimal.Parse(parameter3) / new Decimal(100)) { this.Response.Write("订单金额和支付金额不相符"); return; } if (!orders.UpdateField(upper, "trade_no='" + parameter2 + "',status=2,payment_status=2,payment_time='" + (object)DateTime.Now + "'")) { this.Response.Write("修改订单状态失败"); return; } if (model.point < 0) { new Rain.BLL.user_point_log().Add(model.user_id, model.user_name, model.point, "换购扣除积分,订单号:" + model.order_no, false); } } this.Response.Write("success"); } else { this.Response.Write("即时到账支付失败"); } } else if ("2".Equals(parameter5)) { if ("0".Equals(parameter4)) { if (upper.StartsWith("R")) { Rain.BLL.user_recharge userRecharge = new Rain.BLL.user_recharge(); Rain.Model.user_recharge model = userRecharge.GetModel(upper); if (model == null) { this.Response.Write("该订单号不存在"); return; } if (model.status == 1) { this.Response.Write("success"); return; } if (model.amount != Decimal.Parse(parameter3) / new Decimal(100)) { this.Response.Write("订单金额和支付金额不相符"); return; } if (!userRecharge.Confirm(upper)) { this.Response.Write("修改订单状态失败"); return; } } else if (upper.StartsWith("B")) { Rain.BLL.orders orders = new Rain.BLL.orders(); Rain.Model.orders model = orders.GetModel(upper); if (model == null) { this.Response.Write("该订单号不存在"); return; } if (model.payment_status == 2) { this.Response.Write("success"); return; } if (model.order_amount != Decimal.Parse(parameter3) / new Decimal(100)) { this.Response.Write("订单金额和支付金额不相符"); return; } if (!orders.UpdateField(upper, "trade_no='" + parameter2 + "',status=2,payment_status=2,payment_time='" + (object)DateTime.Now + "'")) { this.Response.Write("修改订单状态失败"); return; } if (model.point < 0) { new Rain.BLL.user_point_log().Add(model.user_id, model.user_name, model.point, "换购扣除积分,订单号:" + model.order_no, false); } } } else if ("5".Equals(parameter4) && upper.StartsWith("B")) { Rain.BLL.orders orders = new Rain.BLL.orders(); Rain.Model.orders model = orders.GetModel(upper); if (model == null) { this.Response.Write("该订单号不存在"); return; } if (model.status > 2) { this.Response.Write("success"); return; } if (model.order_amount != Decimal.Parse(parameter3)) { this.Response.Write("订单金额和支付金额不相符"); return; } if (!orders.UpdateField(upper, "status=3,complete_time='" + (object)DateTime.Now + "'")) { this.Response.Write("修改订单状态失败"); return; } if (model.user_id > 0 && model.point > 0) { new Rain.BLL.user_point_log().Add(model.user_id, model.user_name, model.point, "购物获得积分,订单号:" + model.order_no, true); } } this.Response.Write("success"); } } else { this.Response.Write("查询验证签名失败或id验证失败"); } } else { this.Response.Write("通知ID查询签名验证失败"); } } else { this.Response.Write("后台调用通信失败"); } } else { this.Response.Write("签名验证失败"); } this.Response.End(); }
/// <summary> /// 通知调用 /// </summary> public ActionResult Notify() { System.Web.HttpContext Context = System.Web.HttpContext.Current; //创建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 trade_state = resHandler.getParameter("trade_state"); //交易模式,1即时到帐 2中介担保 string trade_mode = resHandler.getParameter("trade_mode"); #region //判断签名及结果 if ("0".Equals(queryRes.getParameter("retcode"))) { if ("1".Equals(trade_mode) && "0".Equals(trade_state)) { int oid = TypeHelper.StringToInt(queryRes.getParameter("out_trade_no")); //商户订单号 string tradeSN = queryRes.getParameter("transaction_id"); //财付通订单号 decimal tradeMoney = TypeHelper.StringToDecimal(queryRes.getParameter("total_fee")); //金额,以分为单位 DateTime tradeTime = DateTime.Now; //交易时间 OrderInfo orderInfo = Orders.GetOrderByOid(oid); if (orderInfo != null && orderInfo.PayMode == 1 && orderInfo.PaySN.Length == 0 && orderInfo.SurplusMoney > 0 && orderInfo.SurplusMoney <= tradeMoney) { Orders.PayOrder(oid, OrderState.Confirming, tradeSN, DateTime.Now); OrderActions.CreateOrderAction(new OrderActionInfo() { Oid = oid, Uid = orderInfo.Uid, RealName = "本人", AdminGid = 1, AdminGTitle = "非管理员", ActionType = (int)OrderActionType.Pay, ActionTime = tradeTime, ActionDes = "你使用财付通支付订单成功,财付通交易号为:" + tradeSN }); } return(new EmptyResult()); } else { return(Content("交易失败")); } } else { return(Content("查询验证签名失败或id验证失败")); } #endregion } else { return(Content("通知ID查询签名验证失败")); } } else { return(Content("后台调用通信失败")); } } else { return(Content("签名验证失败")); } }
protected void Page_Load(object sender, EventArgs e) { TenpayUtil xmlConfig = new TenpayUtil(); //创建ResponseHandler实例 ResponseHandler resHandler = new ResponseHandler(Context); resHandler.setKey(xmlConfig.key); //判断签名 if (resHandler.isTenpaySign()) { ///通知id string notify_id = resHandler.getParameter("notify_id"); //通过通知ID查询,确保通知来至财付通 //创建查询请求 RequestHandler queryReq = new RequestHandler(Context); queryReq.init(); queryReq.setKey(xmlConfig.key); queryReq.setGateUrl("https://gw.tenpay.com/gateway/simpleverifynotifyid.xml"); queryReq.setParameter("partner", xmlConfig.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(xmlConfig.key); //判断签名及结果 //只有签名正确,retcode为0,trade_state为0才是支付成功 if (queryRes.isTenpaySign()) { //取结果参数做业务处理 string order_no = resHandler.getParameter("out_trade_no").ToUpper(); //财付通订单号 string trade_no = resHandler.getParameter("transaction_id"); //金额,以分为单位 string total_fee = resHandler.getParameter("total_fee"); //如果有使用折扣券,discount有值,total_fee+discount=原请求的total_fee string discount = resHandler.getParameter("discount"); //支付结果 string trade_state = resHandler.getParameter("trade_state"); //交易模式,1即时到帐 2中介担保 string trade_mode = resHandler.getParameter("trade_mode"); //判断签名及结果 if ("0".Equals(queryRes.getParameter("retcode"))) { if ("1".Equals(trade_mode)) { #region 即时到账处理方法==================================== if ("0".Equals(trade_state)) { if (order_no.StartsWith("R")) //充值订单 { BLL.user_recharge bll = new BLL.user_recharge(); Model.user_recharge model = bll.GetModel(order_no); if (model == null) { Response.Write("该订单号不存在"); return; } if (model.status == 1) //已成功 { Response.Write("success"); return; } if (model.amount != (decimal.Parse(total_fee) / 100)) { Response.Write("订单金额和支付金额不相符"); return; } bool result = bll.Confirm(order_no); if (!result) { Response.Write("修改订单状态失败"); return; } } else if (order_no.StartsWith("B")) //商品订单 { BLL.orders bll = new BLL.orders(); Model.orders model = bll.GetModel(order_no); if (model == null) { Response.Write("该订单号不存在"); return; } if (model.payment_status == 2) //已付款 { Response.Write("success"); return; } if (model.order_amount != (decimal.Parse(total_fee) / 100)) { Response.Write("订单金额和支付金额不相符"); return; } bool result = bll.UpdateField(order_no, "trade_no='" + trade_no + "',status=2,payment_status=2,payment_time='" + DateTime.Now + "'"); if (!result) { Response.Write("修改订单状态失败"); return; } new CMS.API.ClsDll.buyersite().Add(model); //扣除积分 if (model.point < 0) { new BLL.user_point_log().Add(model.user_id, model.user_name, model.point, "换购扣除积分,订单号:" + model.order_no, false); } } //给财付通系统发送成功信息,财付通系统收到此结果后不再进行后续通知 Response.Write("success"); } else { Response.Write("即时到账支付失败"); } #endregion } else if ("2".Equals(trade_mode)) //担保交易 { #region 担保交易处理方法==================================== if ("0".Equals(trade_state)) //付款成功 { if (order_no.StartsWith("R")) //充值订单 { BLL.user_recharge bll = new BLL.user_recharge(); Model.user_recharge model = bll.GetModel(order_no); if (model == null) { Response.Write("该订单号不存在"); return; } if (model.status == 1) //已成功 { Response.Write("success"); return; } if (model.amount != (decimal.Parse(total_fee) / 100)) { Response.Write("订单金额和支付金额不相符"); return; } bool result = bll.Confirm(order_no); if (!result) { Response.Write("修改订单状态失败"); return; } } else if (order_no.StartsWith("B")) //商品订单 { BLL.orders bll = new BLL.orders(); Model.orders model = bll.GetModel(order_no); if (model == null) { Response.Write("该订单号不存在"); return; } if (model.payment_status == 2) //已付款 { Response.Write("success"); return; } if (model.order_amount != (decimal.Parse(total_fee) / 100)) { Response.Write("订单金额和支付金额不相符"); return; } bool result = bll.UpdateField(order_no, "trade_no='" + trade_no + "',status=2,payment_status=2,payment_time='" + DateTime.Now + "'"); if (!result) { Response.Write("修改订单状态失败"); return; } new CMS.API.ClsDll.buyersite().Add(model); //扣除积分 if (model.point < 0) { new BLL.user_point_log().Add(model.user_id, model.user_name, model.point, "换购扣除积分,订单号:" + model.order_no, false); } } } else if ("5".Equals(trade_state)) //买家收货确认,交易成功 { if (order_no.StartsWith("B")) //商品订单 { BLL.orders bll = new BLL.orders(); Model.orders model = bll.GetModel(order_no); if (model == null) { Response.Write("该订单号不存在"); return; } if (model.status > 2) //订单状态已经完成结束 { Response.Write("success"); return; } if (model.order_amount != decimal.Parse(total_fee)) { Response.Write("订单金额和支付金额不相符"); return; } bool result = bll.UpdateField(order_no, "status=3,complete_time='" + DateTime.Now + "'"); if (!result) { Response.Write("修改订单状态失败"); return; } //给会员增加积分检查升级 if (model.user_id > 0 && model.point > 0) { new BLL.user_point_log().Add(model.user_id, model.user_name, model.point, "购物获得积分,订单号:" + model.order_no, true); } } } //给财付通系统发送成功信息,财付通系统收到此结果后不再进行后续通知 Response.Write("success"); #endregion } } else { Response.Write("查询验证签名失败或id验证失败"); } } else { Response.Write("通知ID查询签名验证失败"); } } else { Response.Write("后台调用通信失败"); } } else { Response.Write("签名验证失败"); } Response.End(); }
/// <summary> /// 威富通支付接口,不存数据库,仅做支付用 /// </summary> /// <param name="Row"></param> /// <returns></returns> private string GenerateWftOrder(DataRow Row) { string CommunityId = Row["CommunityId"].ToString(); string FeesIds = Row["FeesIds"].ToString(); string txnTime = DateTime.Now.ToString("yyyyMMddHHmmss"); string CustID = Row["CustID"].ToString(); //2017-06-05添加可选参数openId //用于区分是否来自于微信H5支付 //默认为空 if (!Row.Table.Columns.Contains("openId")) { return(JSONHelper.FromString(false, "请通过微信访问!")); } string openId = Row["openId"].ToString(); //增加FeesIds重复验证 if (FeesIds == "") { return(JSONHelper.FromString(false, "未选择费用!")); } string[] FeesStr = FeesIds.Split(','); HashSet <string> h = new HashSet <string>(); for (int i = 0; i < FeesStr.Length; i++) { h.Add(FeesStr[i]); } if (h.Count != FeesStr.Length) { return(JSONHelper.FromString(false, "费用重复!")); } DataTable CommunityTable = new DbHelperSQLP(PubConstant.UnifiedContionString.ToString()).Query("SELECT * FROM Tb_Community WHERE Id='" + CommunityId.ToString() + "'").Tables[0]; if (null == CommunityTable || CommunityTable.Rows.Count <= 0) { return(JSONHelper.FromString(false, "获取数据库信息失败!")); } //连接字符串 string connStr = UnionUtil.GetConnectionString(CommunityTable.Rows[0]); double Amount = 0.00d; using (IDbConnection conn = new SqlConnection(connStr)) { Amount = conn.ExecuteScalar <double>("SELECT ISNULL(SUM(DebtsAmount),0)+ISNULL(SUM(DebtsLateAmount),0) AS Amount FROM Tb_HSPR_Fees WHERE FeesID IN (" + FeesIds + ")", null, null, null, CommandType.Text); } if (Amount <= 0) { return(JSONHelper.FromString(false, "缴费金额必须大于0!")); } //把金额转换为分 int fen = (int)Amount * 100; //商户订单号,当前10位时间戳+16位随机字符 string out_trade_no = ((DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000) + Utils.Nmrandom(); RequestHandler reqHandler = new RequestHandler(null); reqHandler.setGateUrl("https://pay.swiftpass.cn/pay/gateway"); reqHandler.setKey("9d101c97133837e13dde2d32a5054abb"); reqHandler.setParameter("out_trade_no", out_trade_no); //商户订单号 reqHandler.setParameter("body", "物管费"); //商品描述 reqHandler.setParameter("attach", CommunityId); //附加信息 reqHandler.setParameter("total_fee", "1"); //总金额 reqHandler.setParameter("mch_create_ip", "125.64.16.10"); //终端IP reqHandler.setParameter("time_start", ""); //订单生成时间 reqHandler.setParameter("time_expire", ""); //订单超时时间 reqHandler.setParameter("service", "pay.weixin.jspay"); //接口类型:pay.weixin.jspay reqHandler.setParameter("mch_id", "7551000001"); //必填项,商户号,由平台分配 reqHandler.setParameter("version", "1.0"); //接口版本号 reqHandler.setParameter("notify_url", "http://125.64.16.10:9999/TwInterface/Service/WeiXinPayCallBack/WeiXinWftPay.ashx"); //通知地址,必填项,接收平台通知的URL,需给绝对路径,255字符内;此URL要保证外网能访问 reqHandler.setParameter("nonce_str", Utils.random()); //随机字符串,必填项,不长于 32 位 reqHandler.setParameter("charset", "UTF-8"); //字符集 reqHandler.setParameter("sign_type", "MD5"); //签名方式 reqHandler.setParameter("is_raw", "1"); //原生JS值 reqHandler.setParameter("device_info", ""); //终端设备号 reqHandler.setParameter("sub_openid", ""); //测试账号不传值,此处默认给空值。正式账号必须传openid值,获取openid值指导文档地址:http://www.cnblogs.com/txw1958/p/weixin76-user-info.html reqHandler.setParameter("callback_url", ""); //前台地址 交易完成后跳转的 URL,需给绝对路径,255字 符 内 格 式如:http://wap.tenpay.com/callback.asp reqHandler.setParameter("goods_tag", ""); //商品标记 reqHandler.createSign(); //创建签名 //以上参数进行签名 string data = Utils.toXml(reqHandler.getAllParameters()); //生成XML报文 Dictionary <string, string> reqContent = new Dictionary <string, string>(); reqContent.Add("url", reqHandler.getGateUrl()); reqContent.Add("data", data); PayHttpClient pay = new PayHttpClient(); pay.setReqContent(reqContent); if (!pay.call()) { return(JSONHelper.FromString(false, pay.getErrInfo())); } ClientResponseHandler resHandler = new ClientResponseHandler(); resHandler.setContent(pay.getResContent()); resHandler.setKey("9d101c97133837e13dde2d32a5054abb"); Hashtable param = resHandler.getAllParameters(); if (!resHandler.isTenpaySign()) { return(JSONHelper.FromString(false, param["message"].ToString())); } //当返回状态与业务结果都为0时才返回,其它结果请查看接口文档 if (int.Parse(param["status"].ToString()) != 0 || int.Parse(param["result_code"].ToString()) != 0) { return(JSONHelper.FromString(false, param["err_msg"].ToString())); } return(JSONHelper.FromJsonString(true, param["pay_info"].ToString())); }
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/>"); */ } }
public void Notify(HttpContext Context) { //商户号 string partner = SuppAccount; //密钥 string key = SuppKey; //创建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()) { //取结果参数做业务处理 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)) { string opstate = "-1"; int status = 4; //即时到账 if ("0".Equals(trade_state)) { status = 2; opstate = "0"; //------------------------------ //即时到账处理业务开始 //------------------------------ //处理数据库逻辑 //注意交易单不要重复处理 //注意判断返回金额 //------------------------------ //即时到账处理业务完毕 //------------------------------ //给财付通系统发送成功信息,财付通系统收到此结果后不再进行后续通知 //Context.Response.Write("success"); } else { //Context.Response.Write("即时到账支付失败"); } decimal tranAmt = decimal.Parse(total_fee) / 100M; OrderBankUtils.SuppNotify(SuppId , out_trade_no , transaction_id , status , opstate , string.Empty , tranAmt, tranAmt , Succflag , Failflag); //viviapi.BLL.OrderBank bll = new viviapi.BLL.OrderBank(); //bll.DoBankComplete(suppId, out_trade_no, transaction_id, status, opstate, string.Empty, decimal.Parse(total_fee) / 100M, 0M, true, false); } 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(); }
public bool Check() { var str = ""; var bll = new JMP.BLL.jmp_order(); var resHandler = new ClientResponseHandler(); var pay = new PayHttpClient(); var reqHandler = new RequestHandler(null); var cfg = Utils.Load_CfgInterfaceId(Tid); //初始化数据 reqHandler.setGateUrl(cfg["req_url"].ToString()); reqHandler.setKey(cfg["key"].ToString()); reqHandler.setParameter("out_trade_no", new Random().Next(111111, 999999).ToString()); //我们的订单号 reqHandler.setParameter("body", "会员商品"); //商品描述 reqHandler.setParameter("attach", "会员"); //附加信息 reqHandler.setParameter("total_fee", "100"); //价格(已传入的为准,无就从数据库读取) reqHandler.setParameter("mch_create_ip", "127.0.0.1"); //终端IP reqHandler.setParameter("service", "pay.weixin.wappay"); reqHandler.setParameter("mch_id", cfg["mch_id"].ToString()); reqHandler.setParameter("version", cfg["version"].ToString()); reqHandler.setParameter("notify_url", "http://baidu.com"); //回掉地址 reqHandler.setParameter("callback_url", "http://baidu.com"); //同步回掉地址 reqHandler.setParameter("nonce_str", Utils.random()); reqHandler.setParameter("charset", "UTF-8"); reqHandler.setParameter("sign_type", "MD5"); reqHandler.createSign(); var datawft = Utils.toXml(reqHandler.getAllParameters()); var reqContent = new Dictionary <string, string> { { "url", reqHandler.getGateUrl() }, { "data", datawft } }; pay.setReqContent(reqContent); var success = false; if (pay.call()) { resHandler.setContent(pay.getResContent()); resHandler.setKey(cfg["key"].ToString()); var param = resHandler.getAllParameters(); if (resHandler.isTenpaySign()) { if (int.Parse(param["status"].ToString()) == 0) { try { var wxpay = param["pay_info"].ToString(); if (wxpay.Contains("http")) { success = true; } } catch { } } } } return(success); }
protected void Page_Load(object sender, EventArgs e) { //商户号 string partner = "1220201501"; //密钥 string key = "19ace89a7acd6e14ac3c66b2852f14d6"; //创建请求对象 RequestHandler reqHandler = new RequestHandler(Context); //通信对象 TenpayHttpClient httpClient = new TenpayHttpClient(); //应答对象 ClientResponseHandler resHandler = new ClientResponseHandler(); int otid = Convert.ToInt32(Request["orderid"].ToString()); Cms.BLL.C_order otBll = new Cms.BLL.C_order(); Cms.Model.C_order orderEntity = otBll.GetModel(otid); //----------------------------- //设置请求参数 //----------------------------- 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", orderEntity.trade_no); reqHandler.setParameter("out_refund_no", orderEntity.order_num); reqHandler.setParameter("total_fee", ((int)(orderEntity.price_sum * 100)).ToString());//((int)(orderEntity.price_sum * 100)).ToString() reqHandler.setParameter("refund_fee", ((int)(orderEntity.price_sum * 100)).ToString()); //reqHandler.setParameter("refund_fee", "100"); reqHandler.setParameter("op_user_id", "1220201501"); reqHandler.setParameter("op_user_passwd", MD5Util.GetMD5("dbezhifu1866", "GBK")); reqHandler.setParameter("service_version", "1.1"); string requestUrl = reqHandler.getRequestURL(); httpClient.setCertInfo("d:\\wwwroot\\anpurui\\wwwroot\\1220201501_20150203112358.pfx", "1220201501"); //设置请求内容 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"); DataTable dt = otBll.GetList("trade_no='" + transaction_id + "'").Tables[0]; if (dt != null && dt.Rows.Count > 0) { int id = Convert.ToInt32(dt.Rows[0]["id"]); Cms.Model.C_order orderModel = otBll.GetModel(id); orderModel.is_refund = 3; if (otBll.Update(orderModel)) { JscriptMsg("退款成功!", "/shop/myOrder.aspx", "Success"); } } //业务处理 //Response.Write("退款成功!" + out_trade_no + transaction_id); } else { //错误时,返回结果未签名。 //如包格式错误或未确认结果的,请使用原来订单号重新发起,确认结果,避免多次操作 //Response.Write("业务错误信息或签名错误:" + resHandler.getParameter("retcode") + "," + resHandler.getParameter("retmsg") + "<br>"); JscriptMsg("退款失败!", "/shop/myOrder.aspx", "Error"); } } else { //后台调用通信失败 //Response.Write("call err:" + httpClient.getErrInfo() + "<br>" + httpClient.getResponseCode() + "<br>"); JscriptMsg("退款失败!", "/shop/myOrder.aspx", "Error"); //有可能因为网络原因,请求已经处理,但未收到应答。 } //获取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 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/>"); }
public override bool CheckOrder(PayHistory order, out string message) { //创建请求对象 RequestHandler reqHandler = new RequestHandler(HttpContext.Current); //通信对象 TenpayHttpClient httpClient = new TenpayHttpClient(); //应答对象 ClientResponseHandler resHandler = new ClientResponseHandler(); //----------------------------- //设置请求参数 //----------------------------- reqHandler.init(); reqHandler.setKey(key); reqHandler.setGateUrl("https://gw.tenpay.com/gateway/normalorderquery.xml"); reqHandler.setParameter("partner", bargainor_id); //out_trade_no和transaction_id至少一个必填,同时存在时transaction_id优先 reqHandler.setParameter("out_trade_no", order.OrderId); //reqHandler.setParameter("transaction_id", "1900000109201103020030626316"); 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("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 trade_state = resHandler.getParameter("trade_state"); //支付成功 if (trade_state == "0") { if (order.Status != OrderStatus.已确认) { Confirm(order, GetType(), order.Amount); } message = "成功"; return(true); } } else { message = "失败"; return(false); } } else { message = "服务器返回:" + httpClient.getResponseCode(); return(false); } message = "失败"; return(false); }
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/>"); */ }
/// <summary> /// 退款接口,可重复提交得到状态 /// </summary> /// <param name="order"></param> /// <param name="message"></param> /// <returns></returns> public override bool RefundOrder(PayHistory order, out string message) { #region 退款 RequestHandler reqHandler = new RequestHandler(HttpContext.Current); //通信对象 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", bargainor_id); //out_trade_no和transaction_id至少一个必填,同时存在时transaction_id优先 //reqHandler.setParameter("out_trade_no", order.OrderId); reqHandler.setParameter("transaction_id", order.OrderId); reqHandler.setParameter("out_refund_no", order.OrderId + "C"); reqHandler.setParameter("total_fee", (order.Amount * 100).ToString()); reqHandler.setParameter("refund_fee", (order.Amount * 100).ToString()); reqHandler.setParameter("op_user_id", bargainor_id); reqHandler.setParameter("op_user_passwd", ChargeConfig.GetConfigKey(ThisCompanyType, ChargeConfig.DataType.PayPass)); string requestUrl = reqHandler.getRequestURL(); //证书和证书密码 httpClient.setCertInfo(ChargeConfig.GetConfigKey(ThisCompanyType, ChargeConfig.DataType.CertFile), bargainor_id); //设置请求内容 httpClient.setReqContent(requestUrl); //设置超时 httpClient.setTimeOut(10); string rescontent = ""; //后台调用 if (!httpClient.call()) { message = "接口调用失败"; return(false); } //获取结果 rescontent = httpClient.getResContent(); resHandler.setKey(key); //设置结果参数 resHandler.setContent(rescontent); message = resHandler.getParameter("retmsg"); //Log("退款返回结果为:" + rescontent); //判断签名及结果 if (!resHandler.isTenpaySign()) { message = "返回签名验证错误"; return(false); } if (resHandler.getParameter("retcode") != "0") { return(false); } //商户订单号 string out_trade_no = resHandler.getParameter("out_trade_no"); //财富通订单号 string transaction_id = resHandler.getParameter("transaction_id"); // 退款状态: //4,10:退款成功。 //3,5,6:退款失败。 //8,9,11:退款处理中。 //1,2:未确定,需要商户原退款单号重新发起。 //7:转入代发,退款到银行发现用户的卡作废或者冻结了,导致原路退款银行卡失败,资金回流到商户的现金帐号,需要商户人工干预,通过线下或者财富通转账的方式进行退款 string refund_status = resHandler.getParameter("refund_status"); if (refund_status == "4" || refund_status == "10") { string recv_user_id = resHandler.getParameter("recv_user_id"); string reccv_user_name = resHandler.getParameter("reccv_user_name"); //Log("退款接收人信息为:" + recv_user_id + " " + reccv_user_name); BaseRefundOrder(order); return(true); } if (refund_status == "8" || refund_status == "9" || refund_status == "11") { //todo 自动重复查询 message = "退款处理中"; return(true); } return(false); #endregion }
/// <summary> /// 威富通支付宝wap支付 /// </summary> /// <param name="tid">应用类型id</param> /// <param name="code">订单号</param> /// <param name="goodsname">商品名称</param> /// <param name="price">支付金额(单位:元)</param> /// <param name="orderid">订单id</param> /// <param name="appid">应用id</param> /// <returns></returns> private static InnerResponse WftZfbH5(int apptype, string code, string goodsname, decimal price, int orderid, string ip, int appid) { // string str = ""; InnerResponse inn = new InnerResponse(); Dictionary <string, string> cfg = new Dictionary <string, string>(); try { ClientResponseHandler resHandler = new ClientResponseHandler(); PayHttpClient pay = new PayHttpClient(); RequestHandler reqHandler = new RequestHandler(null); cfg = Utils.loadCfgZfb(apptype, appid); if (cfg == null || string.IsNullOrEmpty(cfg["mch_id"]) || string.IsNullOrEmpty(cfg["pay_id"]) || string.IsNullOrEmpty(cfg["key"])) { inn = inn.ToResponse(ErrorCode.Code106); return(inn); } if (!UpdateOrde.OrdeUpdateInfo(orderid, int.Parse(cfg["pay_id"].ToString()))) { inn = inn.ToResponse(ErrorCode.Code101); return(inn); } if (!JudgeMoney.JudgeMinimum(price, decimal.Parse(cfg["minmun"].ToString()))) { inn = inn.ToResponse(ErrorCode.Code8990); return(inn); } if (!JudgeMoney.JudgeMaximum(price, decimal.Parse(cfg["maximum"].ToString()))) { inn = inn.ToResponse(ErrorCode.Code8989); return(inn); } //初始化数据 reqHandler.setGateUrl(cfg["req_url"].ToString()); reqHandler.setKey(cfg["key"].ToString()); reqHandler.setParameter("out_trade_no", code); //我们的订单号 reqHandler.setParameter("body", goodsname); //商品描述 reqHandler.setParameter("total_fee", (Convert.ToInt32(price * 100)).ToString()); //价格(已传入的为准,无就从数据库读取) reqHandler.setParameter("mch_create_ip", ip); //终端IP reqHandler.setParameter("service", "pay.alipay.native"); //支付类型 reqHandler.setParameter("mch_id", cfg["mch_id"].ToString()); reqHandler.setParameter("version", cfg["version"].ToString()); reqHandler.setParameter("notify_url", ConfigurationManager.AppSettings["WftTokenUrl"].ToString().Replace("{0}", cfg["pay_id"].ToString()));//回掉地址 reqHandler.setParameter("nonce_str", Utils.random()); reqHandler.setParameter("charset", "UTF-8"); reqHandler.setParameter("sign_type", "MD5"); reqHandler.setParameter("time_start", DateTime.Now.ToString("yyyyMMddHHmmss")); //订单生成时间 reqHandler.setParameter("time_expire", DateTime.Now.AddMinutes(30).ToString("yyyyMMddHHmmss")); //订单超时时间 reqHandler.createSign(); string datawft = Utils.toXml(reqHandler.getAllParameters()); Dictionary <string, string> reqContent = new Dictionary <string, string>(); reqContent.Add("url", reqHandler.getGateUrl()); reqContent.Add("data", datawft); pay.setReqContent(reqContent); if (pay.call()) { resHandler.setContent(pay.getResContent()); resHandler.setKey(cfg["key"].ToString()); Hashtable param = resHandler.getAllParameters(); if (resHandler.isTenpaySign()) { if (int.Parse(param["status"].ToString()) == 0 && int.Parse(param["result_code"].ToString()) == 0) { inn = inn.ToResponse(ErrorCode.Code100); inn.ExtraData = param["code_url"];//http提交方式; inn.IsJump = true; } else { string wftzfsbxin = "威富通支付失败信息,错误代码:" + param["err_code"] + ",错误信息:" + param["err_msg"] + ",商户号:" + cfg["mch_id"].ToString(); PayApiDetailErrorLogger.UpstreamPaymentErrorLog("报错信息:" + wftzfsbxin, summary: "威富通支付宝扫码接口错误信息", channelId: int.Parse(cfg["pay_id"].ToString())); inn = inn.ToResponse(ErrorCode.Code104); } } else { string mesage = "威富通支付失败信息,错误代码:" + resHandler.getContent() + ",错误信息:" + resHandler.getDebugInfo() + ",商户号:" + cfg["mch_id"].ToString(); PayApiDetailErrorLogger.UpstreamPaymentErrorLog("报错信息:" + mesage, summary: "威富通支付宝扫码接口错误信息", channelId: int.Parse(cfg["pay_id"].ToString())); inn = inn.ToResponse(ErrorCode.Code104); } } else { PayApiDetailErrorLogger.UpstreamPaymentErrorLog("报错信息:第一步验证错误", summary: "威富通支付宝接口错误信息", channelId: int.Parse(cfg["pay_id"].ToString())); inn = inn.ToResponse(ErrorCode.Code104); } } catch (Exception E) { PayApiDetailErrorLogger.UpstreamPaymentErrorLog("报错信息:" + E.ToString(), summary: "威富通支付宝wap接口错误信息", channelId: int.Parse(cfg["pay_id"].ToString())); inn = inn.ToResponse(ErrorCode.Code104); } return(inn); }
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) { //创建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 Refund() { //创建请求对象 RefundRequestHandler reqHandler = new RefundRequestHandler(null); //通信对象 TenPayHttpClient httpClient = new TenPayHttpClient(); //应答对象 ClientResponseHandler resHandler = new ClientResponseHandler(); //----------------------------- //设置请求参数 //----------------------------- reqHandler.Init(); reqHandler.SetKey(TenPayInfo.Key); reqHandler.SetParameter("partner", TenPayInfo.PartnerId); //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", EncryptHelper.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(TenPayInfo.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) { //获取访问的商户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(); }
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/>"); */ }