C#微信开发之旅(二):基础类之HttpClientHelper

包含通过HttpClient发起get或post请求的方法,所有调用微信接口的操作都通过此类。话不多说,直接上代码:

  1 public class HttpClientHelper
  2     {
  3         /// <summary>
  4         /// get请求
  5         /// </summary>
  6         /// <param name="url"></param>
  7         /// <returns></returns>
  8         public static string GetResponse(string url)
  9         {
 10             HttpClient httpClient = new HttpClient();
 11             httpClient.DefaultRequestHeaders.Accept.Add(
 12                new MediaTypeWithQualityHeaderValue("application/json"));
 13             HttpResponseMessage response = httpClient.GetAsync(url).Result;
 14
 15             if (response.IsSuccessStatusCode)
 16             {
 17                 string result = response.Content.ReadAsStringAsync().Result;
 18                 return result;
 19             }
 20             return null;
 21         }
 22
 23         public static T GetResponse<T>(string url)
 24             where T : class,new()
 25         {
 26             HttpClient httpClient = new HttpClient();
 27             httpClient.DefaultRequestHeaders.Accept.Add(
 28                new MediaTypeWithQualityHeaderValue("application/json"));
 29             HttpResponseMessage response = httpClient.GetAsync(url).Result;
 30
 31             T result = default(T);
 32
 33             if (response.IsSuccessStatusCode)
 34             {
 35                 Task<string> t = response.Content.ReadAsStringAsync();
 36                 string s = t.Result;
 37
 38                 result = JsonConvert.DeserializeObject<T>(s);
 39             }
 40             return result;
 41         }
 42
 43         /// <summary>
 44         /// post请求
 45         /// </summary>
 46         /// <param name="url"></param>
 47         /// <param name="postData">post数据</param>
 48         /// <returns></returns>
 49         public static string PostResponse(string url, string postData)
 50         {
 51             HttpContent httpContent = new StringContent(postData);
 52             httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
 53             HttpClient httpClient = new HttpClient();
 54
 55             HttpResponseMessage response = httpClient.PostAsync(url, httpContent).Result;
 56
 57             if (response.IsSuccessStatusCode)
 58             {
 59                 string result = response.Content.ReadAsStringAsync().Result;
 60                 return result;
 61             }
 62             return null;
 63         }
 64
 65         /// <summary>
 66         /// 发起post请求
 67         /// </summary>
 68         /// <typeparam name="T"></typeparam>
 69         /// <param name="url">url</param>
 70         /// <param name="postData">post数据</param>
 71         /// <returns></returns>
 72         public static T PostResponse<T>(string url, string postData)
 73             where T : class,new()
 74         {
 75             HttpContent httpContent = new StringContent(postData);
 76             httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
 77             HttpClient httpClient = new HttpClient();
 78
 79             T result = default(T);
 80
 81             HttpResponseMessage response = httpClient.PostAsync(url, httpContent).Result;
 82
 83             if (response.IsSuccessStatusCode)
 84             {
 85                 Task<string> t = response.Content.ReadAsStringAsync();
 86                 string s = t.Result;
 87
 88                 result = JsonConvert.DeserializeObject<T>(s);
 89             }
 90             return result;
 91         }
 92
 93         /// <summary>
 94         /// V3接口全部为Xml形式,故有此方法
 95         /// </summary>
 96         /// <typeparam name="T"></typeparam>
 97         /// <param name="url"></param>
 98         /// <param name="xmlString"></param>
 99         /// <returns></returns>
100         public static T PostXmlResponse<T>(string url, string xmlString)
101             where T : class,new()
102         {
103             HttpContent httpContent = new StringContent(xmlString);
104             httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
105             HttpClient httpClient = new HttpClient();
106
107             T result = default(T);
108
109             HttpResponseMessage response = httpClient.PostAsync(url, httpContent).Result;
110
111             if (response.IsSuccessStatusCode)
112             {
113                 Task<string> t = response.Content.ReadAsStringAsync();
114                 string s = t.Result;
115
116                 result = XmlDeserialize<T>(s);
117             }
118             return result;
119         }
120
121         /// <summary>
122         /// 反序列化Xml
123         /// </summary>
124         /// <typeparam name="T"></typeparam>
125         /// <param name="xmlString"></param>
126         /// <returns></returns>
127         public static T XmlDeserialize<T>(string xmlString)
128             where T : class,new ()
129         {
130             try
131             {
132                 XmlSerializer ser = new XmlSerializer(typeof(T));
133                 using (StringReader reader = new StringReader(xmlString))
134                 {
135                     return (T)ser.Deserialize(reader);
136                 }
137             }
138             catch (Exception ex)
139             {
140                 throw new Exception("XmlDeserialize发生异常:xmlString:" + xmlString + "异常信息:" + ex.Message);
141             }
142
143         }
144     }
时间: 2024-12-30 03:59:17

C#微信开发之旅(二):基础类之HttpClientHelper的相关文章

C#微信开发之旅(二):基础类之HttpClientHelper(更新:SSL安全策略)

public class HttpClientHelper   2     {   3         /// <summary>   4         /// get请求   5         /// </summary>   6         /// <param name="url"></param>   7         /// <returns></returns>   8         pub

C#微信开发之旅(三):AccessToken获取及全局管理

由于AccessToken有效期为2小时,并且接口调用有数量限制,所以开始时选择用WCF做了全局管理(项目中要到AccessToken的地方太多了,支付相关.生成二维码.获取用户信息.菜单操作等等) 下面是AccessToken全局管理的单例类,(原理:通过微信接口获取AccessToken,存储在内存中,当其他项目调用时,会判断是否过期,过期去拿新Token再返回): 1 /// <summary> 2 /// AccessToken类,公众号通过此token 获取相关信息 (单例类) 3

Force.com微信开发系列(二)用户消息处理

Force.com是国际知名的云平台公司,成功配置好Force.com作为微信公开号的服务端后,接下来需要的任务是处理用户发送的消息.当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL,通常有的消息类型有文本信息.图片信息.语音信息.视频信息.地理位置信息以及链接信息.关于每种消息的XML数据包的详细结构,请参见http://mp.weixin.qq.com/wiki/index.php?title=%E6%8E%A5%E6%94%B6%E6%99%AE

C#微信开发之旅(十三):V2订单查询&amp;退款(完结)

订单查询 用处同V3订单查询,直接上代码: 1 /// <summary> 2 /// V2订单查询 3 /// </summary> 4 public void QueryOrder() 5 { 6 string orderNo = string.Empty; 7 8 WxPayModel model = WxPayModel.Create(orderNo); 9 OrderQueryMessage message = WeiXinHelper.OrderQuery(model.

微信开发H5十二人牛牛出租源码下载搭建

微信开发H5十二人牛牛出租源码下载搭建h5.fanshubbs.com联系Q1687054422不同于传统的手游商店下载模式,HTML5 手机网页游戏是可以直接运行在微信内置的浏览器里. 先上图,感知一下具体样子: 而我想分享的是我们在具体开发实现过程中,基于微信的Html5 WebApp需要去克服的一些坑:这个小游戏的基本规则是:限定用户每天刮书次数是2次 (自由刮一次和分享后再刮一次),每天都可刮奖为此,我们希望实现的思路首先是限定在只能使用微信中玩,实现代码如下:if (!HttpCont

微信开发——带参数二维码的使用

---恢复内容开始--- 最近做微信PC端网页微信相关功能的开发,从一个新手的角度来说,微信公众号的文档还是不好理解的,网上找的帖子大都也都基本上是复制微信公众平台上给的文档,开发微信带参数二维码过程中还是遇到不少坑的,在此把我的开发过程比较详细的记录下,希望对大家有所帮助. 我本次开发使用的是认证服务号. 1 接入 首先进入微信公众号 -> 基本配置 下面是基本配置的页面,在URL中填写服务器地址,这个地址就是接受微信推送事件的一个接口,我是使用thinkPHP框架开发的程序,在其中一个Mod

C#微信开发之旅(九):JSAPI支付(V3)(相关代码待补全)

微信开发遇到最复杂的就是支付了,无论V2还是V3.这篇文章将给出全套的V3版本JSAPI支付代码,包括预支付->支付->订单查询->通知->退款,其中前三步已经上线应用,退款只是简单测试了一下,大家要用的话需要谨慎... 一.预支付&支付 实际就是讲订单信息交给微信端,返回给我们一个预支付id(与V2app支付相似),支付时将预支付id交给微信处理.注意:预支付id 需存储,每个out_trade_no(我们自己的订单号)只能对应一个预支付id.代码奉上:(mvc demo

微信开发学习日记(二):3个案例

上次是调通了"消息来自微信请求"一个请求验证接口.    今天下午,正式进军微信开发,完成了3个案例的demo,测试通过. 上次,提到读了5本书,4本PHP描述的,一本Java描述的.个人专注Java开发7年了,更倾向于用Java,当然PHP也要立即着手深入学习了.今天好几个PHP的外包项目,感觉太麻烦,都拒绝了. Java的书,柳峰写的那本就非常好,至少可以用Good描述,Perfect的话,要看是否还有更多更优秀Java语言相关的微信书籍. 那本书的源码,网上都有,下载下来之后,全

C#微信开发之旅(三):基础类之WeiXinConst

开发过程中需要用的的公众号信息在这里配置,此外需要用到的Url信息无需更改. /// <summary> /// 微信 需要用到的Url.Json常量 /// </summary> public class WeiXinConst { #region Value Const /// <summary> /// 微信开发者 AppId /// </summary> public const string AppId = "你的AppId";