生成JS-SDK权限验证的签名

获取signature(签名)首先要获得

1、#获得jsapi_ticket

2、#获取当前页面的url

  #获取当前页面的url
  url="{}://{}{}".format(self.request.protocol,self.request.host,self.request.uri)

3、#获取timestamp(时间戳)

  #获取timestamp(时间戳)
  timestamp = int(time.time())

4、#获取noncestr(随机字符串)

  #获取noncestr(随机字符串)
  nonceStr = self.createNonceStr()(见下函数)

5、# 这里参数的顺序要按照 key 值 ASCII 码升序排序
string = "jsapi_ticket={}&noncestr={}&timestamp={}&url={}".format(jsapiTicket,nonceStr,timestamp,url)

6、#得到signature(用sha1加密)
signature = hashlib.sha1(string).hexdigest();

1、获得jsapi_ticket要先获取access_token(不再细说)

然后

def getJsApiTicket(self):
     #获得jsapi_ticket
  #获得jsapi_ticket之后,就可以生成JS-SDK权限验证的签名了
  import urllib2
  # jsapi_ticket 应该全局存储与更新,以下代码以写入到文件中做示例
  #cookie('ticket',null);

  #获取access_token
  accessToken = self.accesstokens()
  # 如果是企业号用以下 URL 获取 ticket
  # $url = "https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token=$accessToken";
  #获取jsapi_ticket
  url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={}&type=jsapi".format(accessToken)

  req = urllib2.Request(url)
  res_data = urllib2.urlopen(req)
  res = res_data.read()
  res=json_decode(res)

  return str(res['ticket'])

4、#获取noncestr(随机字符串)

def createNonceStr(self,length = 16):
#获取noncestr(随机字符串)
import random
chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
str = "";
for i in range(0,16):
str += chars[random.randint(0, len(chars)-1):random.randint(0, len(chars)-1)+1]
# for ($i = 0; $i < $length; $i++) {
# $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
# }
return str;

后台总代码整理为:

def index(self):
"""
知识中心
:return:
"""
id = self.get_argument('id','')
getSignPackage=self.getSignPackage()
self.assign('getSignPackage',getSignPackage)
self.display('knowledge/index.html')

def getSignPackage(self) :
import hashlib
#获得jsapi_ticket
jsapiTicket = self.getJsApiTicket() # 注意 URL 一定要动态获取,不能 hardcode.
# protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
# $url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
#获取当前页面的url
url="{}://{}{}".format(self.request.protocol,self.request.host,self.request.uri) #获取timestamp(时间戳)
timestamp = int(time.time())
#获取noncestr(随机字符串)
nonceStr = self.createNonceStr() # 这里参数的顺序要按照 key 值 ASCII 码升序排序
string = "jsapi_ticket={}&noncestr={}&timestamp={}&url={}".format(jsapiTicket,nonceStr,timestamp,url)
#得到signature
signature = hashlib.sha1(string).hexdigest();
wxinfo = self.getwx()
signPackage = {
"appId":wxinfo['appid'],
"nonceStr":nonceStr,
"timestamp":timestamp,
"url":url,
"signature":signature,
"rawString":string
} return signPackage; def createNonceStr(self,length = 16):
#获取noncestr(随机字符串)
import random
chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
str = "";
for i in range(0,16):
str += chars[random.randint(0, len(chars)-1):random.randint(0, len(chars)-1)+1]
# for ($i = 0; $i < $length; $i++) {
# $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
# }
return str; def getJsApiTicket(self):
#获得jsapi_ticket
#获得jsapi_ticket之后,就可以生成JS-SDK权限验证的签名了
import urllib2
# jsapi_ticket 应该全局存储与更新,以下代码以写入到文件中做示例
#cookie('ticket',null); #获取access_token
accessToken = self.accesstokens()
# 如果是企业号用以下 URL 获取 ticket
# $url = "https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token=$accessToken";
#获取jsapi_ticket
url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={}&type=jsapi".format(accessToken) req = urllib2.Request(url)
res_data = urllib2.urlopen(req)
res = res_data.read()
res=json_decode(res) return str(res['ticket'])
前台总代码整理:
<script type="text/javascript" src="/static/js/jquery.js"></script>
<script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
<script type="text/javascript">
//通过config接口注入权限验证配置
wx.config({
debug: false,
appId: '${getSignPackage["appId"]}',
timestamp:'${getSignPackage["timestamp"]}',
nonceStr: '${getSignPackage["nonceStr"]}',
signature: '${getSignPackage["signature"]}',
jsApiList: [
'onMenuShareAppMessage',
'onMenuShareTimeline',
'onMenuShareQQ',
'onMenuShareWeibo'
// 所有要调用的 API 都要加到这个列表中
]
});
wx.ready(function () {
// 1 判断当前版本是否支持指定 JS 接口,支持批量判断
wx.checkJsApi({
jsApiList: [
'onMenuShareAppMessage'
],
success: function (res) {
//alert(JSON.stringify(res));
}
});
//获取“分享给朋友”按钮点击状态及自定义分享内容接口
wx.onMenuShareAppMessage({
title: '${replypt_list["title"]}',
desc: '${replypt_list["title"]}',
link: '${getSignPackage["url"]}',
imgUrl: '${handler.settings["PHOTO_URL"]}${replypt_list["cover"]}',
trigger: function (res) {
// 不要尝试在trigger中使用ajax异步请求修改本次分享的内容,因为客户端分享操作是一个同步操作,这时候使用ajax的回包会还没有返回
},
success: function (res) {
$.ajax({
url: '/shop/knowledge/addIntager',
data: { name: "${replypt_list['id']}"},
type: 'post',
cache:false,
success: function(data){
},
error: function(xhr, type){
alert('Ajax error!')
}
})
},
cancel: function (res) {
},
fail: function (res) {
}
});
//获取“分享到朋友圈”按钮点击状态及自定义分享内容接口
wx.onMenuShareTimeline({
title: '${replypt_list["title"]}',
desc: '${replypt_list["title"]}',
link: '${getSignPackage["url"]}',
imgUrl: '${handler.settings["PHOTO_URL"]}${replypt_list["cover"]}',
trigger: function (res) {
// 不要尝试在trigger中使用ajax异步请求修改本次分享的内容,因为客户端分享操作是一个同步操作,这时候使用ajax的回包会还没有返回 },
success: function (res) {
$.ajax({
url: '/shop/knowledge/addIntager',
data: { name: "${replypt_list['id']}"},
type: 'post',
cache:false,
success: function(data){
alert(str('aa'))
},
error: function(xhr, type){
alert('Ajax error!')
}
})
},
cancel: function (res) { },
fail: function (res) { }
});
//获取“分享到QQ”按钮点击状态及自定义分享内容接口
wx.onMenuShareQQ({
title: '${replypt_list["title"]}',
desc: '${replypt_list["title"]}',
link: '${getSignPackage["url"]}',
imgUrl: '${handler.settings["PHOTO_URL"]}${replypt_list["cover"]}',
trigger: function (res) { },
complete: function (res) { },
success: function (res) {
$.ajax({
url: '/shop/knowledge/addIntager',
data: { name: "${replypt_list['id']}"},
type: 'post',
cache:false,
success: function(data){
},
error: function(xhr, type){
alert('Ajax error!')
}
})
},
cancel: function (res) { },
fail: function (res) { }
}); wx.onMenuShareWeibo({
title: '${replypt_list["title"]}',
desc: '${replypt_list["title"]}',
link: '${getSignPackage["url"]}',
imgUrl: '${handler.settings["PHOTO_URL"]}${replypt_list["cover"]}',
trigger: function (res) { },
complete: function (res) { },
success: function (res) {
$.ajax({
url: '/shop/knowledge/addIntager',
data: { name: "${replypt_list['id']}"},
type: 'post',
cache:false,
success: function(data){
},
error: function(xhr, type){ alert('Ajax error!') } }) }, cancel: function (res) { }, fail: function (res) { } }); }); // 2. 分享接口 // 2.1 监听“分享给朋友”,按钮点击、自定义分享内容及分享结果接口 </script>
 

Python微信-- 分享接口(分享到朋友圈、朋友、空间)的更多相关文章

  1. 微信JS-SDK接口,分享到朋友圈”按钮点击状态及自定义分享内容接口

    jssdk.php 接口文件class JSSDK { private $appId; private $appSecret; public function __construct($appId, ...

  2. 用 Python分析朋友圈好友的签名

    需要用到的第三方库: numpy:本例结合wordcloud使用 jieba:对中文惊进行分词 PIL: 对图像进行处理(本例与wordcloud结合使用) snowlp:对文本信息进行情感判断 wo ...

  3. 微信JS接口

      微信JS接口 分享到朋友圈 分享给朋友 分享到QQ 拍照或从手机相册中选图 识别音频并返回识别结果 使用微信内置地图查看位置来源:http://www.cnblogs.com/txw1958/p/ ...

  4. LeetCode 547. Friend Circles 朋友圈(C++/Java)

    题目: https://leetcode.com/problems/friend-circles/ There are N students in a class. Some of them are ...

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

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

  6. 微信开发(2):微信js sdk分享朋友圈,朋友,获取config接口注入权限验证(转)

    进行微信开发已经一阵子了,从最初的什么也不懂,到微信授权登录,分享,更改底部菜单,素材管理,等. 今天记录一下微信jssdk 的分享给朋友的功能,获取config接口注入. 官方文档走一下简单说:四步 ...

  7. vue项目中分享到朋友圈,调用微信接口

    虽然微信提供了jssdk,不代表可以点击按钮进行分享到朋友圈,是需要微信自带的浏览器右上角进行分享.手机浏览器需要浏览器支持分享到朋友圈的分享机制. 微信jssdk地址: https://mp.wei ...

  8. JAVA调用微信接口实现页面分享功能(分享到朋友圈显示图片,分享给朋友)

    钉钉提供的内网穿透之HTTP穿透:https://www.cnblogs.com/pxblog/p/13862376.html 网页分享到微信中如何显示标题图,如果自定义标题图,描述,显示效果如下 官 ...

  9. 微信JSSDK分享朋友圈微信自定义分享接口

    服务项目 新手技术咨询 企业技术咨询 定制开发 服务说明 QQ有问必答 QQ.微信.电话 微信开发.php开发,网站开发,系统定制,小程序开发 价格说明 200元/月 1000/月 商议       ...

随机推荐

  1. Android Studio 快捷键

    1.显示注解:F2 2.显示大括号包含范围:Ctrl 3.显示当前文档结构:Ctrl+F12 4.快速打开类:Ctrl+N 5.格式化代码:Ctrl+Alt+L 6.折叠代码:Ctrl+[+/-] 7 ...

  2. bash学习

    if 的使用 declare -i x=10 if [ $x -lt 14 ];then echo $x'小于14'; elif [ $x -gt 9 ];then echo $x'大于9'; els ...

  3. java json数据的处理

    // 返回documentBuilderFactory对象 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); ...

  4. wget 断点续传 & nginx文件服务器

    nginx默认支持断点续传: 测试方法: wget -S http://httpd.apache.org/images/httpd_logo_wide_new.png 2>&1 | gr ...

  5. scrapy加载cookies登陆

    import scrapy from xxxx.items import XXXXItem from scrapy.http.request import Request class ZndsSpid ...

  6. appium 滑动

    前些日子,配置好了appium测试环境,至于环境怎么搭建,参考:http://www.cnblogs.com/tobecrazy/p/4562199.html   知乎Android客户端登陆:htt ...

  7. Jquary入门( 修改内容)

    1. 使用JQ时需要先引用 JQ 包: 其他的JQ代码 需要写在 引用标签的下面如下图[基本格式] JQ中 是纯代码 没有判断 没有循环   如果 有 时间间隔和延迟  则使用JS 代码 详见 下面例 ...

  8. 源码安装php

    php安装扩展源yum install epel-releaseyum updateyum install libmcrypt libmcrypt-devel mcrypt mhash -yyum i ...

  9. extarea输入的换行在网页上正常显示

    如图

  10. opencv2.4更换为opencv3.1后,mxnet编译错误(libpng16.so.16)

    编译显示错误为: /usr/bin/ld: warning: libpng16.so.16, needed by /usr/local/lib/libopencv_imgcodecs.so, not ...