Ejemplo n.º 1
0
        /// <summary>
        /// 退款
        /// </summary>
        /// <param name="refund">退款实体</param>
        /// <param name="refundBack">退款返回实体</param>
        /// <param name="message">错误信息</param>
        /// <returns></returns>
        internal bool Refund(Refund refund, out RefundBack refundBack, out string message)
        {
            _log.Info("退款 Refund 开始");
            var refundRequst = new AlipayTradeRefundRequest();

            refundRequst.BizContent = Newtonsoft.Json.JsonConvert.SerializeObject(refund, new JsonSerializerSettings()
            {
                DefaultValueHandling = DefaultValueHandling.Ignore
            }).ToLower();
            var refundResponse = client.Execute(refundRequst);

            if (refundResponse.Code == "10000")
            {
                _log.Info("退款成功!");
                refundBack = new RefundBack()
                {
                    Buyer_Logon_Id          = refundResponse.BuyerLogonId,
                    Buyer_User_Id           = refundResponse.BuyerUserId,
                    Code                    = refundResponse.Code,
                    Fund_Change             = refundResponse.FundChange,
                    Gmt_Refund_Pay          = Convert.ToDateTime(refundResponse.GmtRefundPay),
                    Msg                     = refundResponse.Msg,
                    Open_Id                 = refundResponse.OpenId,
                    Out_Trade_No            = refundResponse.OutTradeNo,
                    Refund_Detail_Item_List = GetTradeFundBills(refundResponse.RefundDetailItemList),
                    Refund_Fee              = refundResponse.RefundFee,
                    Store_Name              = refundResponse.StoreName,
                    Sub_Code                = refundResponse.SubCode,
                    Sub_Msg                 = refundResponse.SubMsg,
                    Trade_No                = refundResponse.TradeNo
                };
                message = "";
                return(true);
            }
            else
            {
                refundBack = null;
                message    = $"{ refundResponse.Msg},{refundResponse.SubMsg}";
                _log.Error($"退款失败:{message}");
                return(false);
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 退款
        /// </summary>
        /// <param name="refund">退款实体</param>
        /// <param name="refundBack">退款返回实体</param>
        /// <param name="message">错误信息</param>
        /// <returns>交易是否成功</returns>
        internal bool Refund(Refund refund, out RefundBack refundBack, out string message)
        {
            _log.Info("退款 Refund 开始执行");
            var data = new WxPayData();

            if (string.IsNullOrEmpty(refund.Out_Trade_No) || string.IsNullOrEmpty(WxPayConfig.MCHID) || string.IsNullOrEmpty(refund.Out_Refund_No))
            {
                message = "商户订单号,操作员,退款单号 不能为空";
                _log.Error(message);
                refundBack = null;
                return(false);
            }
            if (refund.Total_Fee < 0 || refund.Refund_Fee < 0)
            {
                message = "订单总金额或退款金额不能为0";
                _log.Error(message);
                refundBack = null;
                return(false);
            }

            data.SetValue("out_trade_no", refund.Out_Trade_No);
            data.SetValue("total_fee", refund.Total_Fee);         //订单总金额
            data.SetValue("refund_fee", refund.Refund_Fee);       //退款金额
            data.SetValue("out_refund_no", refund.Out_Refund_No); //商户退款单号
            data.SetValue("op_user_id", WxPayConfig.MCHID);       //操作员,默认为商户号
            //退款
            _log.Info("退款 WxPayApi.Refund");
            var result = WxPayApi.Refund(data);

            _log.Info("Refund", "Refund process complete, result : " + result.ToXml());
            var return_code = result.GetValue("return_code")?.ToString().ToUpper();
            var result_code = result.GetValue("result_code")?.ToString().ToUpper();

            if (return_code == "SUCCESS" && result_code == "SUCCESS")
            {
                _log.Info("退款处理成功");
                refundBack = new RefundBack()
                {
                    Out_Trade_No          = result.GetValue("out_trade_no")?.ToString(),
                    Out_Refund_No         = result.GetValue("out_refund_no")?.ToString(),
                    Refund_Id             = result.GetValue("refund_id")?.ToString(),
                    Refund_Channel        = result.GetValue("refund_channel")?.ToString(),
                    Refund_Fee            = Convert.ToInt32(result.GetValue("refund_fee")),
                    Settlement_Refund_Fee = result.GetValue("settlement_refund_fee") == null ? 0 : Convert.ToInt32(result.GetValue("settlement_refund_fee")),
                    Total_Fee             = Convert.ToInt32(result.GetValue("total_fee")),
                    Settlement_Total_Fee  = Convert.ToInt32(result.GetValue("settlement_total_fee")),
                    Fee_Type             = result.GetValue("fee_type")?.ToString(),
                    Cash_Fee             = Convert.ToInt32(result.GetValue("cash_fee")),
                    Cash_Fee_Type        = result.GetValue("cash_fee_type ")?.ToString(),
                    Cash_Refund_Fee      = result.GetValue("cash_refund_fee") == null ? 0 : Convert.ToInt32(result.GetValue("cash_refund_fee")),
                    Coupon_Type_Sn       = result.GetValue("coupon_type_$n")?.ToString(),
                    Coupon_Refund_Fee    = result.GetValue("coupon_refund_fee") == null ? 0 : Convert.ToInt32(result.GetValue("coupon_refund_fee")),
                    Coupon_Refund_Fee_Sn = result.GetValue("coupon_refund_fee_$n") == null ? 0 : Convert.ToInt32(result.GetValue("coupon_refund_fee_$n")),
                    Coupon_Refund_Count  = result.GetValue("coupon_refund_count") == null ? 0 : Convert.ToInt32(result.GetValue("coupon_refund_count")),
                    Coupon_Refund_Id_Sn  = result.GetValue("coupon_refund_id_$n")?.ToString()
                };
                message = "";
                return(true);
            }
            else
            {
                var return_msg   = result.GetValue("return_msg");
                var err_code_des = result.GetValue("err_code_des");
                message = $"{return_msg},{err_code_des}";
                _log.Error($"退款处理失败:{message}");
                refundBack = null;
                return(false);
            }
        }