Exemplo n.º 1
0
        public SortedDictionary <string, string> DoPost(IWxConfig config, ITenpayPostApi request, bool isUserCert = false)
        {
            string realServerUrl = GetServerUrl(this.serverUrl, request.ApiName);

            WebUtils webUtils = new WebUtils();

            _returnCoennt = webUtils.DoPost(config, realServerUrl, request.PostData, isUserCert);


            SortedDictionary <string, string> m_values = new SortedDictionary <string, string>();


            XmlDocument xmlDoc = new XmlDocument();

            xmlDoc.LoadXml(_returnCoennt);
            XmlNode     xmlNode = xmlDoc.FirstChild;//获取到根节点<xml>
            XmlNodeList nodes   = xmlNode.ChildNodes;

            foreach (XmlNode xn in nodes)
            {
                XmlElement xe = (XmlElement)xn;
                m_values[xe.Name] = xe.InnerText;//获取xml的键值对到WxPayData内部的数据中
            }


            return(m_values);
        }
Exemplo n.º 2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="config"></param>
        /// <param name="out_trade_no">商户内部的订单号</param>
        public TenpayOrderRefundQueryApi(IWxConfig config, string out_refund_no)
        {
            SortedDictionary <string, object> sParams = new SortedDictionary <string, object>();

            sParams.Add("appid", config.AppId);                 //公众账号ID
            sParams.Add("mch_id", config.MchId);                //商户号
            sParams.Add("nonce_str", CommonUtil.GetNonceStr()); //随机字符串
            sParams.Add("out_refund_no", out_refund_no);        //微信订单号

            string sign = MakeSign(sParams, config.Key);

            sParams.Add("sign", sign);//签名

            _postData = GetXml(sParams);
        }
Exemplo n.º 3
0
        public TenpayUnifiedOrderApi(IWxConfig config, UnifiedOrder order)
        {
            SortedDictionary <string, object> sParams = new SortedDictionary <string, object>();

            sParams.Add("appid", config.AppId);                      //公众账号ID
            sParams.Add("mch_id", config.MchId);                     //商户号
            sParams.Add("nonce_str", CommonUtil.GetNonceStr());      //随机字符串
            sParams.Add("notify_url", config.Notify_Url);            //通知地址
            sParams.Add("trade_type", order.trade_type);             //交易类型
            sParams.Add("spbill_create_ip", order.spbill_create_ip); //终端IP
            sParams.Add("out_trade_no", order.out_trade_no);         //商户订单号
            sParams.Add("total_fee", order.total_fee);               //标价金额
            sParams.Add("body", order.body);                         //商品描述
            sParams.Add("time_expire", order.time_expire);           //订单过期时间
            if (order.trade_type == "JSAPI")
            {
                sParams.Add("openid", order.openid);//用户标识
            }

            if (!string.IsNullOrEmpty(order.goods_tag))
            {
                sParams.Add("goods_tag", order.goods_tag);//商品优惠标识
            }
            if (order.trade_type == "MWEB")
            {
                sParams.Add("scene_info", "{\"h5_info\": {\"type\":\"Wap\",\"wap_url\": \"http://mobile.17fanju.com\",\"wap_name\": \"贩聚社团\"}}");//场景信息
            }
            //sParams.Add("device_info", "WEB");//设备号
            //sParams.Add("sign_type", "");//签名类型
            //sParams.Add("detail", "");商品详情
            //sParams.Add("attach", "");附加数据
            //sParams.Add("fee_type", "");//标价币种
            //sParams.Add("time_start", "");//交易起始时间
            //sParams.Add("time_expire", "");//交易结束时间
            //sParams.Add("goods_tag", "");//订单优惠标记
            //sParams.Add("product_id", "");//商品ID
            //sParams.Add("limit_pay", "");//指定支付方式
            //sParams.Add("openid", "openid");//用户标识
            //sParams.Add("scene_info", "");//场景信息
            string sign = MakeSign(sParams, config.Key);

            sParams.Add("sign", sign);//签名


            _postData = GetXml(sParams);
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="config"></param>
        /// <param name="out_trade_no">商户内部的订单号</param>
        public TenpayCouponQueryInfoApi(IWxConfig config,string coupon_id, string coupon_stock_id, string openid)
        {
            SortedDictionary<string, object> sParams = new SortedDictionary<string, object>();

            sParams.Add("appid", config.AppId);
            sParams.Add("coupon_id", coupon_id);
            sParams.Add("mch_id", config.MchId);
            sParams.Add("nonce_str", CommonUtil.GetNonceStr());
            sParams.Add("openid", openid);
            sParams.Add("stock_id", coupon_stock_id);
            string sign = MakeSign(sParams, config.Key);
            sParams.Add("sign", sign);

            _postData = GetXml(sParams);

            // _postData = "<xml><appid><![CDATA[wxc6e80f8c575cf3f5]]></appid><coupon_stock_id><![CDATA[3068001]]></coupon_stock_id><mch_id><![CDATA[1486589902]]></mch_id><nonce_str><![CDATA[bdb70cd1606a4669a15d5af965811f77]]></nonce_str><openid>otakHv8beYaLD9po9y6WjVe1fqt81</openid><openid_count>1</openid_count><partner_trade_no><![CDATA[202]]></partner_trade_no><sign><![CDATA[76C1EE9C00B953AC2655637D088F83ED]]></sign></xml>";
        }
Exemplo n.º 5
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="config"></param>
        /// <param name="out_trade_no">商户内部的订单号</param>
        public TenpayOrderPayReFundApi(IWxConfig config, string out_trade_no, string out_refund_no, string total_fee, string refund_fee, string refund_desc)
        {
            SortedDictionary <string, object> sParams = new SortedDictionary <string, object>();

            sParams.Add("appid", config.AppId);                 //公众账号ID
            sParams.Add("mch_id", config.MchId);                //商户号
            sParams.Add("nonce_str", CommonUtil.GetNonceStr()); //随机字符串
            sParams.Add("out_trade_no", out_trade_no);          //微信订单号



            sParams.Add("total_fee", int.Parse(total_fee));   //订单总金额
            sParams.Add("refund_fee", int.Parse(refund_fee)); //退款金额
            sParams.Add("out_refund_no", out_refund_no);      //随机生成商户退款单号
            sParams.Add("refund_desc", refund_desc);          //退款原因

            string sign = MakeSign(sParams, config.Key);

            sParams.Add("sign", sign);//签名

            _postData = GetXml(sParams);
        }
Exemplo n.º 6
0
        public string DoPost(IWxConfig config, string url, string xml, bool isUseCert = false, int timeout = 1000)
        {
            System.GC.Collect(); //垃圾回收,回收没有正常关闭的http连接

            string result = "";  //返回结果

            HttpWebRequest  request   = null;
            HttpWebResponse response  = null;
            Stream          reqStream = null;

            try
            {
                //设置最大连接数
                ServicePointManager.DefaultConnectionLimit = 200;
                //设置https验证方式
                if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
                {
                    ServicePointManager.ServerCertificateValidationCallback =
                        new RemoteCertificateValidationCallback(CheckValidationResult);
                }

                /***************************************************************
                 * 下面设置HttpWebRequest的相关属性
                 * ************************************************************/
                request = (HttpWebRequest)WebRequest.Create(url);

                request.Method  = "POST";
                request.Timeout = timeout * 1000;

                //设置代理服务器
                //WebProxy proxy = new WebProxy();                          //定义一个网关对象
                //proxy.Address = new Uri(WxPayConfig.PROXY_URL);              //网关服务器端口:端口
                //request.Proxy = proxy;

                //设置POST的数据类型和长度
                request.ContentType = "text/xml";


                LogUtil.Info(string.Format("提交URL:{0},参数:{1}", url, xml));


                byte[] data = System.Text.Encoding.UTF8.GetBytes(xml);
                request.ContentLength = data.Length;

                //是否使用证书
                if (isUseCert)
                {
                    LogUtil.Info("WxPayApi:path:" + config.SslCert_Path);
                    X509Certificate2 cer = new X509Certificate2(config.SslCert_Path, config.SslCert_Password, X509KeyStorageFlags.PersistKeySet);
                    request.ClientCertificates.Add(cer);
                    LogUtil.Info("WxPayApi:PostXml used cert");
                }

                //往服务器写入数据
                reqStream = request.GetRequestStream();
                reqStream.Write(data, 0, data.Length);
                reqStream.Close();

                //获取服务端返回
                response = (HttpWebResponse)request.GetResponse();

                //获取服务端返回数据
                StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
                result = sr.ReadToEnd().Trim();

                LogUtil.Info(string.Format("提交URL:{0},返回结果:{1}", url, result));

                sr.Close();
            }
            catch (System.Threading.ThreadAbortException e)
            {
                LogUtil.Error("HttpService:Thread - caught ThreadAbortException - resetting.");
                LogUtil.Error(string.Format("Exception message: {0}", e.Message));
                System.Threading.Thread.ResetAbort();
            }
            catch (WebException e)
            {
                LogUtil.Error(string.Format("HttpService:{0}", e.ToString()));
                if (e.Status == WebExceptionStatus.ProtocolError)
                {
                    LogUtil.Error(string.Format("HttpService:StatusCode :{0} ", ((HttpWebResponse)e.Response).StatusCode));
                    LogUtil.Error(string.Format("HttpService:StatusDescription : {0}", ((HttpWebResponse)e.Response).StatusDescription));
                }
            }
            catch (Exception e)
            {
                LogUtil.Error(string.Format("HttpService:{0}", e.ToString()));
            }
            finally
            {
                //关闭连接和流
                if (response != null)
                {
                    response.Close();
                }
                if (request != null)
                {
                    request.Abort();
                }
            }
            return(result);
        }
Exemplo n.º 7
0
 public TenpayUtil(IWxConfig config)
 {
     this._config = config;
 }