def init_wechat_sdk(): """初始化微信 SDK""" access_token = redis.get("wechat:access_token") jsapi_ticket = redis.get("wechat:jsapi_ticket") token_expires_at = redis.get("wechat:access_token_expires_at") ticket_expires_at = redis.get("wechat:jsapi_ticket_expires_at") if access_token and jsapi_ticket and token_expires_at and ticket_expires_at: wechat = WechatBasic(appid=app.config['APP_ID'], appsecret=app.config['APP_SECRET'], token=app.config['TOKEN'], access_token=access_token, access_token_expires_at=int(token_expires_at), jsapi_ticket=jsapi_ticket, jsapi_ticket_expires_at=int(ticket_expires_at)) else: wechat = WechatBasic(appid=app.config['APP_ID'], appsecret=app.config['APP_SECRET'], token=app.config['TOKEN']) access_token = wechat.get_access_token() redis.set("wechat:access_token", access_token['access_token'], 7000) redis.set("wechat:access_token_expires_at", access_token['access_token_expires_at'], 7000) jsapi_ticket = wechat.get_jsapi_ticket() redis.set("wechat:jsapi_ticket", jsapi_ticket['jsapi_ticket'], 7000) redis.set("wechat:jsapi_ticket_expires_at", jsapi_ticket['jsapi_ticket_expires_at'], 7000) return wechat
def init_wechat_sdk(): """ 初始化微信sdk :return: WechatBasic """ access_token = db.get("wechat:access_token") jsapi_ticket = db.get("wechat:jsapi_ticket") token_expires_at = db.get("wechat:access_token_expires_at") ticket_expires_at = db.get("wechat:jsapi_ticket_expires_at") if all((access_token, jsapi_ticket, token_expires_at, ticket_expires_at)): wechat = WechatBasic(appid=app.config['APP_ID'], appsecret=app.config['APP_SECRET'], token=app.config['TOKEN'], access_token=access_token, access_token_expires_at=int(token_expires_at), jsapi_ticket=jsapi_ticket, jsapi_ticket_expires_at=int(ticket_expires_at)) else: wechat = WechatBasic(appid=app.config['APP_ID'], appsecret=app.config['APP_SECRET'], token=app.config['TOKEN']) access_token = wechat.get_access_token() db.set("wechat:access_token", access_token['access_token'], 7000) db.set("wechat:access_token_expires_at", access_token['access_token_expires_at'], 7000) jsapi_ticket = wechat.get_jsapi_ticket() db.set("wechat:jsapi_ticket", jsapi_ticket['jsapi_ticket'], 7000) db.set("wechat:jsapi_ticket_expires_at", jsapi_ticket['jsapi_ticket_expires_at'], 7000) return wechat
def getNewWechatInfo(): ''' modify by bigzhu at 15/07/20 00:00:12 自动转化python的时间类型 ''' wechat = WechatBasic(token=token, appid=appid, appsecret=appsecret) the_access_token = wechat.get_access_token() access_token = the_access_token['access_token'] access_token_expires_at = the_access_token['access_token_expires_at'] ticket_info = wechat.get_jsapi_ticket() jsapi_ticket = ticket_info['jsapi_ticket'] jsapi_ticket_expires_at = ticket_info['jsapi_ticket_expires_at'] access_token_expires_at = time_bz.timestampToDateTime(access_token_expires_at) jsapi_ticket_expires_at = time_bz.timestampToDateTime(jsapi_ticket_expires_at) return wechat, access_token, access_token_expires_at, jsapi_ticket, jsapi_ticket_expires_at
def getNewWechatInfo(): ''' modify by bigzhu at 15/07/20 00:00:12 自动转化python的时间类型 modify by bigzhu at 15/09/13 17:25:43 为了用订阅号给指定用户发消息,改用WechatExt ''' wechat = WechatBasic(token=token, appid=appid, appsecret=appsecret) the_access_token = wechat.get_access_token() access_token = the_access_token['access_token'] access_token_expires_at = the_access_token['access_token_expires_at'] ticket_info = wechat.get_jsapi_ticket() jsapi_ticket = ticket_info['jsapi_ticket'] jsapi_ticket_expires_at = ticket_info['jsapi_ticket_expires_at'] access_token_expires_at = time_bz.timestampToDateTime(access_token_expires_at) jsapi_ticket_expires_at = time_bz.timestampToDateTime(jsapi_ticket_expires_at) return wechat, access_token, access_token_expires_at, jsapi_ticket, jsapi_ticket_expires_at
def initWechat(settings): ''' create by bigzhu at 15/05/18 14:42:20 初始化wechat,获取必要的信息,返回 settings >>> initWechat({'token':'jhxh4lkwscelseyumc4jmoymmqkz1le1', 'appid':'wx2427206f53ca5191', 'appsecret':'96c12db489bf34bddc5b8929f2745937'}) #doctest:+ELLIPSIS new access_token= ... ({'access_token_expires_at': 1..., 'access_token': u'...', 'jsapi_ticket': u'...', 'appsecret': '96c12db489bf34bddc5b8929f2745937', 'token': 'jhxh4lkwscelseyumc4jmoymmqkz1le1', 'appid': 'wx2427206f53ca5191', 'jsapi_ticket_expires_at': ...}, <wechat_sdk.basic.WechatBasic object at ...>) ''' wechat = WechatBasic(token=settings["token"], appid=settings["appid"], appsecret=settings["appsecret"]) token = wechat.get_access_token() settings['access_token'] = token['access_token'] settings['access_token_expires_at'] = token['access_token_expires_at'] ticket_info = wechat.get_jsapi_ticket() settings['jsapi_ticket'] = ticket_info['jsapi_ticket'] settings['jsapi_ticket_expires_at'] = ticket_info['jsapi_ticket_expires_at'] print 'new access_token=', settings['access_token'] return settings, wechat
def get_jsapi_ticket(): ticket = cache.get(TICKET_KEY) expired_at = cache.get(TICKET_EXPIRED_AT_KEY) if ticket: return ticket, expired_at token, expired_at = get_access_token() b = WechatBasic( appid=settings.app_id, appsecret=settings.secret, access_token=token, access_token_expires_at=expired_at ) print "get_ticket at:", datetime.datetime.now() d = b.get_jsapi_ticket() ticket = d["jsapi_ticket"] expired_at = d["jsapi_ticket_expires_at"] cache.set(TICKET_KEY, ticket, (expired_at - time.time()) * 60) cache.set(TICKET_EXPIRED_AT_KEY, expired_at, (expired_at - time.time()) * 60) return ticket, expired_at
def get_jsapi_ticket(): ticket = cache.get(TICKET_KEY) expired_at = cache.get(TICKET_EXPIRED_AT_KEY) if ticket: return ticket, expired_at token, expired_at = get_access_token() b = WechatBasic( appid=settings.APP_ID, appsecret=settings.SECRET, access_token=token, access_token_expires_at=expired_at) print 'get_ticket at:', datetime.datetime.now() d = b.get_jsapi_ticket() ticket = d['jsapi_ticket'] expired_at = d['jsapi_ticket_expires_at'] cache.set(TICKET_KEY, ticket, int(expired_at - time.time())*60) cache.set(TICKET_EXPIRED_AT_KEY, expired_at, int(expired_at - time.time())*60) return ticket, expired_at
def get_jsapi_ticket(): ticket = cache.get(TICKET_KEY) expired_at = cache.get(TICKET_EXPIRED_AT_KEY) if ticket: return ticket, expired_at token, expired_at = get_access_token() b = WechatBasic(appid=settings.APP_ID, appsecret=settings.SECRET, access_token=token, access_token_expires_at=expired_at) print 'get_ticket at:', datetime.datetime.now() d = b.get_jsapi_ticket() ticket = d['jsapi_ticket'] expired_at = d['jsapi_ticket_expires_at'] cache.set(TICKET_KEY, ticket, (expired_at - time.time()) * 60) cache.set(TICKET_EXPIRED_AT_KEY, expired_at, (expired_at - time.time()) * 60) return ticket, expired_at
def getNewWechatInfo(): ''' modify by bigzhu at 15/07/20 00:00:12 自动转化python的时间类型 modify by bigzhu at 15/09/13 17:25:43 为了用订阅号给指定用户发消息,改用WechatExt ''' conf = WechatConf( token=token, appid=appid, appsecret=appsecret, encrypt_mode='compatible', encoding_aes_key=encoding_aes_key ) wechat = WechatBasic(conf=conf) the_access_token = wechat.get_access_token() access_token = the_access_token['access_token'] access_token_expires_at = the_access_token['access_token_expires_at'] ticket_info = wechat.get_jsapi_ticket() jsapi_ticket = ticket_info['jsapi_ticket'] jsapi_ticket_expires_at = ticket_info['jsapi_ticket_expires_at'] access_token_expires_at = time_bz.timestampToDateTime(access_token_expires_at) jsapi_ticket_expires_at = time_bz.timestampToDateTime(jsapi_ticket_expires_at) return wechat, access_token, access_token_expires_at, jsapi_ticket, jsapi_ticket_expires_at
class WeChatService(object): def __init__(self, app_id=None, app_secret=None): self.redis = redis.StrictRedis(host='localhost', port=6379, db=2) self.app_id = app_id self.app_secret = app_secret if not app_id: self.wechat_admin = Area.objects.all().order_by('id')[0] self.wechat = WechatBasic(appid=self.wechat_admin.wx_app_id, appsecret=self.wechat_admin.wx_secret, token='123') self.app_id = self.wechat_admin.app_id self.app_secret = self.wechat_admin.app_secret else: self.wechat_admin = None self.wechat = WechatBasic(appid=app_id, appsecret=app_secret, token='123') self.get_token() def get_token(self): key = 'access_token_{0}'.format(self.app_id) token = self.redis.get(key) if not token: res = self.wechat.grant_token() token = res.get('access_token') self.redis.set(key, token, 3500) return token def get_js_ticket(self): key = 'js_ticket_{0}'.format(self.app_id) ticket = self.redis.get(key) if not ticket or ticket == 'None': res = self.wechat.get_jsapi_ticket() ticket = res.get('jsapi_ticket') self.redis.set(key, ticket, 3500) return ticket def get_random_str(self): return string.join( random.sample('ZYXWVUTSRQPONMLKJIHGFEDCBA1234567890zyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcba', 32)).replace(" ", "") def get_js_signature(self, url): timestamp = int(time.time()) nostr = self.get_random_str() ticket = self.get_js_ticket() signature = self.wechat.generate_jsapi_signature(timestamp, nostr, url, ticket) return {'timestamp': timestamp, 'ticket': ticket, 'noncestr': nostr, 'url': url, 'signature': signature} def send_message(self, open_id, message): token = self.get_token() req_url = 'https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token={0}'.format(token) message = message.decode('utf-8') data = {'touser': open_id, 'msgtype': 'text', 'text': {'content': str('测试')}} result = requests.post(req_url, data=simplejson.dumps(data)) return json.loads(result.content) if __name__ == '__main__': ws = WeChatService('wx53a0bb66744d6ff8', '72714e74ea52de8a0917111bb7b4b324') print ws.get_js_signature('http://www.rapospectre.com')
def get_basic_obj(request): # type: (object) -> object """ 获取基本操作对象,access_token和access_token_expires_at从session中获取 :return: """ access_token = None access_token_expires_at = None token_id = None token_list = AccessToken.objects.order_by("-id") if token_list: old_token = token_list[0] access_token = old_token.token access_token_expires_at = old_token.expires token_id = old_token.id jsapi_ticket = None jsapi_ticket_expires_at = None ticket_id = None ticket_list = JsapiTicket.objects.order_by("-id") if ticket_list: old_ticket = ticket_list[0] jsapi_ticket = old_ticket.ticket jsapi_ticket_expires_at = old_ticket.expires ticket_id = old_ticket.id # 微信配置 conf = WechatConf( token=settings.TOKEN, appid=settings.APPID, appsecret=settings.APPSECRET, encrypt_mode=settings. ENCRYPT_MODE, # 可选项:normal/compatible/safe,分别对应于 明文/兼容/安全 模式 encoding_aes_key=settings. ENCODING_AES_KEY, # 如果传入此值则必须保证同时传入 token, appid access_token=access_token, access_token_expires_at=access_token_expires_at, jsapi_ticket=jsapi_ticket, jsapi_ticket_expires_at=jsapi_ticket_expires_at, ) wechat = WechatBasic(conf=conf) access_token = wechat.get_access_token() print("current access_token:", access_token) # 将access_token重新更新到db new_token = AccessToken() new_token.token = access_token["access_token"] new_token.expires = access_token["access_token_expires_at"] if token_id: new_token.id = token_id new_token.save() jsapi_ticket = wechat.get_jsapi_ticket() print("current jsapi_ticket:", jsapi_ticket) # 将jsapi_ticket重新更新到db new_ticket = JsapiTicket() new_ticket.ticket = jsapi_ticket["jsapi_ticket"] new_ticket.expires = jsapi_ticket["jsapi_ticket_expires_at"] if ticket_id: new_ticket.id = ticket_id new_ticket.save() return wechat