/// <summary> /// 验证参数 /// </summary> /// <param name="param">支付参数</param> protected void ValidateParam(WechatRefundRequest param) { if (param.TransactionId.IsEmpty() && param.OrderId.IsEmpty()) { throw new Warning("商户订单号和微信订单号只能设置一个"); } }
/// <summary> /// 申请退款 /// </summary> /// <param name="request">提交给申请退款API的参数</param> /// <param name="config"></param> /// <param name="timeOut">超时时间</param> /// <returns>成功时返回接口调用结果,其他抛异常</returns> public static async Task <WechatRefundResponse> RefundAsync(WechatRefundRequest request, WechatpayConfig config, int timeOut = 6) { //检测必填参数 if (string.IsNullOrEmpty(request.OutTradeNo) && string.IsNullOrEmpty(request.TransactionId)) { throw new Exception("退款申请接口中,out_trade_no、transaction_id至少填一个!"); } else if (string.IsNullOrEmpty(request.OutRefundNo)) { throw new Exception("退款申请接口中,缺少必填参数out_refund_no!"); } else if (request.TotalFee <= 0) { throw new Exception("退款申请接口中,缺少必填参数total_fee!"); } else if (request.RefundFee <= 0) { throw new Exception("退款申请接口中,缺少必填参数refund_fee!"); } var result = await HttpService.ExecuteAsync(request, config, WechatConstants.RefundOrderUrl, true); if (result.ReturnCode != WechatConstants.SUCCESS && result.ResultCode != WechatConstants.SUCCESS) { throw new Exception(result.ReturnMsg); } return(result); }
/// <summary> /// 验证 /// </summary> protected void Validate(WechatpayConfig config, WechatRefundRequest param) { config.CheckNull(nameof(config)); param.CheckNull(nameof(param)); config.Validate(); param.Validate(); ValidateConfig(config); ValidateParam(param); }
/// <summary> /// 退款 /// </summary> /// <param name="request">退款参数</param> public async Task <RefundResult> RefundAsync(WechatRefundRequest request) { var config = await ConfigProvider.GetConfigAsync(); Validate(config, request); var builder = new WechatpayRefundParameterBuilder(config); Config(builder, request); return(await RequstResult(config, builder)); }
/// <summary> /// 初始化 /// </summary> public void Init(WechatRefundRequest param) { param.CheckNull(nameof(param)); RefundFee(param.RefundFee) .Description(param.RefundDescription) .RefundId(param.RefundId) .TransactionId(param.TransactionId) .AppId(Config.AppId) .MerchantId(Config.MerchantId) .Add("nonce_str", Id.Guid()) .OutTradeNo(param.OrderId) .TotalFee(param.Money); }
public async Task Test5() { var config = new WechatpayConfig(); var request = new WechatRefundRequest { OutTradeNo = "202007297777", TotalFee = 100, RefundFee = 100, OutRefundNo = HttpService.GenerateOutTradeNo(config) }; var response = await WechatpayClient.RefundAsync(request, config); if (string.IsNullOrEmpty(response.TransactionId)) { Assert.Fail(); } else { Assert.Pass(); } }
/// <summary> /// 配置 /// </summary> /// <param name="builder">参数生成器</param> /// <param name="param">支付参数</param> protected void Config(WechatpayRefundParameterBuilder builder, WechatRefundRequest param) { builder.Init(param); }