版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】微信开发-ACCESSTOKEN过期失效怎么办
这篇文章主要介绍微信开发-ACCESSTOKEN过期失效怎么办,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!微信开发-ACCESSTOKEN过期失效解决方案起因:因为access_token的重要性,开发过微信的都知道,但是他有自己的生命周期,官方解释为:"有效期为7200秒",一天调用2000次。流量一高,就over了,没办法,龙哥不帮我们解决问题,我们就要自己解决,不能等死。解决思路很简单:建立公共accesstoken数据,有效期内不重新创建access_token。解决方案:1、微信类库:有效期内直接读取accesstoken数据文件中的json数据,过期失效,重新获取并创建新的accesstoken数据文件2、数据文件:存放有效的accesstoken数据,具体有:access_token.json和jsapi_ticket.json核心代码如下:Index:
wxjsSDK.cs
===================================================================
wxjsSDK.cs (revision
0)
+++
wxjsSDK.cs (revision
1)
@@
-0,0
+1,209
@@
+using
System;
+using
System.Collections.Generic;
+using
System.Web;
+using
System.IO;
+using
System.Security.Cryptography;
+using
System.Runtime.Serialization.Json;
+using
System.Runtime.Serialization;
+using
System.Net;
+using
System.Runtime.Serialization.Formatters.Binary;
+using
System.Text;
+
+namespace
JR.Common
+{
+
public
class
wxjsSDK
+
{
+
private
string
appId;
+
private
string
appSecret;
+
+
+
public
wxjsSDK(string
appId,
string
appSecret)
+
{
+
this.appId
=
appId;
+
this.appSecret
=
appSecret;
+
}
+
+
+
+
//得到数据包,返回使用页面
+
public
System.Collections.Hashtable
getSignPackage()
+
{
+
string
jsapiTicket
=
getJsApiTicket();
+
string
url
=
HttpContext.Current.Request.Url.ToString();
//"http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
+
string
timestamp
=
Convert.ToString(ConvertDateTimeInt(DateTime.Now));
+
string
nonceStr
=
createNonceStr();
+
//
这里参数的顺序要按照
key
值
ASCII
码升序排序
+
string
rawstring
=
"jsapi_ticket="
+
jsapiTicket
+
"&noncestr="
+
nonceStr
+
"×tamp="
+
timestamp
+
"&url="
+
url
+
"";
+
string
signature
=
SHA1_Hash(rawstring);
+
var
signPackage
=
new
System.Collections.Hashtable();
+
signPackage.Add("appId",
appId);
+
signPackage.Add("nonceStr",
nonceStr);
+
signPackage.Add("timestamp",
timestamp);
+
signPackage.Add("url",
url);
+
signPackage.Add("signature",
signature);
+
signPackage.Add("rawString",
rawstring);
+
return
signPackage;
+
}
+
+
+
//创建随机字符串
+
private
string
createNonceStr()
+
{
+
int
length
=
16;
+
string
chars
=
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
+
string
str
=
"";
+
var
rad
=
new
Random();
+
for
(int
i
=
0;
i
<
length;
i++)
+
{
+
str
+=
chars.Substring(rad.Next(0,
chars.Length
-
1),
1);
+
}
+
return
str;
+
}
+
+
+
//得到ticket
如果文件里时间
超时则重新获取
+
private
string
getJsApiTicket()
+
{
+
string
ticket
=
"";
+
//
jsapi_ticket
应该全局存储与更新,以下代码以写入到文件中做示例
+
string
path
=
HttpContext.Current.Server.MapPath(@"/log/jssdk/jsapi_ticket.json");
+
if
(!File.Exists(path))
+
{
+
File.Create(path).Close();
+
}
+
StreamReader
sr
=
new
StreamReader(path,
System.Text.Encoding.Default);
+
string
filecontent
=
sr.ReadToEnd();
+
CommonJsonModel
jsonModel
=
null;
+
if
(!string.IsNullOrEmpty(filecontent))
+
{
+
jsonModel
=
new
CommonJsonModel(filecontent);
+
}
+
sr.Close();
+
sr.Dispose();
+
if
(jsonModel
==
null
||
int.Parse(jsonModel.GetValue("expires_in"))
<
ConvertDateTimeInt(DateTime.Now))
+
{
+
string
accessToken
=
getAccessToken();
+
string
url
=
"/cgi-bin/ticket/getticket?type=jsapi&access_token="
+
accessToken;
+
jsonModel
=
new
CommonJsonModel(httpGet(url));
+
ticket
=
jsonModel.GetValue("ticket");
+
if
(ticket
!=
"")
+
{
+
string
json
=
"{\"ticket\":\""
+
ticket
+
"\",\"expires_in\":"
+
(ConvertDateTimeInt(DateTime.Now)
+
7000)
+
"}";
+
StreamWriterMetod(json,
path);
+
}
+
}
+
else
+
{
+
ticket
=
jsonModel.GetValue("ticket");
+
}
+
return
ticket;
+
}
+
+
+
//得到accesstoken
如果文件里时间
超时则重新获取
+
private
string
getAccessToken()
+
{
+
//
access_token
应该全局存储与更新,以下代码以写入到文件中做示例
+
string
access_token
=
"";
+
string
path
=
HttpContext.Current.Server.MapPath(@"/log/jssdk/access_token.json");
+
if
(!File.Exists(path))
+
{
+
File.Create(path).Close();
+
}
+
StreamReader
sr
=
new
StreamReader(path,
System.Text.Encoding.Default);
+
string
filecontent
=
sr.ReadToEnd();
+
CommonJsonModel
jsonModel
=
null;
+
if
(!string.IsNullOrEmpty(filecontent))
+
{
+
jsonModel
=
new
CommonJsonModel(filecontent);
+
}
+
sr.Close();
+
sr.Dispose();
+
if
(jsonModel
==
null
||
int.Parse(jsonModel.GetValue("expires_in"))
<
ConvertDateTimeInt(DateTime.Now))
+
{
+
string
url
=
"/cgi-bin/token?grant_type=client_credential&appid="
+
appId
+
+
"&secret="
+
appSecret
+
"";
+
jsonModel
=
new
CommonJsonModel(httpGet(url));
+
access_token
=
jsonModel.GetValue("access_token");
+
if
(access_token
!=
"")
+
{
+
string
json
=
"{\"access_token\":\""
+
access_token
+
"\",\"expires_in\":"
+
(ConvertDateTimeInt(DateTime.Now)
+
7000)
+
"}";
+
StreamWriterMetod(json,
path);
+
}
+
}
+
else
+
{
+
access_token
=
jsonModel.GetValue("access_token");
+
}
+
return
access_token;
+
}
+
+
+
//发起一个http请球,返回值
+
private
string
httpGet(string
url)
+
{
+
try
+
{
+
var
MyWebClient
=
new
WebClient();
+
MyWebClient.Credentials
=
CredentialCache.DefaultCredentials;
//获取或设置用于向Internet资源的请求进行身份验证的网络凭据
+
Byte[]
pageData
=
MyWebClient.DownloadData(url);
//从指定网站下载数据
+
string
pageHtml
=
System.Text.Encoding.Default.GetString(pageData);//如果获取网站页面采用的是GB2312,则使用这句
+
//string
pageHtml
=
Encoding.UTF8.GetString(pageData);
//如果获取网站页面采用的是UTF-8,则使用这句
+
return
pageHtml;
+
}
+
catch
(WebException
webEx)
+
{
+
Console.WriteLine(webEx.Message.ToString());
+
return
null;
+
}
+
}
+
+
+
//SHA1哈希加密算法
+
private
string
SHA1_Hash(string
str_sha1_in)
+
{
+
SHA1
sha1
=
new
SHA1CryptoServiceProvider();
+
byte[]
bytes_sha1_in
=
System.Text.UTF8Encoding.Default.GetBytes(str_sha1_in);
+
byte[]
bytes_sha1_out
=
sha1.ComputeHash(bytes_sha1_in);
+
string
str_sha1_out
=
BitConverter.ToString(bytes_sha1_out);
+
str_sha1_out
=
str_sha1_out.Replace("-",
"").ToLower();
+
return
str_sha1_out;
+
}
+
+
+
///
<summary>
+
///
StreamWriter写入文件方法
+
///
</summary>
+
private
void
StreamWriterMetod(string
str,
string
patch)
+
{
+
FileStream
stream
=
new
FileStream(patch,
FileMode.OpenOrCreate,
FileAccess.Write,
FileShare.Delete
|
FileShare.ReadWrite);
+
StreamWriter
writer
=
new
StreamWriter(stream);
+
writer.WriteLine(str);
+
stream.Flush();
+
writer.Close();
+
stream.Close();
+
stream.Dispose();
+
writer.Dispose();
+
}
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年未来教室:《拿来主义》教学课件的智能化实践
- 2024年人力资源管理教案升级指南
- 《岛》读后感:2024年社会形态的演变
- 2024年PCCAD软件升级培训-赋能创造力拓展想象边界
- 河北省秦皇岛市(2024年-2025年小学五年级语文)人教版综合练习(上学期)试卷及答案
- 科目二五项记忆口诀表-驾考实操
- 创意与学术的碰撞:《孔乙己》探究
- 2024年春季服装构思原理探索
- 面向2024:《黄河落日》教学课件升级策略
- 2019公路检验工程师桥梁隧道工程章节试题:隧道病害与养护含答案
- 民宿经济效益和社会效益分析报告
- 33 《鱼我所欲也》对比阅读-2024-2025中考语文文言文阅读专项训练(含答案)
- 2024发展对象培训班考试试题与答案
- 乳腺癌术后出血的临床观察与护理干预
- 医疗肺结节科普宣教课件
- 2018风险管理指南中文版ISO31000
- 心电图操作技能培训
- 2024下半年江苏苏州城市学院招聘管理岗位工作人员27人历年公开引进高层次人才和急需紧缺人才笔试参考题库(共500题)答案详解版
- 学校饮用水自查表
- SYT 6739-2021 石油钻井参数监测仪技术条件-PDF解密
- 日本国家概况历年试题及答案
评论
0/150
提交评论