protected RefundResult CheckRefundStateInLoop(string tradeId, string refundNo) { DateTime startTime = DateTime.Now; RefundResult result = null; while (true) { Thread.Sleep(1000); if ((DateTime.Now - startTime).TotalSeconds > 120) { throw new Exception("访问联拓服务器超时"); } try { result = this.CheckRefundState(tradeId, refundNo); if (result != null) { return(result); } } catch (Exception ex) { using (Log log = new Log("CheckRefundStateInLoop error")) { log.Log(this.GetType().FullName); log.Log(ex.ToString()); } } } }
public RefundResult RefundCreditCard(String id) { Stripe StripeGateway = new Stripe(); RefundResult refundresult = StripeGateway.DoRefund(id); return(refundresult); }
/// <summary> /// Example for performing simple refund request. /// Payment has to be in captured state in order to refund be successful. /// </summary> public void SimpleRefund() { //Reserving and capturing payment in order to refund method example could be successful CaptureResult captureResult = ReserveAndCapture(Amount.Get(1200.00, Currency.EUR), AuthType.payment); //Transaction ID is returned from the gateway when payment request was successful string transactionId = captureResult.Payment.TransactionId; //initialize refund request class, this class is used for forwarding all the data needed for refund request //for simple refund requests transaction ID is mandatory field RefundRequest refundRequest = new RefundRequest { PaymentId = transactionId }; //call refund method RefundResult refundResult = _api.Refund(refundRequest); //Result property contains information if the request was successful or not if (refundResult.Result == Result.Success) { //refund was successful Transaction transaction = refundResult.Payment; } else { //refund unsuccessful //error messages contain information about what went wrong string errorMerchantMessage = refundResult.ResultMerchantMessage; string errorMessage = refundResult.ResultMessage; } }
/// <summary> /// Example for performing simple partial refund request. /// Payment has to be in captured state in order to refund be successful. /// Amount sent to be partialy refundend has to be less than total amount of the payment /// </summary> public void SimplePartialRefund() { //Reserving and capturing payment in order to refund method example could be successful CaptureResult captureResult = ReserveAndCapture(Amount.Get(1200.00, Currency.EUR), AuthType.payment); //Transaction ID is returned from the gateway when payment request was successful string transactionId = captureResult.Payment.TransactionId; //initialize refund request class //for simple partial refund amount property should be set with amount less than total amount RefundRequest refundRequest = new RefundRequest { PaymentId = transactionId, Amount = Amount.Get(450.00, Currency.EUR) }; //call refund method RefundResult refundResult = _api.Refund(refundRequest); //Result property contains information if the request was successful or not if (refundResult.Result == Result.Success) { //refund was successful Transaction transaction = refundResult.Payment; } else { //refund unsuccessful //error messages contain information about what went wrong string errorMerchantMessage = refundResult.ResultMerchantMessage; string errorMessage = refundResult.ResultMessage; } }
public RefundResult Refund(RefundEntity refundEntity) { RefundResult result = new RefundResult(); result.IsSync = true; NetPayInfo netpayInfo = ObjectFactory <NetPayProcessor> .Instance.GetValidBySOSysNo(refundEntity.SOSysNo); string partner = AppSettingManager.GetSetting("Invoice", "IPSPartner"); string IPSSecurityKey = AppSettingManager.GetSetting("Invoice", "IPSSecurityKey"); string sign = Sign(string.Format("{0}{1}{2}{3}{4}", partner, refundEntity.SOSysNo.ToString(), refundEntity.OrderDate.ToString("yyyyMMdd"), refundEntity.RefundAmt.ToString("f2"), IPSSecurityKey)); RefundMsg msg = new IPSPay.ServiceSoapClient().Refund(partner, sign, refundEntity.OrderDate.ToString("yyyyMMdd"), refundEntity.SOSysNo.ToString(), (double)refundEntity.RefundAmt, ""); if (msg.ErrCode == "0000") { if (msg.Sign == Sign(string.Format("{0}{1}{2}{3}{4}{5}{6}", partner, msg.TradeBillNo, msg.TradeTime, msg.RealRefundAmount.ToString("f2"), msg.CanRefundAmount.ToString("f2"), msg.RefundBillNo, IPSSecurityKey))) { result.Result = true; } else { result.Result = false; result.Message = "验签失败"; } } else { result.Result = false; result.Message = GetMessage(msg.ErrCode); //result.Message += refundEntity.SOSysNo.ToString() + " " + refundEntity.OrderDate.ToString("YYYYMMDD"); } return(result); }
private void applyRefund() { try { if (GlobalMessageBox.Show("是否确认操作?", "确认", MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes) { return; } if (GlobalUtil.EngineUnconnectioned(this)) { return; } AgreeRefundPara para = new AgreeRefundPara() { EmRefundOrderID = Order.ID, OperateID = CommonGlobalCache.CurrentUserID }; RefundResult result = GlobalCache.EMallServerProxy.AgreeRefund(para); switch (result) { case RefundResult.Success: GlobalMessageBox.Show("已同意退款!"); //this.baseButtonOutbound.Visible = false; this.baseButtonRefused.Visible = false; Order.RefundState = 2; // updateBaseButtonApplyRefund(); //baseButtonApplyRefund.Visible = false; this.RefreshPageAction?.Invoke(this.CurrentTabPage, this.SourceCtrlType); break; case RefundResult.StateIsError: GlobalMessageBox.Show("退款申请状态不符合要求!"); break; case RefundResult.IsRefund: GlobalMessageBox.Show("已经退过货!"); break; case RefundResult.MemberIsNotExist: GlobalMessageBox.Show("会员不存在!"); break; case RefundResult.Error: GlobalMessageBox.Show("内部错误!"); break; default: break; } } catch (Exception ex) { GlobalUtil.ShowError(ex); } finally { GlobalUtil.UnLockPage(this); } }
/// <summary> /// 退款结果回调 /// </summary> /// <param name="result"></param> public static void OrderRefundResult(RefundResult result) { try { Guid orderId; Guid.TryParse(result.orderId, out orderId); LogHelper.Debug("进入 YXOrderHelper.OrderRefundResult,Input:" + JsonConvert.SerializeObject(result)); var orderRefund = OrderRefundAfterSales.ObjectSet().Where(_ => _.ApplyId == result.applyId).FirstOrDefault(); if (orderRefund == null) { LogHelper.Error("YXOrderHelper.OrderRefundResult 失败,未找到退款记录,Input:" + JsonConvert.SerializeObject(result)); } var orderItem = OrderItem.FindByID(orderRefund.OrderItemId.Value); string skuId; if (orderItem.CommodityStockId == null || orderItem.CommodityStockId.Value == Guid.Empty || orderItem.CommodityStockId == orderItem.CommodityId) { var commodity = Commodity.FindByID(orderItem.CommodityId); skuId = commodity.JDCode; } else { var comStock = CommodityStock.FindByID(orderItem.CommodityStockId.Value); skuId = comStock.JDCode; } var skuResult = result.refundSkuList.Where(_ => _.skuId == skuId).FirstOrDefault(); var skuOperateResult = skuResult.operateSkus.Where(_ => _.skuId == skuId).FirstOrDefault(); if (skuOperateResult.status == OrderRefundApplySkuOperateStatusEnum.审核通过) { var refundResult = OrderHelper.ApproveOrderRefundAfterSales(orderRefund.OrderId, orderRefund.OrderItemId ?? Guid.Empty); if (refundResult.ResultCode != 0) { // 失败 LogHelper.Error("YXOrderHelper.OrderRefundResult 失败," + refundResult.Message + ",Input:" + JsonConvert.SerializeObject(result)); } } else if (skuOperateResult.status == OrderRefundApplySkuOperateStatusEnum.已拒绝) { var refundResult = OrderHelper.RejectOrderRefundAfterSales(orderId, orderRefund.OrderItemId ?? Guid.Empty, skuOperateResult.reason); if (refundResult.ResultCode != 0) { // 失败 LogHelper.Error("YXOrderHelper.RejectOrderRefund 失败," + refundResult.Message + ",Input:" + JsonConvert.SerializeObject(result)); } } else { LogHelper.Error("YXOrderHelper.RejectOrderRefund -> OrderId: " + orderId + ", ApplyId: " + result.applyId + ", 忽略的状态:" + skuOperateResult.status.ToString()); } } catch (Exception ex) { LogHelper.Error("YXOrderHelper.OrderRefundResult 异常,Input:" + JsonConvert.SerializeObject(result), ex); } }
static string BuildMessage(RefundErrorResponse errors) { RefundResult refund = errors?.RefundResult; if (refund != null) { return("declined refund '" + refund.Id + "' with status '" + refund.Status + "'"); } return("the Ingenico ePayments platform returned a declined refund response"); }
static string BuildMessage(RefundErrorResponse errors) { RefundResult refund = errors != null ? errors.RefundResult : null; if (refund != null) { return("declined refund '" + refund.Id + "' with status '" + refund.Status + "'"); } return("the GlobalCollect platform returned a declined refund response"); }
private void baseButton4_Click(object sender, EventArgs e) { //确认退款 try { if (GlobalUtil.EngineUnconnectioned(this)) { return; } ConfirmRefundPara para = new ConfirmRefundPara() { EmRefundOrderID = Order.EmRefundOrderID, OperateID = CommonGlobalCache.CurrentUserID, Remarks = string.Empty }; RefundResult result = GlobalCache.EMallServerProxy.ConfirmRefund(para); switch (result) { case RefundResult.Success: GlobalMessageBox.Show("已确认退款!"); Display(EmRetailOrder.GetRefundState(RefundStateEnum.Refunded)); this.DialogResult = DialogResult.OK; break; case RefundResult.StateIsError: GlobalMessageBox.Show("退款申请状态不符合要求!"); break; case RefundResult.IsRefund: GlobalMessageBox.Show("已经退过货!"); break; case RefundResult.MemberIsNotExist: GlobalMessageBox.Show("会员不存在!"); break; case RefundResult.Error: GlobalMessageBox.Show("内部错误!"); break; default: break; } } catch (Exception ee) { GlobalUtil.ShowError(ee); } finally { GlobalUtil.UnLockPage(this); } }
/// <summary> /// 退款 /// 保证流水号唯一退款前缀添加R /// </summary> /// <param name="entity">退款实体信息</param> /// <returns>退款结果</returns> public RefundResult Refund(RefundEntity entity) { string refundUrl = AppSettingManager.GetSetting("Invoice", "TenPayRefundUrl"); Dictionary <string, string> reqParams = new Dictionary <string, string>(); reqParams["input_charset"] = "UTF-8"; reqParams["sign_key_index"] = "1"; reqParams["service_version"] = "1.1"; reqParams["partner"] = AppSettingManager.GetSetting("Invoice", "TenPayParnter"); reqParams["out_trade_no"] = entity.SOSysNo.ToString(); reqParams["out_refund_no"] = entity.RefundSysNo.ToString(); reqParams["total_fee"] = (entity.SOAmt * 100).ToString(); reqParams["refund_fee"] = (entity.RefundAmt * 100).ToString(); reqParams["op_user_id"] = AppSettingManager.GetSetting("Invoice", "TenPayParnter"); reqParams["op_user_passwd"] = GetMD5(AppSettingManager.GetSetting("Invoice", "TenPayParnterPwd")); reqParams["sign_type"] = "MD5"; //reqParams["notify_url"] = GetMD5(AppSettingManager.GetSetting("Invoice", "TenPayRefundNotifyUrl")); string reqData = ""; string[] allKeys = reqParams.Keys.ToArray(); Array.Sort(allKeys); foreach (var item in allKeys) { reqData += string.Format("{0}={1}&", item, reqParams[item]); } string sign = GetMD5(reqData + string.Format("key={0}", AppSettingManager.GetSetting("Invoice", "TenPaySecretKey"))); reqData += string.Format("sign={0}", sign); var resultXml = HttpRequestReturnXml(string.Format("{0}?{1}", refundUrl, reqData), "GET", ""); var result = new RefundResult(); var code = resultXml.SelectSingleNode("root/retcode").InnerText;//请求结果 if (code == "0") { result.Result = true; var soSysNo = entity.SOSysNo.ToString(); //商户订单号 result.ExternalKey = resultXml.SelectSingleNode("root/transaction_id").InnerText; //退款流水,支付宝国际无 var refundAmout = entity.RefundAmt.ToString("F2"); //退款总金额 } else { result.Message = resultXml.SelectSingleNode("root/retmsg").InnerText;//拒绝原因 } //记录日志 string resultNote = string.Format("用户[{0}]对订单号:{1} 调用了退款接口.调用结果;{2} 调用返回信息:{3},{4} PostUrl:{5} ", ServiceContext.Current.UserSysNo, entity.SOSysNo, code, result.Message, resultXml.ToXmlString(), refundUrl); ExternalDomainBroker.CreateOperationLog(resultNote, BizLogType.RMA_Refund_Refund, entity.RefundSysNo, entity.CompanyCode); return(result); }
public sealed override bool AsyncCallback(Controller context, out PaymentResult result) { PayResult presult = new PayResult(); SortedDictionary <string, string> sPara = GetRequest(context.Request.Form); if (sPara.Count > 0) { bool refund = "batch_refund_notify".Equals(context.Request.Form["notify_type"]); string id = refund ? context.Request.Form["batch_no"] : context.Request.Form["out_trade_no"]; presult.NotifyId = context.Request.Form["notify_id"]; if (Verify(sPara, presult.NotifyId, context.Request.Form["sign"], id)) { if (refund) { string details = context.Request.Form["result_details"]; RefundResult rresult = FormatResult(details); rresult.NotifyId = presult.NotifyId; rresult.BatchNo = id; rresult.SuccessNum = int.Parse(context.Request.Form["success_num"]); rresult.Message = details; result = rresult; return(true); } else { presult.TradeNo = id; presult.PayTradeNo = context.Request.Form["trade_no"]; presult.Status = context.Request.Form["trade_status"]; presult.TotalFee = Money.Parse(context.Request.Form["total_fee"]); if ("TRADE_FINISHED".Equals(presult.Status) || "TRADE_SUCCESS".Equals(presult.Status)) { presult.Message = "验证成功"; result = presult; return(true); } else { presult.Message = string.Concat("trade_status=", presult.Status); } } } else { presult.Message = "验证失败"; } } else { presult.Message = "无返回参数"; } result = presult; return(false); }
public RefundResult DoRefund(String Id) { // StripeConfiguration.SetApiKey("sk_test_tZluxZhcmbz0AfuvoYm60ic9"); StripeConfiguration.SetApiKey("sk_live_J8Hzr3keqlfOtLn5zYAJp62S"); var chargeService = new StripeChargeService(); StripeCharge striprefund = chargeService.Refund(Id); RefundResult refundresult = new RefundResult(); refundresult.Id = striprefund.Id; return(refundresult); }
/// <summary> /// Example for performing complex refund request. /// Payment has to be in captured state in order to refund be successful. /// In complex refund request orderlines are sent to the gateway /// </summary> public void ComplexRefund() { //Reserving and capturing payment in order to refund method example could be successful CaptureResult captureResult = ReserveAndCapture(Amount.Get(1200.00, Currency.EUR), AuthType.payment); //Transaction ID is returned from the gateway when payment request was successful string transactionId = captureResult.Payment.TransactionId; //inizialize orderlines List <PaymentOrderLine> orderLines = new List <PaymentOrderLine> { new PaymentOrderLine() { Description = "The Item Desc", ItemId = "itemId1", Quantity = 10, TaxPercent = 0, UnitCode = "unitCode", UnitPrice = 120, Discount = 0.00, GoodsType = GoodsType.Item, ProductUrl = "product/path/product.html", } }; //initialize refund request class //for simple partial refund amount property should be set with amount less than total amount RefundRequest refundRequest = new RefundRequest { PaymentId = transactionId, Amount = Amount.Get(1200, Currency.EUR), OrderLines = orderLines }; //call refund method RefundResult refundResult = _api.Refund(refundRequest); //Result property contains information if the request was successful or not if (refundResult.Result == Result.Success) { //refund was successful Transaction transaction = refundResult.Payment; } else { //refund unsuccessful //error messages contain information about what went wrong string errorMerchantMessage = refundResult.ResultMerchantMessage; string errorMessage = refundResult.ResultMessage; } }
/// <summary> /// 退款 /// 保证流水号唯一退款前缀添加R /// </summary> /// <param name="entity">退款实体信息</param> /// <returns>退款结果</returns> public RefundResult Refund(RefundEntity entity) { string refundUrl = AppSettingManager.GetSetting("Invoice", "RefundUrl"); string bgUrl = AppSettingManager.GetSetting("Invoice", "BGURL"); VendorCustomsInfo customsInfo = ObjectFactory <ISOBizInteract> .Instance.LoadVendorCustomsInfo(entity.SOSysNo); Dictionary <string, string> reqParams = new Dictionary <string, string>(); reqParams["SRC_NCODE"] = customsInfo.CBTSRC_NCode; reqParams["BILL_NO"] = entity.SOSysNo.ToString(); reqParams["REFUND_AMOUNT"] = entity.RefundAmt.ToString("F2"); reqParams["CARGO_AMOUNT"] = entity.ProductAmount.GetValueOrDefault().ToString("F2"); reqParams["TRANSPORT_AMOUNT"] = entity.ShippingFeeAmount.GetValueOrDefault().ToString("F2"); reqParams["TAX_AMOUNT"] = entity.TaxFeeAmount.GetValueOrDefault().ToString("F2"); reqParams["RDO_TIME"] = string.Empty; reqParams["BGURL"] = bgUrl; StringBuilder reqXml = new StringBuilder(); reqXml.Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?><EasipayB2CRequest><ReqData>"); foreach (KeyValuePair <string, string> kvp in reqParams) { reqXml.AppendFormat("<{0}><![CDATA[{1}]]></{0}>", kvp.Key, kvp.Value); } reqXml.Append("</ReqData></EasipayB2CRequest>"); var resultXml = HttpPostRequestReturnXml(refundUrl, BuildPostReqData(reqXml.ToString(), customsInfo)); var result = new RefundResult(); var code = resultXml.SelectSingleNode("EasipayB2CResponse/ResData/RTN_CODE").InnerText; //请求结果 result.Message = resultXml.SelectSingleNode("EasipayB2CResponse/ResData/RTN_INFO").InnerText; //拒绝原因 if (code == "000000") { result.Result = true; var soSysNo = resultXml.SelectSingleNode("EasipayB2CResponse/ResData/BILL_NO").InnerText; //商户订单号 result.ExternalKey = string.Format("R" + resultXml.SelectSingleNode("/EasipayB2CResponse/ResData/REFTRX_SERNO").InnerText); //退款流水 var refundAmout = resultXml.SelectSingleNode("EasipayB2CResponse/ResData/REFUND_AMOUNT").InnerText; //退款总金额 } //记录日志 string resultNote = string.Format("用户[{0}]对订单号:{1} 调用了退款接口.调用结果;{2} 调用返回信息:{3},{4} PostUrl:{5} ", ServiceContext.Current.UserSysNo, entity.SOSysNo, code, result.Message, resultXml.ToXmlString(), refundUrl); ExternalDomainBroker.CreateOperationLog(resultNote, BizLogType.RMA_Refund_Refund, entity.RefundSysNo, entity.CompanyCode); return(result); }
private void Agree(AgreeRefundPara para) { try { if (GlobalUtil.EngineUnconnectioned(this)) { return; } RefundResult result = GlobalCache.EMallServerProxy.AgreeRefund(para); switch (result) { case RefundResult.Success: GlobalMessageBox.Show("已同意退款!"); Display(EmRetailOrder.GetRefundState(RefundStateEnum.Refunding)); break; case RefundResult.StateIsError: GlobalMessageBox.Show("退款申请状态不符合要求!"); break; case RefundResult.IsRefund: GlobalMessageBox.Show("已经退过货!"); break; case RefundResult.MemberIsNotExist: GlobalMessageBox.Show("会员不存在!"); break; case RefundResult.Error: GlobalMessageBox.Show("内部错误!"); break; default: break; } } catch (Exception ee) { GlobalUtil.ShowError(ee); } finally { GlobalUtil.UnLockPage(this); } }
/// <summary> /// 退款 /// 保证流水号唯一退款前缀添加R /// </summary> /// <param name="entity">退款实体信息</param> /// <returns>退款结果</returns> public RefundResult Refund(RefundEntity entity) { string refundUrl = AppSettingManager.GetSetting("Invoice", "RefundUrl"); string bgUrl = AppSettingManager.GetSetting("Invoice", "BGURL"); Dictionary <string, string> reqParams = new Dictionary <string, string>(); reqParams["SRC_NCODE"] = AppSettingManager.GetSetting("Invoice", "SRC_NCODE"); reqParams["BILL_NO"] = entity.SOSysNo.ToString(); reqParams["REFUND_AMOUNT"] = entity.RefundAmt.ToString("F2"); reqParams["CARGO_AMOUNT"] = entity.ProductAmount.GetValueOrDefault().ToString("F2"); reqParams["TRANSPORT_AMOUNT"] = entity.ShippingFeeAmount.GetValueOrDefault().ToString("F2"); reqParams["TAX_AMOUNT"] = entity.TaxFeeAmount.GetValueOrDefault().ToString("F2"); reqParams["RDO_TIME"] = string.Empty; reqParams["BGURL"] = bgUrl; StringBuilder reqXml = new StringBuilder(); reqXml.Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?><EasipayB2CRequest><ReqData>"); foreach (KeyValuePair <string, string> kvp in reqParams) { reqXml.AppendFormat("<{0}><![CDATA[{1}]]></{0}>", kvp.Key, kvp.Value); } reqXml.Append("</ReqData></EasipayB2CRequest>"); var resultXml = HttpPostRequestReturnXml(refundUrl, BuildPostReqData(reqXml.ToString())); var result = new RefundResult(); var code = resultXml.SelectSingleNode("EasipayB2CResponse/ResData/RTN_CODE").InnerText; //请求结果 result.Message = resultXml.SelectSingleNode("EasipayB2CResponse/ResData/RTN_INFO").InnerText; //拒绝原因 if (code == "000000") { result.Result = true; var soSysNo = resultXml.SelectSingleNode("EasipayB2CResponse/ResData/BILL_NO").InnerText; //商户订单号 result.ExternalKey = string.Format("R" + resultXml.SelectSingleNode("/EasipayB2CResponse/ResData/REFTRX_SERNO").InnerText); //退款流水 var refundAmout = resultXml.SelectSingleNode("EasipayB2CResponse/ResData/REFUND_AMOUNT").InnerText; //退款总金额 } //记录日志 string resultNote = string.Format("用户[{0}]对订单号:{1} 调用了退款接口.调用结果;{2} 调用返回信息:{3},{4} PostUrl:{5} ", entity.UserSysNo, entity.SOSysNo, code, result.Message, resultXml.ToXmlString(), refundUrl); ECommerce.Utility.Logger.WriteLog(resultNote, "EasiPayUtils.Refund"); return(result); }
#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释 public RefundResult Refund(WeChatRefundParamter paramter) #pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释 { string nonceStr = TenPayV3Util.GetNoncestr(); TenPayV3RefundRequestData tenPayV3RefundRequestData = new TenPayV3RefundRequestData(Options.WeChatBaseOptions.AppId, Options.WeChatBaseOptions.MchId, Options.WeChatBaseOptions.Key, paramter.DeviceInfo, nonceStr, paramter.TransactionId, paramter.OutTradeNo, paramter.OutRefundNo, paramter.TotalFee, paramter.RefundFee, Options.WeChatBaseOptions.MchId, paramter.RefundAccount, paramter.RefundDescription, GetNotifyUrl(Options.WeChatBaseOptions.RefundNotifyUrl, WeChatNotifyType.Refund), paramter.RefundFeeType); RefundResult refundResult = TenPayV3.Refund(Options.WeChatDevOptions.ServiceProvider, tenPayV3RefundRequestData, paramter.TimeOut); //, //$"{AppDomain.CurrentDomain.BaseDirectory}/apiclient_cert.p12", Options.CertPassword); return(refundResult); }
private static RefundResult FormatResult(string s) { RefundResult result = new RefundResult(); if (!string.IsNullOrEmpty(s)) { string[] group, temp; string[] array = s.Split('#'); foreach (string line in array) { group = line.Split('$'); if (group.Length > 0) { temp = group[0].Split('^'); RefundInfo info = new RefundInfo(); if (temp.Length > 0) { info.PayTradeNo = temp[0]; } if (temp.Length > 1) { info.TotalFee = Money.Parse(temp[1]); } if (temp.Length > 2) { info.Status = "SUCCESS".Equals(temp[2]); } //if (group.Length > 1) //{ // temp = group[1].Split('^'); // if (temp.Length > 0) // info.Account = temp[0]; // if (temp.Length > 1) // info.Fees = Money.Parse(temp[1]); // if (temp.Length > 2) // info.FeesStatus = "SUCCESS".Equals(temp[2]); //} result.Results.Add(info); } } } return(result); }
private static RefundResult ProcessNetWorkRefund(SOIncomeInfo entity, SOInfo soInfo) { var result = new RefundResult(); List <string> payTypeList = CodeNamePairManager.GetList("Inventory", "ChinaPayPayTypeList").Select(p => p.Code).ToList(); if (payTypeList.Contains(soInfo.Payment.PayTypeID.ToString())) { var biz = new IPSPayUtils(); var refundEntity = new RefundEntity { SOSysNo = soInfo.SOSysNo, RefundSysNo = entity.OrderSysNo.Value, RefundAmt = Math.Abs(entity.IncomeAmt.Value), CompanyCode = entity.CompanyCode, OrderDate = soInfo.OrderDate.Value }; refundEntity.ProductAmount = Math.Abs(entity.IncomeAmt.Value) - soInfo.Amount.ShipPrice - soInfo.TariffAmt; refundEntity.TaxFeeAmount = soInfo.TariffAmt; refundEntity.ShippingFeeAmount = soInfo.Amount.ShipPrice; if (soInfo.Payment.PayTypeID >= 200 && soInfo.Payment.PayTypeID < 300) { result = biz.Refund(refundEntity); } else { throw new BusinessException("未实现此支付方式"); } } else { result.Result = false; result.Message = ("支付方式" + soInfo.Payment.PayTypeName + "不支持网关直退。"); } return(result); }
public async Task <IActionResult> RefundAsync([FromBody] RefundRequestModel request) { try { RefundResult refundResult = await _refundService.ExecuteAsync(request.MerchantId, request.PaymentRequestId, request.DestinationAddress); return(Ok(Mapper.Map <RefundResponseModel>(refundResult))); } catch (RefundOperationFailedException e) { _log.ErrorWithDetails(e, new { errors = e.TransferErrors }); } catch (AssetUnknownException e) { _log.ErrorWithDetails(e, new { e.Asset }); } catch (AssetNetworkNotDefinedException e) { _log.ErrorWithDetails(e, new { e.AssetId }); } catch (Exception e) { _log.ErrorWithDetails(e, request); if (e is RefundValidationException validationEx) { _log.ErrorWithDetails(e, new { validationEx.ErrorType }); return(BadRequest(new RefundErrorModel { Code = validationEx.ErrorType })); } } return(BadRequest(new RefundErrorModel { Code = RefundErrorType.Unknown })); }
/// <summary> /// 申请退款 /// </summary> /// <param name="dto"></param> /// <returns></returns> public RefundResult Refund(RefundDTO dto) { WeixinDataHelper data = new WeixinDataHelper(this._weixinKey); if (!string.IsNullOrEmpty(dto.OnlineTradeNo))//微信订单号存在的条件下,则已微信订单号为准 { data.SetValue("transaction_id", dto.OnlineTradeNo); } else//微信订单号不存在,才根据商户订单号去退款 { data.SetValue("out_trade_no", dto.OutTradeNo); } data.SetValue("total_fee", int.Parse(((Convert.ToDouble(dto.TotalFee)) * 100).ToString())); //订单总金额 data.SetValue("refund_fee", int.Parse(((Convert.ToDouble(dto.RefundFee)) * 100).ToString())); //退款金额 data.SetValue("out_refund_no", dto.OutRefundNo); //随机生成商户退款单号 data.SetValue("op_user_id", dto.OperatorId); //操作员,默认为商户号 WeixinDataHelper respose = weixinPayApi.Refund(data); //提交退款申请给API,接收返回数据 var result = new RefundResult(); result.SetWeixiResult(respose); return(result); }
/// <summary> /// 退款申请 /// </summary> /// <param name="dto"></param> /// <returns></returns> public RefundResult Refund(RefundDTO dto) { RefundResult result = new RefundResult(); try { AlipayTradeRefundDTO refundDto = new AlipayTradeRefundDTO(); refundDto.out_request_no = dto.OutRefundNo; refundDto.out_trade_no = dto.OutTradeNo; refundDto.refund_amount = dto.RefundFee; refundDto.refund_reason = dto.RefundReason; refundDto.trade_no = dto.OnlineTradeNo; AlipayTradeRefundRequest refundRequest = new AlipayTradeRefundRequest(); refundRequest.BizContent = refundDto.BuildJson(); AlipayTradeRefundResponse response = Execute(refundRequest); result.SetAlipayResult(response); return(result); } catch (Exception e) { throw new F2FPayException(e.Message); } }
public void Refund() { IRefundOrder order = GetRefundOrder(); if (order != null) { PayProvider pay = LoadProvider(order.PayProvider); if (pay != null) { if (pay.IsOnlinePay) { OnSubmit(pay.Refund(this, pay.PackData(order.TradeNo, order), SubmitText)); } else { RefundResult result = new RefundResult(new RefundInfo() { PayTradeNo = order.PayTradeNo, TotalFee = order.TotalFee, Status = true }); OnCallback(pay, true, result); OnRedirect(this, pay, result, true); //try { Response.Redirect(ReturnUrl, true); } //catch (Exception) { } } } else { OnError(string.Concat("第三方支付\"", order.PayProvider, "\"不被支持或已禁用!")); } } else { OnError(string.Concat("获取订单信息错误!")); } }
public async Task <IActionResult> RefundAsync([FromBody] RefundRequestModel request) { try { RefundResult refundResult = await _refundService.ExecuteAsync(request.MerchantId, request.PaymentRequestId, request.DestinationAddress); return(Ok(Mapper.Map <RefundResponseModel>(refundResult))); } catch (RefundOperationFailedException refundFailedEx) { await _log.WriteErrorAsync(nameof(RefundAsync), new { errors = refundFailedEx.TransferErrors }.ToJson(), refundFailedEx); } catch (AssetUnknownException assetEx) { await _log.WriteErrorAsync(nameof(RefundAsync), new { assetEx.Asset }.ToJson(), assetEx); } catch (Exception ex) { await _log.WriteErrorAsync(nameof(RefundAsync), request.ToJson(), ex); if (ex is RefundValidationException validationEx) { await _log.WriteErrorAsync(nameof(RefundAsync), new { errorType = validationEx.ErrorType.ToString() }.ToJson(), validationEx); return(BadRequest(new RefundErrorModel { Code = validationEx.ErrorType })); } } return(BadRequest(new RefundErrorModel { Code = RefundErrorType.Unknown })); }
public static RefundResponse InvokeRefund(IOffAmazonPaymentsService service, RefundRequest request) { RefundResponse response = null; try { response = service.Refund(request); Console.WriteLine("Service Response"); Console.WriteLine("============================================================================="); Console.WriteLine(); Console.WriteLine(" RefundResponse"); if (response.IsSetRefundResult()) { Console.WriteLine(" RefundResult"); RefundResult refundResult = response.RefundResult; if (refundResult.IsSetRefundDetails()) { Console.WriteLine(" RefundDetails"); RefundDetails refundDetails = refundResult.RefundDetails; if (refundDetails.IsSetAmazonRefundId()) { Console.WriteLine(" AmazonRefundId"); Console.WriteLine(" {0}", refundDetails.AmazonRefundId); } if (refundDetails.IsSetRefundReferenceId()) { Console.WriteLine(" RefundReferenceId"); Console.WriteLine(" {0}", refundDetails.RefundReferenceId); } if (refundDetails.IsSetSellerRefundNote()) { Console.WriteLine(" SellerRefundNote"); Console.WriteLine(" {0}", refundDetails.SellerRefundNote); } if (refundDetails.IsSetRefundType()) { Console.WriteLine(" RefundType"); Console.WriteLine(" {0}", refundDetails.RefundType); } if (refundDetails.IsSetFeeRefunded()) { Console.WriteLine(" FeeRefunded"); Price feeRefunded = refundDetails.FeeRefunded; if (feeRefunded.IsSetAmount()) { Console.WriteLine(" Amount"); Console.WriteLine(" {0}", feeRefunded.Amount); } if (feeRefunded.IsSetCurrencyCode()) { Console.WriteLine(" CurrencyCode"); Console.WriteLine(" {0}", feeRefunded.CurrencyCode); } } if (refundDetails.IsSetCreationTimestamp()) { Console.WriteLine(" CreationTimestamp"); Console.WriteLine(" {0}", refundDetails.CreationTimestamp); } if (refundDetails.IsSetProviderCreditReversalSummaryList()) { foreach (ProviderCreditReversalSummary providerCreditReversalSummary in refundDetails.ProviderCreditReversalSummaryList.member) { if (providerCreditReversalSummary.IsSetProviderCreditReversalId()) { Console.WriteLine(" ProviderCreditReversalId"); Console.WriteLine(" {0}", providerCreditReversalSummary.ProviderCreditReversalId); } if (providerCreditReversalSummary.IsSetProviderId()) { Console.WriteLine(" ProviderId"); Console.WriteLine(" {0}", providerCreditReversalSummary.ProviderId); } } } if (refundDetails.IsSetRefundStatus()) { Console.WriteLine(" RefundStatus"); Status refundStatus = refundDetails.RefundStatus; if (refundStatus.IsSetState()) { Console.WriteLine(" State"); Console.WriteLine(" {0}", refundStatus.State); } if (refundStatus.IsSetLastUpdateTimestamp()) { Console.WriteLine(" LastUpdateTimestamp"); Console.WriteLine(" {0}", refundStatus.LastUpdateTimestamp); } if (refundStatus.IsSetReasonCode()) { Console.WriteLine(" ReasonCode"); Console.WriteLine(" {0}", refundStatus.ReasonCode); } if (refundStatus.IsSetReasonDescription()) { Console.WriteLine(" ReasonDescription"); Console.WriteLine(" {0}", refundStatus.ReasonDescription); } } } } if (response.IsSetResponseMetadata()) { Console.WriteLine(" ResponseMetadata"); ResponseMetadata responseMetadata = response.ResponseMetadata; if (responseMetadata.IsSetRequestId()) { Console.WriteLine(" RequestId"); Console.WriteLine(" {0}", responseMetadata.RequestId); } } } catch (OffAmazonPaymentsServiceException ex) { PrintException(ex); } return(response); }
protected virtual bool OnNotify(PayProvider provider, bool success, PaymentResult result) { if (result.Type == PaymentType.Pay) { PayResult presult = (PayResult)result; if (!string.IsNullOrEmpty(presult.TradeNo)) { DataSource.Begin(); try { M.PayRecord pr = M.PayRecord.GetById(DataSource, presult.TradeNo, presult.Type); if (pr == null) { throw new ArgumentException("订单号错误!"); } if (pr.Status >= PayStatus.Paying && pr.Status < PayStatus.PaySuccess) { PayStatus status = pr.Status; pr.PayId = presult.PayTradeNo; if (provider.IsOnlinePay) { pr.Money = presult.TotalFee; } if (success) { pr.Status = PayStatus.PaySuccess; } else { pr.Status = PayStatus.PayFailed; } if (pr.UpdateStatus(DataSource, status) == DataStatus.Success) { if (success && pr.Status == PayStatus.PaySuccess) { if (!OnModifyMoney(provider, pr.PayType, pr.UserId, presult.TotalFee, pr.Id, pr.Title, pr.Type, pr.TargetId)) { throw new ArgumentException("充值失败!"); } } } else { throw new ArgumentException("更细订单失败!"); } } else { if (pr.Status != PayStatus.PaySuccess) { throw new ArgumentException("订单号错误!"); } } DataSource.Commit(); return(true); } catch (Exception) { DataSource.Rollback(); //OnNotifyError(provider, ex.Message); } } //else //{ // OnNotifyError(provider, "订单号为空!"); //} } else { RefundResult rresult = (RefundResult)result; if (!string.IsNullOrEmpty(rresult.BatchNo)) { if (rresult.SuccessNum == 1 && rresult.Results.Count == 1) { RefundInfo info = rresult.Results[0]; DataSource.Begin(); try { M.PayRecord pr = M.PayRecord.GetById(DataSource, rresult.BatchNo, rresult.Type); if (pr == null) { throw new ArgumentException("批次号错误!"); } if (pr.PayId != info.PayTradeNo) { throw new ArgumentException("订单号错误!"); } if (pr.Status == PayStatus.RefundNotifying) { if (provider.IsOnlinePay) { pr.Money = info.TotalFee; } if (success && info.Status) { pr.Status = PayStatus.RefundSuccess; } else { pr.Status = PayStatus.RefundFailed; } if (pr.UpdateStatus(DataSource, PayStatus.RefundNotifying) == DataStatus.Success) { if (success && info.Status && pr.Status == PayStatus.RefundSuccess) { if (!OnModifyMoney(provider, pr.PayType, pr.UserId, info.TotalFee, pr.Id, pr.Title, pr.Type, pr.TargetId)) { throw new ArgumentException("退款失败!"); } } } else { throw new ArgumentException("更新订单失败!"); } } else { if (pr.Status != PayStatus.RefundSuccess) { throw new ArgumentException("批次号错误!"); } } DataSource.Commit(); return(true); } catch (Exception) { DataSource.Rollback(); //OnNotifyError(provider, ex.Message); } } //else //{ // OnNotifyError(provider, "退款数量错误!"); //} } //else //{ // OnNotifyError(provider, "批次号为空!"); //} } return(false); }
private void baseButtonRefused_Click(object sender, EventArgs e) { try { EmRefundOrderRefusedReasonForm form = new EmRefundOrderRefusedReasonForm(); //if (GlobalMessageBox.Show("是否确认操作?", "确认", MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes) //{ // return; //} String reason = string.Empty; if (form.ShowDialog() == DialogResult.OK) { reason = form.Result; } else { return; } if (GlobalUtil.EngineUnconnectioned(this)) { return; } RefusedRefundPara para = new RefusedRefundPara() { EmRefundOrderID = Order.ID, RejectCauese = reason, OperateID = CommonGlobalCache.CurrentUserID }; RefundResult result = GlobalCache.EMallServerProxy.RefusedRefund(para); switch (result) { case RefundResult.Success: GlobalMessageBox.Show("已拒绝退款!"); // this.baseButtonOutbound.Visible = false; this.baseButtonRefused.Visible = false; baseButtonApplyRefund.Visible = false; this.RefreshPageAction?.Invoke(this.CurrentTabPage, this.SourceCtrlType); break; case RefundResult.StateIsError: GlobalMessageBox.Show("退款申请状态不符合要求!"); break; case RefundResult.IsRefund: GlobalMessageBox.Show("已经退过货!"); break; case RefundResult.MemberIsNotExist: GlobalMessageBox.Show("会员不存在!"); break; case RefundResult.Error: GlobalMessageBox.Show("内部错误!"); break; default: break; } } catch (Exception ex) { GlobalUtil.ShowError(ex); } finally { GlobalUtil.UnLockPage(this); } }
private void HandleDeclinedRefund(RefundResult refundResult) { // handle the result here }
public static void ShowResults(string title, RefundResult result) { ShowHeader(title); Console.WriteLine("SessionId {0}", result.SessionId); Console.WriteLine("SessionDate {0}", result.SessionDate); Console.WriteLine("AccountNumber {0}", result.AccountNumber); Console.WriteLine("Method {0}", result.RefundMethod); Console.WriteLine("Amount {0}", result.Amount.ToString("#,##0.00")); Console.WriteLine("IsSuccessful {0}", result.Success); Console.WriteLine("ScheduleDate {0}", result.ScheduledDate.HasValue ? result.ScheduledDate.Value.ToShortDateString() : ""); if (result.NotificationEmails != null) { foreach (string email in result.NotificationEmails) Console.WriteLine("Email {0}", email); } foreach (var ex in result.Exceptions) { Console.WriteLine("Exception: {0}", ex.Message); } }
public MoyasarRefundBase Refund(string id, string amount) { var finalUrl = MakePaymentUrl + "/" + id + "/refund?amount=" + amount; if (amount.Equals("0")) { MoyasarValidationException ex = new MoyasarValidationException(EnMessages.AmountNotZero); throw ex; } try { var httpWebRequest = (HttpWebRequest)WebRequest.Create(finalUrl); httpWebRequest.ContentType = "application/json; charset=utf-8"; httpWebRequest.Method = "POST"; httpWebRequest.Credentials = new NetworkCredential(ApiKey, ApiKey); var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) { var result = streamReader.ReadToEnd(); var rs = JObject.Parse(result); RefundResult refundResult = new RefundResult(); var type = (string)rs["type"]; if (type == null) { refundResult = new RefundResult() { Currency = (string)rs["currency"], Amount = (string)rs["amount"], Id = (string)rs["id"], Fee = (string)rs["fee"], Refunded = (string)rs["refunded"], RefundedAt = (string)rs["refunded_at"] }; if ((string)rs["source"]["type"] == "creditcard") { refundResult.Source = new CreditCard() { Type = (string)rs["source"]["type"], Company = (string)rs["source"]["company"], Name = (string)rs["source"]["name"], Number = (string)rs["source"]["number"], Message = (string)rs["source"]["message"] }; } return(refundResult); } else { RefundException exception = new RefundException { Type = (string)rs["type"], Message = (string)rs["message"], Error = (string)rs["errors"] }; return(exception); } return(null); } } catch (Exception ex) { return(new RefundException() { Message = ex.Message, Error = null, Type = ex.Source }); } }