微信怎么js验证邮箱合法性js ticket 的合法性

微信此次开放JS接口,开放了一大批api权限,即使在未认证的订阅号也可以使用图像接口,音频接口,智能接口,地理位置,界面操作,微信扫一扫等功能。要知道:以前订阅号只能接受和被动回复用户消息而已。微信官方没有给出.net版本,有java,node,php和python,唯独没有.net版本,这是怎么了?本文就教你实现.net版本的微信JS-SDK权限签名生成算法。
这会大大激发了js前端开发人员的热情,可以做更多的事情,不用在向以前一样用破解微信的weixinbridge狼狈的苟活于人世了。我认为在这个js横行霸道的世界,微信早就应该这么做了。当年就是因为没有js的接口,在微信中无法获取用户的分享,导致用户体验极差,现在这个问题都解决了。但那是唯一的缺憾是没有完全开发分享接口,对于未认证的订阅号来说还是有些许不便。不过从微信最近启用的原创申明功能来说,对于未认证的公众号来说,若是开放了分享接口,是无法保护原创申明的。如果您想使用分享,就赶快认证吧。
二、业务逻辑
公众号在调用JS接口之前需要生成JS-SDK使用权限签名,这部分逻辑需要用户自己在服务端实现,比较不靠谱的是微信官方没有给出.net版本的demo.
有java,node,php和python,唯独没有.net版本,你没有看错。
好吧既然如此我们就自己实现了。
生成方法如下(一下摘自微信官方文档)
附录1-JS-SDK使用权限签名算法
jsapi_ticket
生成签名之前必须先了解一下jsapi_ticket,jsapi_ticket是公众号用于调用微信JS接口的临时票据。正常情况下,jsapi_ticket的有效期为7200秒,通过access_token来获取。由于获取jsapi_ticket的api调用次数非常有限,频繁刷新jsapi_ticket会导致api调用受限,影响自身业务,开发者必须在自己的服务全局缓存jsapi_ticket&。
参考以下文档获取access_token(有效期7200秒,开发者必须在自己的服务全局缓存access_token):../15/54ce45d8d30b6bfe95bc627.html
用第一步拿到的access_token 采用http GET方式请求获得jsapi_ticket(有效期7200秒,开发者必须在自己的服务全局缓存jsapi_ticket):https://api./cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi
成功返回如下JSON:
"errcode":0,
"errmsg":"ok",
"ticket":"bxLdikRXVbTPdHSM05e5u5sUoXNKd8-41ZO3MhKoyN5OfkWITDGgnr2fwJ0m9E8NYzWKVZvdVtaUgWvsdshFKA",
"expires_in":7200
获得jsapi_ticket之后,就可以生成JS-SDK权限验证的签名了。
签名生成规则如下:参与签名的字段包括noncestr(随机字符串), 有效的jsapi_ticket, timestamp(时间戳), url(当前网页的URL,不包含#及其后面部分) 。对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2&)拼接成字符串string1。这里需要注意的是所有参数名均为小写字符。对string1作sha1加密,字段名和字段值都采用原始值,不进行URL 转义。
即signature=sha1(string1)。 示例:
noncestr=Wm3WZYTPz0wzccnW
jsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg
timestamp=
url=http://mp.?params=value
步骤1. 对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2&)拼接成字符串string1:
jsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg&noncestr=Wm3WZYTPz0wzccnW&timestamp=&url=http://mp.?params=value
步骤2. 对string1进行sha1签名,得到signature:
0f9de62fce790f9a083d5c99e95740ceb90c27ed
签名用的noncestr和timestamp必须与wx.config中的nonceStr和timestamp相同。
签名用的url必须是调用JS接口页面的完整URL。
出于安全考虑,开发者必须在服务器端实现签名的逻辑。
三、代码实现
1.获取jsapi_ticket
// &summary&
/// 获取jsapi_ticket
/// jsapi_ticket是公众号用于调用微信JS接口的临时票据。
/// 正常情况下,jsapi_ticket的有效期为7200秒,通过access_token来获取。
/// 由于获取jsapi_ticket的api调用次数非常有限,频繁刷新jsapi_ticket会导致api调用受限,影响自身业务,开发者必须在自己的服务全局缓存jsapi_ticket 。
///本代码来自开源微信SDK项目:/night-king/weixinSDK
/// &/summary&
/// &param name="access_token"&BasicAPI获取的access_token,也可以通过TokenHelper获取&/param&
/// &returns&&/returns&
public static dynamic GetTickect(string access_token)
var url = string.Format("https://api./cgi-bin/ticket/getticket?access_token={0}&type=jsapi", access_token);
var client = new HttpClient();
var result = client.GetAsync(url).R
if (!result.IsSuccessStatusCode) return string.E
var jsTicket = DynamicJson.Parse(result.Content.ReadAsStringAsync().Result);
return jsT
2.签名算法
签名之前我们需要解决随机字符串和时间戳的问题,
2.1随机字符串生成算法
private static string[] strs = new string[]
"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z",
"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"
/// &summary&
/// 创建随机字符串
///本代码来自开源微信SDK项目:/night-king/weixinSDK
/// &/summary&
/// &returns&&/returns&
public static string CreatenNonce_str()
Random r = new Random();
var sb = new StringBuilder();
var length = strs.L
for (int i = 0; i & 15; i++)
sb.Append(strs[r.Next(length - 1)]);
return sb.ToString();
2.2&时间戳
时间戳的参考了这个:/Tools/unixtime.aspx
/// &summary&
/// 创建时间戳
///本代码来自开源微信SDK项目:/night-king/weixinSDK
/// &/summary&
/// &returns&&/returns&
public static long CreatenTimestamp()
return (DateTime.Now.ToUniversalTime().Ticks - 000000) / ;
2.3 签名算法如下:
/// &summary&
/// 签名算法
///本代码来自开源微信SDK项目:/night-king/weixinSDK
/// &/summary&
/// &param name="jsapi_ticket"&jsapi_ticket&/param&
/// &param name="noncestr"&随机字符串(必须与wx.config中的nonceStr相同)&/param&
/// &param name="timestamp"&时间戳(必须与wx.config中的timestamp相同)&/param&
/// &param name="url"&当前网页的URL,不包含#及其后面部分(必须是调用JS接口页面的完整URL)&/param&
/// &returns&&/returns&
public static string GetSignature(string jsapi_ticket, string noncestr, long timestamp, string url, out string string1)
var string1Builder = new StringBuilder();
string1Builder.Append("jsapi_ticket=").Append(jsapi_ticket).Append("&")
.Append("noncestr=").Append(noncestr).Append("&")
.Append("timestamp=").Append(timestamp).Append("&")
.Append("url=").Append(url.IndexOf("#") &= 0 ? url.Substring(0, url.IndexOf("#")) : url);
string1 = string1Builder.ToString();
return Util.Sha1(string1);
获取全部代码请点击:/night-king/weixinSDK/blob/master/Deepleo.Weixin.SDK/JSSDK/JSAPI.cs
在线演示:/jssdk或者直接扫描二维码在微信中查看:
说明:本代码来自开源微信SDK项目:/night-king/weixinSDK
以上就介绍了微信JS-SDK使用权限签名算法的服务端实现(.net版本),包括了方面的内容,希望对.NET教程有兴趣的朋友有所帮助。
本文网址链接:/article/detail_109469.html
上一篇: 下一篇:微信JS-SDK,获取jsapi_ticket时,一直报错40001错误。
微信JS-SDK,获取jsapi_ticket时,一直报错40001错误。
[摘要:微疑JS-SDK,猎取jsapi_ticket时,不停报错40001毛病。
找了良久的缘由,本来要求地点写错了,因为微疑企业号刚最先没有暂,网上的材料多数是"大众,"号的,企业号取"大众,"号申请jsapi_t]
微信JS-SDK,获取jsapi_ticket时,一直报错40001错误。
找了很久的原因,原来请求地址写错了,由于微信企业号刚开始不久,网上的资料大都是公众号的,企业号与公众号申请jsapi_ticket的地址是不一样的。
//企业号申请jsapi_ticket的地址
static String JSAPIURL = &https://qyapi./cgi-bin/get_jsapi_ticket?access_token=ACCESS_TOKEN&; &
//公众号申请jsapi_ticket的地址
static String JSAPIURL2 = &https://api./cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi&; &
扫二维码关注生活艺术杂志,分享生活中创意/艺术/窍门,点亮你我多彩的生活!
感谢关注 Ithao123JS频道,是专门为互联网人打造的学习交流平台,全面满足互联网人工作与学习需求,更多互联网资讯尽在 IThao123!
Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。
用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。
Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。
Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。
产品设计是互联网产品经理的核心能力,一个好的产品经理一定在产品设计方面有扎实的功底,本专题将从互联网产品设计的几个方面谈谈产品设计
随着国内互联网的发展,产品经理岗位需求大幅增加,在国内,从事产品工作的大部分岗位为产品经理,其实现实中,很多从事产品工作的岗位是不能称为产品经理,主要原因是对产品经理的职责不明确,那产品经理的职责有哪些,本专题将详细介绍产品经理的主要职责
IThao123周刊java微信开发(wechat4j)——支持微信JS-SDK的jsapi_ticket中控服务器
jsapi_ticket是使用js-sdk必须要的一个凭证,需要配置在js中。
jsapi_ticket获取
要获取jsapi_ticket可以使用如下的方法
jsapi_ticket = TokenProxy.jsApiTicket();
jsapi_ticket中控服务器
jsapi_ticket每日有一个次数限制,所以客户服务器不能每次是都去请求一个新的jsapi_ticket,每次请求之后,jsapi_ticket都有一个过期时间。因此微信平台建议你使用一个中控服务器来定时刷新jsapi_ticket,取得之后存起来不用再去请求jsapi_ticket,因为jsapi_ticket请求有次数限制。
这样处理只有有两个好处:
保证jsapi_ticket每日都不会超出访问限制,保证服务的正常。
提高服务的性能,不用每次发送业务请求之前都先发送一次jsapi_ticket获取请求。
wechat4j获取jsapi_ticket是通过jsapi_ticket的代理TokenProxy来获取,而此代理封装了jsapi_ticket的中控服务器。对jsapi_ticket的保存有两种方式,一种是内存保存,一种是持久化保存(数据库或者文件)。内存保存方式的中控服务器由wehcat4j实现,客户不做任何操作。如果客户要使用持久化保存,那么就需要自己去定义中控服务器。所以有如下两种中控服务器:
jsapi_ticket默认中控服务器
jsapi_ticket自定义中控服务器
默认中控服务器
wechat4j的默认中控服务器是内存模式,即将jsapi_ticket保存在内存中,直到过期的时候再去请求一个新的来替代。默认中控服务器对应的类是JsApiTicketMemServer。
优点:此模式的中控服务器有点是效率高,使用方便,客户不用关心。
缺点:无法支持多服务器的集群,如果多个服务器的时候,此方式将不被支持。
自定义中控服务器
如果你需要将jsapi_ticket保存在数据库或者文件中,那么就需要使用自定义的中控服务器。自定义的服务器需要客户自己完成,必须继承抽象类CustomerServer,完成其中的保存和查询方法即可,同时自定义的服务器是由定时器来驱动操作的,需要配置监听器。配置自定义jsapi_ticket服务器的详细步骤:
创建自己的服务器类,需要继承wechat4j的CustomerServer类,实现save和find方法,前者是将jsapi_ticket保存到数据库的操作,后者是从数据库中查询jsapi_ticket的方法,里面可以是一个sql操作之类的。
public class
CustomerJsApiTicketServer extends CustomerServer{
public String
String accessToken =
//执行数据库操作
//&&&&&&&&&&&&&&&&&&
String sql = "select cfgValue from cfg where cfg.cfgKey =
'jsapi_ticket'";
//&&&&&&&&&&&&&&&&&&
accessToken = DBUtil.query(sql);
return accessT
public boolean
save(Token jsapiTicket) {
//如果没有需要插入,如果有的就更新,假设已经有了数据库配置项
//&&&&&&&&&&&&&&&&&&
String sql = "update cfg set cfg.cfgValue=" +
jsapiTicket.getToken() +
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
" where cfg.cfgKey= 'jsapi_ticket'";
//&&&&&&&&&&&&&&&&&&
DBUtil.execute(sql);
在wechat4j.properties配置文件中配置wechat.ticket.jsapi.server.class项,配上刚才新建的服务器类的路径,示例如下:
&wechat.ticket.jsapi.server.class=com.sample.wechat.CustomerJsApiTicketServer
在web.xml中配置wechat4j的监听器。代码如下:
& listener &
listener-class &org.sword.wechat4j.token.TokenListener&
/listener-class &
& /listener &
通过如上三步就能配置好自己的数据库jsapi_ticket服务器。这样由中控服务器定时去刷新jsapi_ticket,然后保存到数据库中,业务逻辑中要使用jsapi_ticket的时候,是通过代理去数据库拿到数据。定时刷新任务会提前200秒运行,防止到有效期之后运行过程中新jsapi_ticket没有取得旧的jsapi_ticket过期的情况发生。
wechat4j框架官方文档:&
wechat4j技术交流QQ群:&
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。微信开发之JSSDK编辑:freeyii点击数:2738关键字词:jssdk 微信API 微信分享其他文章最新文章点击排行最近访客
Copyright (C)
音乐之旅&&&&写歌的人不是我 - 《音为爱》&&&&我喜欢 - 梁静茹&&&&蓝莲花 - 汪峰&&&&淋雨一直走 - 张韶涵&&&&怒放的生命 - 汪峰&&&&兰花指 - 布吉岛&&&&空城 - 杨坤&&&&下雨天 - 南拳妈妈&&&&落雪 - 德国&&&&测试音乐 - 不知道}

我要回帖

更多关于 验证json合法性 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信