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); }
/// <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); }
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>"; }
/// <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); }
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); }
public TenpayUtil(IWxConfig config) { this._config = config; }