有时间再整理吧

 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. Van Emde Boas Tree

    van Emde Boas trees 支持所有优先级优先级队列的操作,并且巧妙的是它对于SEARCH, INSERT,DELETE,MINIMUM,MAXMUN,SUCCESSOR,和PREDECE ...

  2. Page 对象详解

    Page 对象 由于网页编译后所创建的类由Page派生而来,因此网页可以直接使用Page对象的属性.方法和事件. Page对象的常用属性 1.IsPostBack(bool类型) 获取一个值,该值指示 ...

  3. centos7 ssh连接慢

    指的是连接到centos7,输入密码后要等很久才会返回.之前很多人遇到的问题都是由于/etc/ssh/sshd_config的UseDNS配置项和GSSAPIAuthentication配置项引起的, ...

  4. html(二)常见符号

    HTML当中的常见实体内容:

  5. Itellij Idea全局搜索

    Ctrl+N按名字搜索类   1 相当于eclipse的ctrl+shift+R,输入类名可以定位到这个类文件 2 就像idea在其它的搜索部分的表现一样,搜索类名也能对你所要搜索的内容多个部分进行匹 ...

  6. spring IOC 和AOP 方面

    spring 的2大核心 是Ioc 和 aop  spring的依赖注入:在程序运行期间,由外部容器动态的将依赖对象注入到组件中  IOC: 实例化spring容器的二种方法 第一种:在类路径下寻找配 ...

  7. keepalived自动安装脚本

    #!/bin/bash tar xf keepalived-1.1.17.tar.gz cd keepalived-1.1.17 yum -y install openssl-* kernel-dev ...

  8. JS 点击复制

    一.原理分析 浏览器提供了 copy 命令 ,可以复制选中的内容 document.execCommand("copy") 如果是输入框,可以通过 select() 方法,选中输入 ...

  9. Fabric的@runs_once的理解

    1:runs_once的用法,一直没理解,我看网上都是说:“函数修饰符,标识的函数只会执行一次,不受多台主机影响”     实在没理解,然后看了一下官方文档,这样解释     举个例子: #!/usr ...

  10. 论文阅读笔记:【MDNet】

    [MDNET]: H Nam, B Han. Learning multi-domain convolutional neural networks for visual tracking[C]. / ...