Python微信-- 分享接口(分享到朋友圈、朋友、空間)


生成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>
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM