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();
+ string timestamp = Convert.ToString(ConvertDateTimeInt(DateTime.Now));
+ string nonceStr = createNonceStr();
+
+ 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;
+ }
+
+
+
+
private
string getJsApiTicket()
+ {
+ string 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 =
"https://api.weixin.qq.com/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;
+ }
+
+
+
+
private
string getAccessToken()
+ {
+
+ 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 =
"https://api.weixin.qq.com/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;
+ }
+
+
+
+
private
string httpGet(string url)
+ {
+
try
+ {
+
var
MyWebClient =
new
WebClient();
+ MyWebClient.Credentials = CredentialCache.DefaultCredentials;
+ Byte[] pageData = MyWebClient.DownloadData(url);
+ string pageHtml = System.Text.Encoding.Default.GetString(pageData);
+
+
return
pageHtml;
+ }
+
catch
(WebException webEx)
+ {
+ Console.WriteLine(webEx.Message.ToString());
+
return
null;
+ }
+ }
+
+
+
+
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;
+ }
+
+
+
+
+
+
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();
+ }
+
+
+
+
+
+
+
+
+
+
private
int ConvertDateTimeInt(System.DateTime time)
+ {
+ int intResult = 0;
+ System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(
new
System.DateTime(1970, 1, 1));
+ intResult = Convert.ToInt32((time - startTime).TotalSeconds);
+
return
intResult;
+ }
+
+
+ }
+
+
+}
access_token.json
{
"access_token"
:
"4H14BVCUrAxxxxxxxxxxxxWeLu-zKETaBYqsoKFjsHZDc3xOwc-m43WDw2HjzxEkng2nC7iJuHydNt5PqRDY7HCoAU4lmuaPoYsIQHdW9kA"
,
"expire_time"
:1428599121}
access_token.json
{
"jsapi_ticket"
:
"bxLdikRXVbTPdHSM05e5u1wgoccccccccccccccccccccccccccccc11FFzYsiqbXZN0SDGN6Dnksnt2Q"
,
"expire_time"
:1428599122}
暂时没有评论,来抢沙发吧~