@@ -246,30 +246,32 @@ class WxApi(object):
246
246
247
247
API_PREFIX = 'https://api.weixin.qq.com/cgi-bin/'
248
248
249
- def __init__ (self , appid , appsecret ):
249
+ def __init__ (self , appid , appsecret , api_entry = None ):
250
250
self .appid = appid
251
251
self .appsecret = appsecret
252
252
self ._access_token = None
253
- self .expires_in = time . time ()
253
+ self .api_entry = api_entry or self . API_PREFIX
254
254
255
255
@property
256
256
def access_token (self ):
257
- if (not self ._access_token ) or (
258
- self ._access_token and time .time () > self .expires_in ):
259
- self ._access_token = None
257
+ if not self ._access_token :
260
258
token , err = self .get_access_token ()
261
259
if not err :
262
260
self ._access_token = token ['access_token' ]
263
- self .expires_in = time .time () + token ['expires_in' ]
264
261
return self ._access_token
265
262
else :
266
263
return None
267
264
return self ._access_token
268
265
266
+ def set_access_token (self , token ):
267
+ self ._access_token = token
268
+
269
269
def get_access_token (self ):
270
270
params = {'grant_type' : 'client_credential' , 'appid' : self .appid ,
271
271
'secret' : self .appsecret }
272
- return self ._get ('token' , params )
272
+ rsp = requests .get (self .api_entry + 'token' , params = params ,
273
+ verify = False )
274
+ return self ._process_response (rsp )
273
275
274
276
def _process_response (self , rsp ):
275
277
if rsp .status_code != 200 :
@@ -285,14 +287,14 @@ def _process_response(self, rsp):
285
287
def _get (self , path , params = None ):
286
288
if not params :
287
289
params = {}
288
- if self ._access_token :
289
- params [ 'access_token' ] = self . _access_token
290
- rsp = requests . get ( self . API_PREFIX + path , params = params , verify = False )
290
+ params [ 'access_token' ] = self .access_token
291
+ rsp = requests . get ( self . api_entry + path , params = params ,
292
+ verify = False )
291
293
return self ._process_response (rsp )
292
294
293
295
def _post (self , path , data , ctype = 'json' ):
294
296
headers = {'Content-type' : 'application/json' , 'Accept' : 'text/json' }
295
- path = self .API_PREFIX + path + '?access_token=' + self .access_token
297
+ path = self .api_entry + path + '?access_token=' + self .access_token
296
298
if ctype == 'json' :
297
299
data = json .dumps (data , ensure_ascii = False ).encode ('utf-8' )
298
300
rsp = requests .post (path , data = data , headers = headers , verify = False )
@@ -305,16 +307,17 @@ def followers(self, next_id=''):
305
307
return self ._get ('user/get' , {'next_openid' : next_id })
306
308
307
309
def upload_media (self , mtype , filepath ):
308
- # TODO, 对各种类型的文件作合法性校验
309
- path = self .API_PREFIX + 'media/upload?access_token=' \
310
+ path = self .api_entry + 'media/upload?access_token=' \
310
311
+ self ._access_token + '&type=' + mtype
311
312
rsp = requests .post (path , files = {'media' : open (filepath , 'rb' )},
312
313
verify = False )
313
314
return self ._process_response (rsp )
314
315
315
316
def download_media (self , media_id , to_path ):
316
- rsp = requests .get (self .API_PREFIX + 'media/get' ,
317
- {'media_ia' : media_id }, verify = False )
317
+ rsp = requests .get (self .api_entry + 'media/get' ,
318
+ params = {'media_id' : media_id ,
319
+ 'access_token' : self ._access_token },
320
+ verify = False )
318
321
if rsp .status_code == 200 :
319
322
save_file = open (to_path , 'wb' )
320
323
save_file .write (rsp .content )
0 commit comments