def test_grant_jsapi_ticket(self): # 测试无 appid 和 appsecret 初始化 wechat = WechatBasic() with self.assertRaises(NeedParamError): wechat.grant_jsapi_ticket() # 测试有 appid 和 appsecret 初始化(覆盖已有 jsapi_ticket,默认override=True即覆盖) wechat = WechatBasic(appid=self.appid, appsecret=self.appsecret) with HTTMock(wechat_api_mock): resp = wechat.grant_jsapi_ticket() self.assertEqual(resp['errcode'], 0) self.assertEqual(resp['errmsg'], 'ok') self.assertEqual(resp['ticket'], self.fixtures_jsapi_ticket) self.assertEqual(resp['expires_in'], 7200) self.assertEqual(wechat.conf.jsapi_ticket, self.fixtures_jsapi_ticket)
class WeixinMananger: def __init__(self, appid="wxc2b14fc7557dc863", appsecret="67c0097d1bf2f7804f9eb2375f3d2039", redisIp="127.0.0.1", redisPort=6379): self.redis = redis.StrictRedis(host=redisIp) self.appid = appid; self.appsecret = appsecret; self.wechat = WechatBasic(appid=appid, appsecret=appsecret); def __getRedisWXAccessToken(self): return self.redis.get("wx_access_token") def __getRedisWXJsApiToken(self): return self.redis.get("wx_jsapi_token") def getAccessToken(self): token = self.__getRedisWXAccessToken() if token is None: token = self.wechat.grant_token() if token != None: timeout = token["expires_in"] self.redis.setex("wx_access_token", timeout, token["access_token"]) return token["access_token"] else: return None; else: return token def getJsApiToken(self): ticket = self.__getRedisWXJsApiToken() if ticket is None: print self.getAccessToken() ticket = self.wechat.grant_jsapi_ticket() if (ticket != None): timeout = ticket["expires_in"]; self.redis.setex("wx_jsapi_token", timeout, ticket["ticket"]) return ticket["ticket"] else: return None else: return ticket def getJsJDK(self, srcUrl): timestamp = int(time.time()) noncestr = str(time.time()) url = srcUrl jsApiToken = self.getJsApiToken(); data = {}; data["timestamp"] = timestamp data["nonceStr"] = noncestr data["appId"] = self.appid data["signature"] = self.wechat.generate_jsapi_signature(timestamp, noncestr, url, jsApiToken) data["jsApiList"] = ["openLocation", "getLocation", "scanQRCode", "showMenuItems"] data["debug"] = True return data
# 队列 celery = make_celery(app) # 记录日志 handler = RotatingFileHandler('app.log', maxBytes=10000, backupCount=1) handler.setFormatter( logging.Formatter('%(asctime)s %(levelname)s: %(message)s ' '[in %(pathname)s:%(lineno)d]')) handler.setLevel(logging.WARNING) app.logger.addHandler(handler) # 初始第三方库 redis = Redis() # 初始化微信 SDK wechat = WechatBasic(appid=app.config['APP_ID'], appsecret=app.config['APP_SECRET'], token=app.config['TOKEN']) if not redis.exists("wechat:access_token"): # access_token 写入缓存 wechat.grant_jsapi_ticket() redis.set("wechat:access_token", wechat.get_access_token()['access_token'], 7000) # 路由 from .routes import * # 定时任务 from .plugins.cron import *
# 队列 celery = make_celery(app) # 记录日志 handler = RotatingFileHandler('app.log', maxBytes=10000, backupCount=1) handler.setFormatter(logging.Formatter( '%(asctime)s %(levelname)s: %(message)s ' '[in %(pathname)s:%(lineno)d]' )) handler.setLevel(logging.WARNING) app.logger.addHandler(handler) # 初始第三方库 redis = Redis() # 初始化微信 SDK wechat = WechatBasic(appid=app.config['APP_ID'], appsecret=app.config['APP_SECRET'], token=app.config['TOKEN']) if not redis.exists("wechat:access_token"): # access_token 写入缓存 wechat.grant_jsapi_ticket() redis.set("wechat:access_token", wechat.get_access_token()['access_token'], 7000) # 路由 from .routes import * # 定时任务 from .plugins.cron import *