class WeChat(object): TYPE_TEXT = 'text' TYPE_IMAGE = 'image' @property def all_sub_type(self): return [self.TYPE_TEXT, self.TYPE_IMAGE] def __init__(self, *args, **kwargs): super(WeChat, self).__init__() self._token_url = 'https://api.weixin.qq.com/cgi-bin/token' self._wechat_message = WeChatMessage() self._wechat_token = WeChatToken(url=self._token_url, appid=Config.AppID, secret=Config.AppSECRET, grant_type='client_credential') self._robot = Robot() def _token(self): if not g.token: g.token = (self._wechat_token.access_token, int(time.time())) return g.token def get_token(self): if g.token: access_token, ts = g.token if int(time.time()) - ts < WeChatToken.EXPIRES_IN: return access_token return self._token() def replay(self, input_xml): # TODO(haining) refactor wechat_message message_type, return_dict = self._wechat_message.parse(input_xml) if message_type not in self.all_sub_type: return '' message = MessageModel() message.wechat_id = return_dict.get('FromUserName') if message_type == self.TYPE_TEXT: message.content = return_dict.get('Content') message.sub_type = MessageModel.SUB_TYPE_TEXT # message.save() replay_message = self._robot.check_command(message) replay_xml = self._wechat_message.text(return_dict, replay_message) elif message_type == WeChat.SUB_TYPE_IMAGE: message.pic_url = return_dict.get('PicUrl') message.media_id = return_dict.get('MediaId') message.sub_type = MessageModel.SUB_TYPE_IMAGE message.save() replay_xml = self._wechat_message.image(return_dict) return replay_xml
def __init__(self, *args, **kwargs): super(WeChat, self).__init__() self._token_url = 'https://api.weixin.qq.com/cgi-bin/token' self._wechat_message = WeChatMessage() self._wechat_token = WeChatToken(url=self._token_url, appid=Config.AppID, secret=Config.AppSECRET, grant_type='client_credential') self._robot = Robot()