微信开发记录3

微信公众号开发记录(3)

经过前两个步骤的配置,现在要获取AccessToken

注意:access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。

 

参考文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140183

获取AccessToken 的代码示例:

复制代码

 1  public class WxAccessToken
 2     {
 3         #region 定义常量  属性  微信开发平台申请时候填写的内容
 4         /// <summary>
 5         /// 申请时候的token 
 6         /// </summary>
 7         public const string Token = "申请时填的Token";
 8 
 9         #endregion
10 
11 
12         //全局访问票据【所有借口都会用到】
13         private static string accessToken = string.Empty;
14 
15         //过期时间【微信默认7200】,为了让程序更稳定,设置为7100s
16         private static int expireTime = 0;
17 
18         public static string AccessToken
19         {
20             get
21             {
22                 //如果accessToken 已经存在并且没有过期 直接返回,否则重新获取【注意借口获取限制次数】
23                 //获取当前时间
24                 int currentTimeStamp = TimeStampUtils.ConvertDateTimeToInt(DateTime.Now);
25                 if (string.IsNullOrEmpty(accessToken) || currentTimeStamp > expireTime)
26                 {
27                     /*获取 AccessToken步骤
28                      * 参考 微信开发文档https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140183
29                      * 1.发起http Get 请求
30                      *       https请求方式: GEThttps://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
31                      *       封装公共类来完成
32                      *       
33                      * 2.解析获取到的结果,如果返回结果中包含“access_token”, 使用 Newtonsoft.Json 转换为 AccessTokenResult 实例,否则请求结果失败。
34                      * 3.设置超时时间expireTime
35                      * **/
36 
37                     string resultStr = HttpUtils.HttpGet(WeiXinApiUrl.GetAccessTokenURL, WeiXinApiUrl.GetAccessTokenParams);
38                     if (resultStr.IndexOf("access_token") > -1)
39                     {
40                         AccessTokenResult tokenResult = JsonConvert.DeserializeObject<AccessTokenResult>(resultStr);
41                         accessToken = tokenResult.access_token;
42                         expireTime = currentTimeStamp + tokenResult.expires_in - 100;
43                     }
44                     else
45                     {
46                         ///说明请求失败
47                     }
48 
49 
50                 }
51                 return accessToken;
52             }
53 
54         }
55 
56     }

复制代码

复制代码

 1 /// <summary>
 2     /// 时间处理工具
 3     /// </summary>
 4     public static class TimeStampUtils
 5     {
 6         /// <summary>
 7         /// 时间戳转换成时间
 8         /// </summary>
 9         /// <param name="timeStamp"></param>
10         /// <returns></returns>
11         public static DateTime GetTime(string timeStamp)
12         {
13             DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); // 当地时区
14             long lTime = long.Parse(timeStamp + "0000000");
15             TimeSpan ts = new TimeSpan(lTime);
16             //long timeStamp = (long)(DateTime.Now - startTime).TotalMilliseconds; // 相差毫秒数
17             return startTime.Add(ts);
18 
19         }
20 
21         /// <summary>
22         /// 强制将时间转换成时间戳
23         /// </summary>
24         /// <param name="time"></param>
25         /// <returns></returns>
26         public static int ConvertDateTimeToInt(DateTime time)
27         {
28             DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); // 当地时区
29 
30             return (int)(time - startTime).TotalSeconds;
31 
32         }
33 
34 
35     }

复制代码

复制代码

 1  public static class HttpUtils
 2     {
 3 
 4         /// <summary>
 5         /// 模拟Post请求
 6         /// </summary>
 7         /// <param name="url">请求的地址</param>
 8         /// <param name="postDataStr">请求参数</param>
 9         /// <returns></returns>
10         public static string HttpPost(string url, string postDataStr)
11         {
12             ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback((a, b, c, d) => true);
13             //创建HttpRequest 请求对象
14             HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
15             //请求的方法【post/get】
16             request.Method = "POST";
17             //Content-Type用于说明request body的编码格式的
18             //Content-Type 被指定为 application/x-www-form-urlencoded;提交的数据按照 key1=val1&key2=val2 的方式进行编码
19             request.ContentType = "application/x-www-form-urlencoded";
20             //客户端发送的内容的长度(以字节为单位)
21             //request.ContentLength = Encoding.UTF8.GetByteCount(postDataStr);
22 
23             //request.CookieContainer = cookie;
24             //把内容写的入到请求流中
25             Stream myStream = request.GetRequestStream();
26             StreamWriter myStreamWriter = new StreamWriter(myStream);
27             myStreamWriter.Write(postDataStr);
28             myStreamWriter.Close();
29             //response.Cookies = cookie.GetCookies(response.ResponseUri);
30             HttpWebResponse response = (HttpWebResponse)request.GetResponse();
31 
32             Stream responseStream = response.GetResponseStream();
33             StreamReader streamReader = new StreamReader(responseStream, Encoding.UTF8);
34             string result = streamReader.ReadToEnd();
35             streamReader.Close();
36             responseStream.Close();
37             return result;
38 
39         }
40 
41 
42         /// <summary>
43         /// 模拟Http GET 请求
44         /// </summary>
45         /// <param name="Url">请求地址</param>
46         /// <param name="postDataStr">请求参数</param>
47         /// <returns></returns>
48         public static string HttpGet(string Url, string postDataStr)
49         {
50             HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url + (postDataStr == "" ? "" : "?") + postDataStr);
51             request.Method = "GET";
52             request.ContentType = "text/html;charset=UTF-8";
53 
54             HttpWebResponse response = (HttpWebResponse)request.GetResponse();
55             Stream myResponseStream = response.GetResponseStream();
56             StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.UTF8);
57             string retString = myStreamReader.ReadToEnd();
58             myStreamReader.Close();
59             myResponseStream.Close();
60 
61             return retString;
62         }
63     }

复制代码

复制代码

 1  public static class WeiXinApiUrl
 2     {
 3 
 4         #region 公众号凭证
 5 
 6         /// <summary>
 7         /// appID
 8         /// </summary>
 9         public const string AppId = "AppID";
10 
11         /// <summary>
12         /// appsecret  开发秘钥
13         /// </summary>
14         public const string Secret = "appsecret  ";
15         #endregion
16 
17         #region 获取AccessToken 相关配置
18 
19 
20         /// <summary>
21         /// 获取AccessToken的URL
22         /// </summary>
23         public const string GetAccessTokenURL = "https://api.weixin.qq.com/cgi-bin/token";
24 
25         /// <summary>
26         /// 获取AccessToken的参数格式化字符串
27         /// </summary>
28         public const string GetAccessTokenParamFromat = "grant_type=client_credential&appid={0}&secret={1}";
29 
30         /// <summary>
31         /// 获取AccessToken 的参数
32         /// </summary>
33         public static string GetAccessTokenParams
34         {
35             get
36             {
37                 return string.Format(GetAccessTokenParamFromat, AppId, Secret);
38             }
39         }
40 
41 
42         #endregion
43 
44         #region 创建自定义菜单的接口配置
45 
46         /// <summary>
47         /// 自定义菜单的接口URL 的地址
48         /// </summary>
49         public const string CreateCustomMenuURL = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token={0}";
50 
51         /// <summary>
52         /// 自定义菜单接口 的参数格式化字符串 
53         /// </summary>
54         public const string CreateCustomMenuParamFromat = "access_token={0}";
55 
56         /// <summary>
57         /// 获取 创建自定义菜单 接口的参数
58         /// </summary>
59         /// <param name="accessToken"></param>
60         /// <returns></returns>
61         public static string GetCreateCustomMenuParam(string accessToken)
62         {
63             return string.Format(CreateCustomMenuURL, accessToken);
64         }
65 
66         #endregion
67     }

复制代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值