有时间再整理吧

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO;
using Newtonsoft.Json;
using System.Net;
using System.Runtime.Serialization.Formatters.Binary;
using System.Text;
using System.Security.Cryptography;
using System.Data;
using Common; namespace LingDing.test
{
/// <summary>
/// WXJSSDK 的摘要说明
/// </summary>
public class WXJSSDK
{
private string appId;
private string appSecret;
private DataTable DT; 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(); // 这里参数的顺序要按照 key 值 ASCII 码升序排序
string rawstring = "jsapi_ticket=" + jsapiTicket + "&noncestr=" + nonceStr + "&timestamp=" + timestamp + "&url=" + url + ""; string signature = SHA1_Hash(rawstring); System.Collections.Hashtable 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 = ;
string chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
string str = "";
Random rad = new Random();
for (int i = ; i < length; i++)
{
str += chars.Substring(rad.Next(, chars.Length - ), );
}
return str;
} //得到ticket 如果文件里时间 超时则重新获取
private string getJsApiTicket()
{
//这里我从数据库读取
DT = new DAL.FreeBase().TranSQLGetTable("select jsapi_ticket,ticket_expires from tokens where ID=1");
int expire_time = (int)DT.Rows[]["ticket_expires"];
string ticket = DT.Rows[]["jsapi_ticket"].ToString();
string accessToken = GetTokenName(); //getAccessToken();//获取系统的全局token
if (expire_time < ConvertDateTimeInt(DateTime.Now))
{
string url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=" + accessToken + "";
Jsapi api = JsonConvert.DeserializeObject<Jsapi>(httpGet(url));
ticket = api.ticket;
if (ticket != "")
{
expire_time = ConvertDateTimeInt(DateTime.Now) + ;
//存入数据库操作
new DAL.FreeBase().TranSQL("update tokens set jsapi_ticket='" + ticket + "',ticket_expires='" + expire_time + "' where ID=1");
}
}
return ticket;
} string GetTokenName()//得到tokenname
{
//string projectname = "类名:" + System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.FullName;
string projectname = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.FullName;
string classname = projectname.Substring(projectname.IndexOf('.') + );
string tokenname = GetConfig.gettoken(classname);
return tokenname;
}
////得到accesstoken 如果文件里时间 超时则重新获取
//private string getAccessToken()
//{
// // access_token 应该全局存储与更新,以下代码以写入到文件中做示例
// string access_token = "";
// string path = HttpContext.Current.Server.MapPath(@"/weixin/access_token.json");
// FileStream file = new FileStream(path, FileMode.Open);
// var serializer = new DataContractJsonSerializer(typeof(AccToken));
// AccToken readJSTicket = (AccToken)serializer.ReadObject(file);
// file.Close();
// if (readJSTicket.expires_in < ConvertDateTimeInt(DateTime.Now))
// {
// string url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appId + "&secret=" + appSecret + ""; // AccToken iden = Desrialize<AccToken>(new AccToken(), httpGet(url)); // access_token = iden.access_token;
// if (access_token != "")
// {
// iden.expires_in = ConvertDateTimeInt(DateTime.Now) + 7000;
// iden.access_token = access_token; // string json = Serialize<AccToken>(iden);
// StreamWriterMetod(json, path);
// }
// }
// else
// {
// access_token = readJSTicket.access_token;
// }
// return access_token;
//} //发起一个http请球,返回值
private string httpGet(string url)
{
try
{
WebClient MyWebClient = new WebClient();
MyWebClient.Credentials = CredentialCache.DefaultCredentials;//获取或设置用于向Internet资源的请求进行身份验证的网络凭据
Byte[] pageData = MyWebClient.DownloadData(url); //从指定网站下载数据
string pageHtml = System.Text.Encoding.Default.GetString(pageData); //如果获取网站页面采用的是GB2312,则使用这句 return pageHtml;
}
catch (WebException webEx)
{
Console.WriteLine(webEx.Message.ToString());
return null;
}
} //SHA1哈希加密算法
public 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)
{
try
{
FileStream fsFile = new FileStream(patch, FileMode.OpenOrCreate);
StreamWriter swWriter = new StreamWriter(fsFile);
swWriter.WriteLine(str);
swWriter.Close();
}
catch (Exception e)
{
throw e;
}
} /// <summary>
/// 将c# DateTime时间格式转换为Unix时间戳格式
/// </summary>
/// <param name="time">时间</param>
/// <returns>double</returns>
public int ConvertDateTimeInt(System.DateTime time)
{
int intResult = ;
System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(, , ));
intResult = Convert.ToInt32((time - startTime).TotalSeconds);
return intResult;
}
}
//创建Json序列化 及反序列化类目
#region
//创建JSon类 保存文件 jsapi_ticket.json
public class JSTicket
{ public string jsapi_ticket { get; set; } public double expire_time { get; set; }
}
//创建 JSon类 保存文件 access_token.json public class AccToken
{ public string access_token { get; set; } public double expires_in { get; set; }
} //创建从微信返回结果的一个类 用于获取ticket public class Jsapi
{ public int errcode { get; set; } public string errmsg { get; set; } public string ticket { get; set; } public string expires_in { get; set; }
}
#endregion
}

asp.net 微信JsSDK的更多相关文章

  1. asp.net mvc 如何调用微信jssdk接口:分享到微信朋友(圈)| 分享到qq空间

    如何在asp.net mvc 项目里, 调用微信jssdk接口,现实功能: 分享到微信朋友(圈)| 分享到qq空间 1 创建一个Action,准备一些数据,初始化数据(签名): /// <sum ...

  2. ASP.NET MVC 微信JS-SDK认证

    layout: post title: ASP.NET MVC 微信JS-SDK认证 category: .net date: 2016-11-01 00:00:00 tags: .net javas ...

  3. ASP.NET MVC做的微信WEBAPP中调用微信JSSDK扫一扫

    今天做一个项目,是在微信上用的,微信WEB APP,里面用到了调用手机摄像头扫一扫二维码的功能,记得以前某个项目里写有的,但是找不到之前那个项目源码了,想复制粘贴也复制不了了,只好对着微信的那个开发文 ...

  4. C#开发微信门户及应用(39)--使用微信JSSDK实现签到的功能

    随着微信开逐步开放更多JSSDK的接口,我们可以利用自定义网页的方式来调用更多微信的接口,实现我们更加丰富的界面功能和效果,例如我们可以在页面中调用各种手机的硬件来获取信息,如摄像头拍照,GPS信息. ...

  5. 微信JS-SDK坐标位置转换为百度地图坐标

    微信JS-SDK开发过程中,使用getLocation获取坐标位置,如何将微信获取的坐标直接应用到百度地图中,显示以下效果: 说明:红色图标是从微信转换过来的位置,蓝色图标是周边位置.首先从微信开发流 ...

  6. 微信JS-SDK说明文档及常见问题处理

    概述 微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包. 通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照.选图.语音.位置等手机系统的能力,同时可以直接使用微 ...

  7. 微信JS-SDK文档

    微信JS SDK 调用详解   微信JS SDK 调用详解... 1 概述... 2 使用说明... 2 接口调用说明... 4 基础接口... 4 判断当前客户端版本是否支持指定JS接口... 5 ...

  8. 前端工程师如何快速的开发一个微信JSSDK应用

    亲们,订阅号出来已经很久了,作为一个前端工程师或者全栈工程师,你是不是错过了什么?大概许多攻城狮同砚还没有反应过来订阅号怎么回事,就马上要被微信的应用号秀一脸了.在应用号还没有正式出来之前,我们赶紧一 ...

  9. 微信公众平台开发 微信JSSDK开发

    根据微信开发文档步骤如下: 1.先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”. JS接口安全域名设置 mi.com(前面不用带www/http,域名必须备案过) 2.引 ...

随机推荐

  1. VSTO:使用C#开发Excel、Word【14】

    操作workbooks集合可从Application对象的Workbooks属性中获取的Workbooks集合包含当前在应用程序中打开的Workbook对象的集合. 它还具有用于管理开放工作簿,创建新 ...

  2. go web framework gin 启动流程分析

    最主要的package : gin 最主要的struct: Engine Engine 是整个framework的实例,它包含了muxer, middleware, configuration set ...

  3. C语言里有没有像C++里面的sort函数一样的函数?有!

    C 库函数 - qsort() 描述 C 库函数 void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void ...

  4. Makefile 中 -rpath -rpath-link

    -rpath和-rpath-link 假设有3个文件,在同一目录下,有这样的依赖关系 test->liba.so->libd.so 如果编译test的时候这样写 gcc test.c –l ...

  5. jQuery-2.DOM---创建节点及节点属性

    DOM创建节点及节点属性 通过JavaScript可以很方便的获取DOM节点,从而进行一系列的DOM操作.但实际上一般开发者都习惯性的先定义好HTML结构,但这样就非常不灵活了. 试想下这样的情况:如 ...

  6. js 拷贝clone

    array Array.prototype.clone=function(){ return this.slice(0); } 对象 var o = {a: [1]}; //浅拷贝 var o1 = ...

  7. Centos6.5修改镜像为国内的阿里云源

    第一步:备份你的原镜像文件,以免出错后可以恢复. mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.back ...

  8. Python全栈之路----函数----返回值

    函数外部的代码想要获取函数的执行结果,就可以在函数里用return语句,把结果返回. def stu_register(name,age,course='PY',country='CN'): prin ...

  9. (33)关于django中路由自带的admin + 建表关系的讲解

    admin是django自带的后台管理,在初始的时候就默认配置好了 当输入ip地址的时候后面跟admin,就会登陆管理员的后台,这个是django自带的,可以快速管理数据表(增删改查) PS:ip地址 ...

  10. Python小练习(二)

    按照下面的要求实现对列表的操作:       1)产生一个列表,其中有40个元素,每个元素是0到100的一个随机整数       2)如果这个列表中的数据代表着某个班级40人的分数,请计算成绩低于平均 ...