Esempio n. 1
0
        /// <summary>
        /// 撤销订单API接口
        /// </summary>
        /// <param name="request">提交给撤销订单API接口的参数,out_trade_no和transaction_id必填一个</param>
        /// <param name="config"></param>
        /// <param name="timeOut">接口超时时间</param>
        /// <returns>成功时返回API调用结果,其他抛异常</returns>
        public static async Task <WechatpayData> ReverseAsyns(WechatpayData request, WechatpayConfig config, int timeOut = 6)
        {
            //检测必填参数
            if (!request.IsSet("out_trade_no") && !request.IsSet("transaction_id"))
            {
                throw new Exception("撤销订单API接口中,参数out_trade_no和transaction_id必须填写一个!");
            }

            return(await HttpService.ExecuteAsync(request, config, WechatConstants.ReverseOrderUrl, true, timeOut));
        }
Esempio n. 2
0
        /// <summary>
        /// 查询订单
        /// </summary>
        /// <param name="request">提交给查询订单API的参数</param>
        /// <param name="config"></param>
        /// <param name="timeOut">超时时间</param>
        /// <returns>成功时返回订单查询结果,其他抛异常</returns>
        public static async Task <WechatpayData> OrderQueryAsync(WechatpayData request, WechatpayConfig config, int timeOut = 6)
        {
            //检测必填参数
            if (!request.IsSet("out_trade_no") && !request.IsSet("transaction_id"))
            {
                throw new Exception("订单查询接口中,out_trade_no、transaction_id至少填一个!");
            }

            return(await HttpService.ExecuteAsync(request, config, WechatConstants.QeuryOrderUrl, false, timeOut));
        }
Esempio n. 3
0
        /// <summary>
        /// 下载对账单
        /// </summary>
        /// <param name="request">提交给下载对账单API的参数</param>
        /// <param name="config"></param>
        /// <param name="timeOut">接口超时时间</param>
        /// <returns></returns>
        public static async Task <WechatpayData> DownloadBillAsync(WechatpayData request, WechatpayConfig config, int timeOut = 6)
        {
            //检测必填参数
            if (!request.IsSet("bill_date"))
            {
                throw new Exception("对账单接口中,缺少必填参数bill_date!");
            }

            return(await HttpService.ExecuteAsync(request, config, WechatConstants.DownloadBillUrl, false, timeOut));//调用HTTP通信接口以提交数据到API
        }
Esempio n. 4
0
        /// <summary>
        /// 关闭订单
        /// </summary>
        /// <param name="request">提交给关闭订单API的参数</param>
        /// <param name="config"></param>
        /// <param name="timeOut">接口超时时间</param>
        /// <returns>成功时返回,其他抛异常</returns>
        public static async Task <WechatpayData> CloseOrderAsync(WechatpayData request, WechatpayConfig config, int timeOut = 6)
        {
            //检测必填参数
            if (!request.IsSet("out_trade_no"))
            {
                throw new Exception("关闭订单接口中,out_trade_no必填!");
            }

            return(await HttpService.ExecuteAsync(request, config, WechatConstants.CloseOrderUrl, false, timeOut));
        }
Esempio n. 5
0
        /// <summary>
        /// 申请退款
        /// </summary>
        /// <param name="request">提交给申请退款API的参数</param>
        /// <param name="config"></param>
        /// <param name="timeOut">超时时间</param>
        /// <returns>成功时返回接口调用结果,其他抛异常</returns>
        public static async Task <WechatpayData> RefundAsync(WechatpayData request, WechatpayConfig config, int timeOut = 6)
        {
            //检测必填参数
            if (!request.IsSet("out_trade_no") && !request.IsSet("transaction_id"))
            {
                throw new Exception("退款申请接口中,out_trade_no、transaction_id至少填一个!");
            }
            else if (!request.IsSet("out_refund_no"))
            {
                throw new Exception("退款申请接口中,缺少必填参数out_refund_no!");
            }
            else if (!request.IsSet("total_fee"))
            {
                throw new Exception("退款申请接口中,缺少必填参数total_fee!");
            }
            else if (!request.IsSet("refund_fee"))
            {
                throw new Exception("退款申请接口中,缺少必填参数refund_fee!");
            }

            return(await HttpService.ExecuteAsync(request, config, WechatConstants.RefundOrderUrl, true, timeOut));
        }
Esempio n. 6
0
        /// <summary>
        /// 统一下单
        /// </summary>
        /// <param name="request">提交给统一下单API的参数</param>
        /// <param name="config"></param>
        /// <param name="timeOut">超时时间</param>
        /// <returns>成功时返回,其他抛异常</returns>
        public static async Task <WechatpayData> CreateOrderAsync(WechatpayData request, WechatpayConfig config, int timeOut = 6)
        {
            //检测必填参数
            if (!request.IsSet("out_trade_no"))
            {
                throw new Exception("缺少统一支付接口必填参数out_trade_no!");
            }
            else if (!request.IsSet("body"))
            {
                throw new Exception("缺少统一支付接口必填参数body!");
            }
            else if (!request.IsSet("total_fee"))
            {
                throw new Exception("缺少统一支付接口必填参数total_fee!");
            }
            else if (!request.IsSet("trade_type"))
            {
                throw new Exception("缺少统一支付接口必填参数trade_type!");
            }

            //关联参数
            if (request.GetValue("trade_type").ToString() == "JSAPI" && !request.IsSet("openid"))
            {
                throw new Exception("统一支付接口中,缺少必填参数openid!trade_type为JSAPI时,openid为必填参数!");
            }
            if (request.GetValue("trade_type").ToString() == "NATIVE" && !request.IsSet("product_id"))
            {
                throw new Exception("统一支付接口中,缺少必填参数product_id!trade_type为JSAPI时,product_id为必填参数!");
            }

            //异步通知url未设置,则使用配置文件中的url
            if (!request.IsSet("notify_url"))
            {
                throw new Exception("缺少统一支付接口必填参数notify_url");
            }

            var result = await HttpService.ExecuteAsync(request, config, WechatConstants.UnifiedOrderUrl, false, timeOut);

            var data = HttpService.GetAppData(config, result.GetValue("prepay_id"), request.GetValue("trade_type")?.ToString(), request.GetValue("code_url")?.ToString());

            result.SetValue("body", data.ToXml());
            return(result);
        }