Esempio n. 1
0
        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());
                    }
                }
            }
        }
Esempio n. 2
0
        public RefundResult RefundCreditCard(String id)
        {
            Stripe       StripeGateway = new Stripe();
            RefundResult refundresult  = StripeGateway.DoRefund(id);

            return(refundresult);
        }
Esempio n. 3
0
        /// <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;
            }
        }
Esempio n. 4
0
        /// <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;
            }
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
        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);
            }
        }
Esempio n. 7
0
        /// <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");
        }
Esempio n. 9
0
        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");
        }
Esempio n. 10
0
        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);
            }
        }
Esempio n. 11
0
        /// <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);
        }
Esempio n. 12
0
        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);
        }
Esempio n. 13
0
        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);
        }
Esempio n. 14
0
        /// <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;
            }
        }
Esempio n. 15
0
        /// <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);
        }
Esempio n. 16
0
        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);
            }
        }
Esempio n. 17
0
        /// <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);
        }
Esempio n. 19
0
        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);
        }
Esempio n. 20
0
        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);
        }
Esempio n. 21
0
        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
            }));
        }
Esempio n. 22
0
        /// <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);
        }
Esempio n. 23
0
        /// <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);
            }
        }
Esempio n. 24
0
        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("获取订单信息错误!"));
            }
        }
Esempio n. 25
0
        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);
        }
Esempio n. 27
0
 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);
 }
Esempio n. 28
0
        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);
            }
        }
Esempio n. 29
0
 private void HandleDeclinedRefund(RefundResult refundResult)
 {
     // handle the result here
 }
Esempio n. 30
0
        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);
            }
        }
Esempio n. 31
0
        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
                });
            }
        }