コード例 #1
0
 /// <summary>
 /// 验证参数
 /// </summary>
 /// <param name="param">支付参数</param>
 protected void ValidateParam(WechatRefundRequest param)
 {
     if (param.TransactionId.IsEmpty() && param.OrderId.IsEmpty())
     {
         throw new Warning("商户订单号和微信订单号只能设置一个");
     }
 }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
 /// <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);
 }
コード例 #4
0
        /// <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));
        }
コード例 #5
0
 /// <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);
 }
コード例 #6
0
        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();
            }
        }
コード例 #7
0
 /// <summary>
 /// 配置
 /// </summary>
 /// <param name="builder">参数生成器</param>
 /// <param name="param">支付参数</param>
 protected void Config(WechatpayRefundParameterBuilder builder, WechatRefundRequest param)
 {
     builder.Init(param);
 }