/// <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); } }
/// <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); } }