github地址:cppfun@wechat-open-third-party-dev
在开始本节之前,你需要先阅读前四节的内容:
微信公众号第三方平台开发python教程 Part 1
微信公众号第三方平台开发python教程 Part 2
微信公众号第三方平台开发python教程 Part 3
微信公众号第三方平台开发python教程 Part 4
本节第五讲,我们讲讲如何刷新token(刷新授权公众号的接口调用令牌)。
这个其实就更简单了,代码如下:
def get_refresh_authorizer_access_token
(
self
, authorizer_appid
, authorizer_refresh_token
):
url = 'https://api.weixin.qq.com/cgi-bin/component/api_authorizer_token?component_access_token=%s' \
% self. get_com_access_token ( )
payload = {
"component_appid": self. component_appid ,
"authorizer_appid": authorizer_appid ,
"authorizer_refresh_token": authorizer_refresh_token
}
headers = { 'content-type': 'application/json' }
response = requests. post (url , data =json. dumps (payload ) , headers =headers )
return response. json ( )
url = 'https://api.weixin.qq.com/cgi-bin/component/api_authorizer_token?component_access_token=%s' \
% self. get_com_access_token ( )
payload = {
"component_appid": self. component_appid ,
"authorizer_appid": authorizer_appid ,
"authorizer_refresh_token": authorizer_refresh_token
}
headers = { 'content-type': 'application/json' }
response = requests. post (url , data =json. dumps (payload ) , headers =headers )
return response. json ( )
这里需要两个参数:
# authorizer_appid
# 授权方appid
# authorizer_refresh_token
# 授权方的刷新令牌,刷新令牌主要用于公众号第三方平台获取和刷新已授权用户的access_token,只会在授权时刻提供,请妥善保存。
# 我们一般将其保存在数据库中,因为你授权的公众号不止一个
# 授权方appid
# authorizer_refresh_token
# 授权方的刷新令牌,刷新令牌主要用于公众号第三方平台获取和刷新已授权用户的access_token,只会在授权时刻提供,请妥善保存。
# 我们一般将其保存在数据库中,因为你授权的公众号不止一个
现在我们看看我们的class WxOpenSDK,其代码如下:
class WxOpenCallback:
def __init__ ( self ):
self. token = token
def check_signature ( self , pams ):
if not self. token:
return HttpResponse ( 'TOKEN is not defined!' )
msg_signature = pams. get ( 'msg_signature' , '' )
timestamp = pams. get ( 'timestamp' , '' )
nonce = pams. get ( 'nonce' , '' )
tmparr = [ self. token , timestamp , nonce ]
tmparr. sort ( )
string = ''. join (tmparr )
string = hashlib. sha1 ( string ). hexdigest ( )
# print signature
# print string
return msg_signature == string
class WxOpenSDK:
def __init__ ( self , ticket ):
self. component_appid = component_appid
self. component_appsecret = component_appsecret
self. ticket = ticket
# something below...
def get_com_access_token ( self ):
# load file
json_file = open ( 'com_access_token.json' )
data = json. load (json_file )
json_file. close ( )
component_access_token = data [ 'component_access_token' ]
now = time. time ( )
if data [ 'expire_time' ] < now:
url = "https://api.weixin.qq.com/cgi-bin/component/api_component_token"
payload = { 'component_appid': self. component_appid ,
'component_appsecret': self. component_appsecret ,
'component_verify_ticket': self. ticket }
headers = { 'content-type': 'application/json' }
response = requests. post (url , data =json. dumps (payload ) , headers =headers )
component_access_token = json. loads (response. text ) [ 'component_access_token' ]
data [ 'component_access_token' ] = component_access_token
data [ 'expire_time' ] = int (now ) + 7000
# save file
json_file = open ( 'com_access_token.json' , 'w' )
json_file. write (json. dumps (data ) )
json_file. close ( )
return component_access_token
def get_pre_auth_code ( self ):
# load file
json_file = open ( 'pre_auth_code.json' )
data = json. load (json_file )
json_file. close ( )
pre_auth_code = data [ 'pre_auth_code' ]
now = time. time ( )
if data [ 'expire_time' ] < now:
url = "https://api.weixin.qq.com/cgi-bin/component/api_create_preauthcode?component_access_token=%s"\
% self. get_com_access_token ( )
payload = { 'component_appid': self. component_appid }
headers = { 'content-type': 'application/json' }
response = requests. post (url , data =json. dumps (payload ) , headers =headers )
pre_auth_code = json. loads (response. text ) [ 'pre_auth_code' ]
data [ 'pre_auth_code' ] = pre_auth_code
data [ 'expire_time' ] = int (now ) + 1100
# save file
json_file = open ( 'pre_auth_code.json' , 'w' )
json_file. write (json. dumps (data ) )
json_file. close ( )
return pre_auth_code
def get_authorization_info ( self , authorization_code ):
url = 'https://api.weixin.qq.com/cgi-bin/component/api_query_auth?component_access_token=%s' \
% self. get_com_access_token ( )
payload = {
"component_appid": self. component_appid ,
"authorization_code": authorization_code
}
headers = { 'content-type': 'application/json' }
response = requests. post (url , data =json. dumps (payload ) , headers =headers )
data = response. json ( )
return data [ 'authorization_info' ]
def get_refresh_authorizer_access_token ( self , authorizer_appid , authorizer_refresh_token ):
url = 'https://api.weixin.qq.com/cgi-bin/component/api_authorizer_token?component_access_token=%s' \
% self. get_com_access_token ( )
payload = {
"component_appid": self. component_appid ,
"authorizer_appid": authorizer_appid ,
"authorizer_refresh_token": authorizer_refresh_token
}
headers = { 'content-type': 'application/json' }
response = requests. post (url , data =json. dumps (payload ) , headers =headers )
return response. json ( )
def __init__ ( self ):
self. token = token
def check_signature ( self , pams ):
if not self. token:
return HttpResponse ( 'TOKEN is not defined!' )
msg_signature = pams. get ( 'msg_signature' , '' )
timestamp = pams. get ( 'timestamp' , '' )
nonce = pams. get ( 'nonce' , '' )
tmparr = [ self. token , timestamp , nonce ]
tmparr. sort ( )
string = ''. join (tmparr )
string = hashlib. sha1 ( string ). hexdigest ( )
# print signature
# print string
return msg_signature == string
class WxOpenSDK:
def __init__ ( self , ticket ):
self. component_appid = component_appid
self. component_appsecret = component_appsecret
self. ticket = ticket
# something below...
def get_com_access_token ( self ):
# load file
json_file = open ( 'com_access_token.json' )
data = json. load (json_file )
json_file. close ( )
component_access_token = data [ 'component_access_token' ]
now = time. time ( )
if data [ 'expire_time' ] < now:
url = "https://api.weixin.qq.com/cgi-bin/component/api_component_token"
payload = { 'component_appid': self. component_appid ,
'component_appsecret': self. component_appsecret ,
'component_verify_ticket': self. ticket }
headers = { 'content-type': 'application/json' }
response = requests. post (url , data =json. dumps (payload ) , headers =headers )
component_access_token = json. loads (response. text ) [ 'component_access_token' ]
data [ 'component_access_token' ] = component_access_token
data [ 'expire_time' ] = int (now ) + 7000
# save file
json_file = open ( 'com_access_token.json' , 'w' )
json_file. write (json. dumps (data ) )
json_file. close ( )
return component_access_token
def get_pre_auth_code ( self ):
# load file
json_file = open ( 'pre_auth_code.json' )
data = json. load (json_file )
json_file. close ( )
pre_auth_code = data [ 'pre_auth_code' ]
now = time. time ( )
if data [ 'expire_time' ] < now:
url = "https://api.weixin.qq.com/cgi-bin/component/api_create_preauthcode?component_access_token=%s"\
% self. get_com_access_token ( )
payload = { 'component_appid': self. component_appid }
headers = { 'content-type': 'application/json' }
response = requests. post (url , data =json. dumps (payload ) , headers =headers )
pre_auth_code = json. loads (response. text ) [ 'pre_auth_code' ]
data [ 'pre_auth_code' ] = pre_auth_code
data [ 'expire_time' ] = int (now ) + 1100
# save file
json_file = open ( 'pre_auth_code.json' , 'w' )
json_file. write (json. dumps (data ) )
json_file. close ( )
return pre_auth_code
def get_authorization_info ( self , authorization_code ):
url = 'https://api.weixin.qq.com/cgi-bin/component/api_query_auth?component_access_token=%s' \
% self. get_com_access_token ( )
payload = {
"component_appid": self. component_appid ,
"authorization_code": authorization_code
}
headers = { 'content-type': 'application/json' }
response = requests. post (url , data =json. dumps (payload ) , headers =headers )
data = response. json ( )
return data [ 'authorization_info' ]
def get_refresh_authorizer_access_token ( self , authorizer_appid , authorizer_refresh_token ):
url = 'https://api.weixin.qq.com/cgi-bin/component/api_authorizer_token?component_access_token=%s' \
% self. get_com_access_token ( )
payload = {
"component_appid": self. component_appid ,
"authorizer_appid": authorizer_appid ,
"authorizer_refresh_token": authorizer_refresh_token
}
headers = { 'content-type': 'application/json' }
response = requests. post (url , data =json. dumps (payload ) , headers =headers )
return response. json ( )
接下来,我们会进行第六节。