/// <summary> /// 执行同步退款 /// </summary> /// <param name="orderInfo">退款订单</param> /// <param name="resultInfo">退款结果记录</param> /// <returns></returns> public override ExecuteResult <RefundNotifyInfo> ExecuteSyncRefund(RefundOrderInfo orderInfo, RefundResultInfo resultInfo) { var result = new ExecuteResult <RefundNotifyInfo>(); try { resultInfo.OrderId = orderInfo.OrderId; resultInfo.RefundOrderId = orderInfo.RefundOrderId; resultInfo.RefundAmt = Convert.ToDecimal(orderInfo.RefundAmt); //获取退款金额 int refundAmt = (int)(resultInfo.RefundAmt * 100);//通联退款金额的单位为“分”,所以要乘以100 var refundData = new AllinpayData(AllinpayDataType.RefundRequest); //商户号 refundData.SetValue("merchantId", AppConfig.Global.AllinpayMerchantId); //商户订单号 refundData.SetValue("orderNo", orderInfo.OrderId); //退款金额 refundData.SetValue("refundAmount", refundAmt.ToString()); //商户订单提交时间 refundData.SetValue("orderDatetime", orderInfo.OrderTime); //签名字符串 refundData.SetValue("signMsg", AllinpayCore.RefundSign(refundData)); var executeResult = AllinpayManager.RefundRequest(refundData); if (executeResult.Status != ResultStatus.Success) { resultInfo.ExecuteResult = (int)ResultStatus.Failure; resultInfo.ResultDesc = "通联退款请求失败:" + executeResult.Message; RefundResultDAL.Update(resultInfo); result.Status = ResultStatus.Error; result.Message = resultInfo.ResultDesc; return(result); } //退款成功,解析返回参数 resultInfo.RefundNo = ""; resultInfo.ExecuteResult = (int)ResultStatus.Success; result.Data = this.GetRefundNotifyInfo(resultInfo, orderInfo.TradeNo); result.Status = ResultStatus.Success; } catch (Exception ex) { resultInfo.ExecuteResult = (int)ResultStatus.Error; resultInfo.ResultDesc = ex.Message; RefundResultDAL.Update(resultInfo); result.Status = ResultStatus.Error; result.Message = ex.Message; } return(result); }
/// <summary> /// 在线支付 /// </summary> /// <param name="appId">业务系统ID</param> /// <param name="sign">签名</param> /// <param name="data">数据报文</param> /// <returns></returns> public ActionResult OnlinePay(string appId, string sign, string data) { try { var onlinePay = Builder.BuildOnlinePay(); //校验支付模式 if (onlinePay.CheckModeIsSimulate()) { return(RedirectToActionPermanent("OnlinePay", "Simulate", new { payType = (int)this._payType, appId = appId, sign = sign, data = data })); } //保存请求报文 var requestInfo = onlinePay.SaveRequest(appId, data, this._payType); //校验签名 var checkResult = onlinePay.CheckSign(appId, sign, data, requestInfo); if (checkResult.Status != ResultStatus.Success) { ViewBag.ErrorMsg = checkResult.Message; return(View()); } //校验支付环境 if (RequestHelper.IsWapRequest()) { checkResult = onlinePay.CheckBrowserType(AppEnum.BrowserType.Others, requestInfo); if (checkResult.Status != ResultStatus.Success) { ViewBag.ErrorMsg = checkResult.Message; return(View()); } } //解析支付请求 checkResult = onlinePay.ResolveRequest(data, requestInfo); if (checkResult.Status != ResultStatus.Success) { ViewBag.ErrorMsg = checkResult.Message; return(View()); } //校验支付参数 var checkResult2 = onlinePay.CheckParamaters(data, this._payType, requestInfo); if (checkResult2.Status != ResultStatus.Success) { ViewBag.ErrorMsg = checkResult2.Message; return(View()); } PayOrderInfo orderInfo = checkResult2.Data; //组装支付请求表单数据 if (!RequestHelper.IsWapRequest()) { ViewBag.Form = AllinpayManager.BuildRequestForm(orderInfo);//PC端访问 } else { ViewBag.Form = AllinpayManager.BuildWapRequestForm(orderInfo);//移动端访问 } //支付请求执行成功 onlinePay.ExecuteSuccess(requestInfo); } catch (Exception ex) { ViewBag.ErrorMsg = "系统执行时发生异常:" + ex.Message; string log = string.Format(@"支付发生异常!{0}异常描述:{1}{0}异常堆栈:{2}{0}请求参数:appId={3} sign={4} data={5}", Environment.NewLine, ex.Message, ex.StackTrace, appId, sign, data); LogWriter.WriteLog(log, AppConfig.Global.AllinpayLogFolder, ExceptionHelper.ExceptionLevel.Exception); } return(View()); }