Пример #1
0
        /// <summary>
        /// 退款查询
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public Data.RefundQueryResponse RefundQuery(Data.RefundQueryRequest request)
        {
            if (request == null)
            {
                throw new ArgumentNullException("request");
            }
            request.sign = Config.Signature(request);
            var    xml = Util.XmlSerializer.Serialize(request).InnerXml;
            string content;

            using (var client = new System.Net.Http.HttpClient())
            {
                var response = client.PostAsync(new Uri("https://api.mch.weixin.qq.com/pay/refundquery"), new System.Net.Http.StringContent(xml, Encoding.UTF8)).Result;
                content = response.Content.ReadAsStringAsync().Result;
            }

            var dom = new System.Xml.XmlDocument();

            dom.LoadXml(content);
            var result = Util.XmlSerializer.Deserialize <Data.RefundQueryResponse>(dom);

            if (result.return_code == "FAIL")
            {
                throw new WechatException(result.return_msg);
            }
            if (result.result_code == "FAIL")
            {
                throw new WechatBusinessException(result.err_code, result.err_code_des);
            }
            result.items = new Data.RefundQueryResponseItem[result.refund_count];
            for (var i = 0; i < result.items.Length; i++)
            {
                var item = new Data.RefundQueryResponseItem();
                foreach (var property in typeof(Data.RefundQueryResponseItem).GetProperties())
                {
                    var value = dom.DocumentElement.GetText(string.Format("{0}_{1}", property.Name, i));
                    property.SetAutoValue(item, value);
                }
                result.items[i] = item;
                if (!item.coupon_refund_count.HasValue || item.coupon_refund_count.Value == 0)
                {
                    continue;
                }
                item.coupons = new Data.RefundQueryResponseItemCoupon[item.coupon_refund_count.Value];
                for (var j = 0; j < item.coupons.Length; j++)
                {
                    var coupon = new Data.RefundQueryResponseItemCoupon();
                    foreach (var property in typeof(Data.RefundQueryResponseItemCoupon).GetProperties())
                    {
                        var value = dom.DocumentElement.GetText(string.Format("{0}_{1}_{2}", property.Name, i, j));
                        property.SetAutoValue(coupon, value);
                    }
                    item.coupons[j] = coupon;
                }
            }
            return(result);
        }
Пример #2
0
        /// <summary>
        /// 退款查询
        /// </summary>
        /// <param name="value">微信订单号</param>
        /// <returns></returns>
        public Data.RefundQueryResponse RefundQueryByTransactionId(string value)
        {
            var request = new Data.RefundQueryRequest
            {
                appid          = Config.AppId,
                mch_id         = Config.MchId,
                nonce_str      = Guid.NewGuid().ToString("N"),
                transaction_id = value
            };

            return(RefundQuery(request));
        }
Пример #3
0
        /// <summary>
        /// 退款查询
        /// </summary>
        /// <param name="value">商户系统内部订单号</param>
        /// <returns></returns>
        public Data.RefundQueryResponse RefundQueryByOutTradeNo(string value)
        {
            var request = new Data.RefundQueryRequest
            {
                appid        = Config.AppId,
                mch_id       = Config.MchId,
                nonce_str    = Guid.NewGuid().ToString("N"),
                out_trade_no = value
            };

            return(RefundQuery(request));
        }