def get_contact_client(self, account): ''' 取得client :param account: :return: ''' return WeChatClient(account.corp, account.account_secret)
def bind(self): for user in self: client = WeChatClient(user.account.corp_id, user.account.corpsecret) try: wechat_user_info = client.user.get(user.login) except WeChatClientException: wechat_user_info = None if wechat_user_info: val = { 'state': 'bind', 'name': wechat_user_info.get('name', None), 'job': wechat_user_info.get('position', None), 'mobile': wechat_user_info.get('mobile', None), 'email': wechat_user_info.get('email', None), 'wechat_login': wechat_user_info.get('weixinid', None), } user.write(val) else: client.user.create(user_id=user.login, name=user.name, department=1, position=user.job, mobile=user.mobile, email=user.email, weixin_id=user.wechat_login) user.state = 'bind'
def send_message( touser=None, content=None, msg_type="text", toparty=None, totag=None, **kwargs, ): secret = get_config("wework") CORPID, CORPSECRET, APPID = secret.split(":") agentid = int(APPID) api = WeChatClient(CORPID, CORPSECRET) message = dict( agent_id=agentid, user_ids=touser, content=content, party_ids=toparty, tag_ids=totag, ) if msg_type == "text": ret = api.message.send_text(**message) elif msg_type == "markdown": ret = api.message.send_markdown(**message) else: raise Exception("unsupported message type") return ret
def api_login(self, **kwargs): ''' 移动端登录 :param kwargs: :return: ''' # 获取用户信息 account_code = kwargs['serial'] agent_id = kwargs['agentID'] app = request.env["funenc.wechat.apps"].sudo().search( [('app_agent', '=', agent_id), ('account_id.code', '=', account_code)], limit=1) client = WeChatClient(app.account_id.corp, app.app_secret) wx_userid = client.oauth.get_user_info(kwargs['code']) request.session['auth_code'] = kwargs['code'] password = {'model': 'wechat', 'auth_code': kwargs['code']} authenticate = request.session.authenticate(request.session.db, wx_userid['UserId'], password) if authenticate is False: return '该用户不在系统用户列表中' else: session_info = request.env['ir.http'].session_info() _logger.info( dict(errcode=0, msg='', data={'token': session_info['session_id']})) return json.dumps( dict(errcode=0, msg='', data={'token': session_info['session_id']}))
def get_client(corp_id, secret): """ :param corp_id: 企业微信公司Id :param secret: 对应的秘钥(比如通讯录、自建应用...) :return: 企业微信客户端实例 """ return WeChatClient(corp_id, secret)
def write_wechat_account(self): if self.env['ir.config_parameter'].get_param('wechat.sync') == 'True': for user in self: client = WeChatClient(user.account.corp_id, user.account.corpsecret) # is user exist wechat_user_info = client.user.get(user.login) # if exist, update remote_val = { 'name': user.name if user.name else wechat_user_info.get('name'), 'position': user.job if user.job else wechat_user_info.get('position'), 'mobile': user.mobile if user.mobile else wechat_user_info.get('mobile'), 'email': user.email if user.email else wechat_user_info.get('email'), 'weixin_id': user.wechat_login if user.wechat_login else wechat_user_info.get('weixinid'), 'department': [d.id for d in user.departments] or [1], } local_values = remote_val.copy() local_values['job'] = local_values['position'] local_values['wechat_login'] = local_values['weixin_id'] client.user.update(user_id=user.login, **remote_val) user.with_context(is_no_wechat_sync=True).write(local_values)
def address_client(): """ 返回用于通讯录的客户端实例 :return: """ corp_id = request.env['ir.config_parameter'].sudo().get_param('weixin_ent_base.ent_wx_corp_id') secret = request.env['ir.config_parameter'].sudo().get_param('weixin_ent_base.ent_wx_ab_secret') return WeChatClient(corp_id, secret, session=mem_storage)
def get_access_client(): key = 'client' if cache.has_key(key): client = cache.get(key) else: client = WeChatClient(corp_id, app_secret) cache.set(key, client) return client
def unlink(self): for user in self: if user.state == 'bind': client = WeChatClient(user.account.corp_id, user.account.corpsecret) client.user.delete(user_id=user.login) res = super(WechatUser, self).unlink() return res
def unbind(self): for user in self: if user.state == 'bind': client = WeChatClient(user.account.corp_id, user.account.corpsecret) try: client.user.delete(user_id=user.login) except WeChatClientException, e: _logger.error(e) user.state = 'unbind'
class WechatWork(viewsets.ViewSet): """微信企业号相关认证服务""" client = WeChatClient( settings.WECHAT_WORK_CONFIG['CORP_ID'], settings.WECHAT_WORK_CONFIG['SECRET'], ) @swagger_auto_schema(operation_summary='获取微信企业号登录链接') @action(detail=False) def get_authorize_url(self, request): return Response({ 'url': self.client.oauth.authorize_url('/oauth/wechat_work/login_callback') }) @swagger_auto_schema(operation_summary='微信企业号登录回调') @action(detail=False) def authorize_redirect_uri(self, request: HttpRequest): code = request.GET.get('code', None) print(f'wechat code={code}') return Response({'code': code}) @swagger_auto_schema(operation_summary='通过code登录', manual_parameters=[ openapi.Parameter(name='code', in_=openapi.IN_QUERY, description='从微信企业号服务器获取到的code', type=openapi.TYPE_STRING) ]) @action(detail=False) def login_by_code(self, request: HttpRequest): code = request.GET.get('code', None) try: user_info = self.client.oauth.get_user_info(code) except Exception as e: raise APIException(detail=e) phone = user_info['UserId'] is_created_user = False if User.objects.filter(username=phone).exists(): user_obj: User = User.objects.get(username=phone) else: is_created_user = True user_obj: User = User.objects.create_user(username=phone, password=phone) # 记录Django登录状态 login(request, user_obj) # 生成drf token token, created = Token.objects.get_or_create(user=user_obj) return Response({ 'user_info': user_info, 'successful': True, 'is_created_user': is_created_user, 'token': token.key, 'detail': '登录成功', })
def enterprise_payment(request, wrId): order = WithdrawOrder.objects.get(wrId=wrId) account = ThirdAccount.objects.get(user__userId=order.user.userId, accType=1) client = WeChatClient(settings.WECHAT_APPID, settings.WECHAT_SECRET) transfer = WeChatTransfer(client) result = transfer.transfer(account.accountNo, order.wrMoney * 100, '提现') return HttpResponse('success')
def invite(self): for user in self: client = WeChatClient(user.account.corp_id, user.account.corpsecret) try: user.state = 'bind' except: user.state = 'unbind' raise ValidationError("%s hasn't been binded yet." % user.name) client.user.invite(user_id=user.login) user.state = "invited"
def sent_message(self): for message in self: user_ids = '|'.join([u.login for u in message.users]) try: client = WeChatClient(message.account.corp_id, message.account.corpsecret) # TODO: all support client.message.send_text(message.application.application_id, user_ids, message.content) message.state = 'send' except Exception, e: message.state = 'fail' message.result = str(e) _logger.error(e)
def create_wechat(self): if self.env['ir.config_parameter'].get_param('wechat.sync') == 'True': client = WeChatClient(self.account.corp_id, self.account.corpsecret) client.department.create(name=self.name, parent_id=self.parent_id.id or 1, order=self.order, id=self.id) for user in self.users: client.user.update(user.login, department=[d.id for d in user.departments] or [1])
def create_wechat_account(self): if self.env['ir.config_parameter'].get_param('wechat.sync') == 'True': client = WeChatClient(self.account.corp_id, self.account.corpsecret) client.user.create(user_id=self.login, name=self.name, department=[d.id for d in self.departments] or [1], position=self.job, mobile=self.mobile, email=self.email, weixin_id=self.wechat_login)
def unlink_wechat(self): if self.env['ir.config_parameter'].get_param('wechat.sync') == 'True': for department in self: client = WeChatClient(department.account.corp_id, department.account.corpsecret) for user in department.users: client.user.update( user.login, department=[ d.id for d in user.departments if d.id != department.id ] or [1]) client.department.delete(department.id)
def write(self, vals): res = super(WechatUser, self).write(vals) for user in self: if user.state == 'bind': client = WeChatClient(user.account.corp_id, user.account.corpsecret) client.user.update(user_id=user.login, name=user.name, department=1, position=user.job, mobile=user.mobile, email=user.email, weixin_id=user.wechat_login) return res
def get_client_by_app(self, code, agent_id): ''' :param code: :param agent_id: :return: ''' account = self.search([('code', '=', code)]) if account: app = self.env['funenc.wechat.apps'].sudo()\ .search([('account_id', '=', account.id), ('app_agent', '=', agent_id)]) if app: return WeChatClient(app.account_id.corp, app.app_secret) return None
def __init__(self, name='huobi', webhook=None, agent_id=None, secret=None, company_id=None): self.name = name # 机器人webhook self.webhook = read_secret("wechat", "notechats", "huobi", name, "webhook", value=webhook) # 应用ID self.agent_id = read_secret("wechat", "notechats", "huobi", name, "agent_id", value=agent_id) # 企业ID self.company_id = read_secret("wechat", "notechats", "huobi", name, "company_id", value=company_id) # 应用Secret self.secret = read_secret("wechat", "notechats", "huobi", name, "secret", value=secret) self.client = WeChatClient(corp_id=self.company_id, secret=self.secret)
def response_message(xml, request=None): msg = parse_message(xml) log.debug('>>> source:{},target:{}, msg.type:{}'.format( msg.source, msg.target, msg.type)) client = WeChatClient(APPID, SECRET) user_dict = client.user.get(msg.source) userpk = user_dict.get('email') or user_dict.get('userid') user = User.objects.filter(email=userpk).first() # client.message.send_text( msg.agent ,msg.source, 'user:{}'.format(user)) # log.debug('>>> user:{}'.format(user)) if msg.type == 'text': if re.match(r'.*(想)|(建议)', msg.content): Requirement.objects.get_or_create(email=userpk, content=msg.content) req_counts = Requirement.objects.filter(email=userpk).count() reply = TextReply(content='您的想法和建议我们已经收到({})'.format(req_counts), message=msg) return reply.render() content = '''现在我还不会聊天 但我会记录您提出的想法和建议 试着输入“...想...”或“...建议...” ''' reply = TextReply(content=content, message=msg) return reply.render() # log.debug('>>> response:{}'.format(response)) elif msg.type == 'event': log.debug('>>> msg.event:{}'.format(msg.event)) if msg.event == 'subscribe': return login_url(request, user_dict, client, userpk) if msg.event == 'location': log.debug('>>> msg:{}'.format(msg)) return add_location(user, msg.id, msg.latitude, msg.longitude, msg.precision) if msg.event == 'click': log.debug('>>> msg.key:{}'.format(msg.key)) if msg.key == 'login': return login_url(request, user_dict, client, userpk) elif msg.key == 'get_available_cars': return get_available_cars(user) elif msg.key == 'my_location_his': return get_location_his(user) elif msg.type == 'location': return add_location(user, msg.id, msg.location_x, msg.location_y, msg.scale, msg.label) reply = create_reply('') return reply.render()
def login_free(self): ''' 企业微信免登入口 :return: 跳转 ''' apps = request.env['funenc.wechat.apps'].sudo().search( [('is_exempts', '=', True)], limit=1) if len(apps) == 0: return '没有设置免登默认企业应用' corpid = apps.account_id.corp corpsecret = apps.app_secret if corpid is False or corpsecret is False: return '没有填写企业应用信息/没有填写可信域名' client = WeChatClient(corpid, corpsecret) url = client.oauth.authorize_url( 'http://' + request.httprequest.host.split(':')[0] + '/funenc_wechat/success_login_free_by_wechat') return http.redirect_with_hash(url)
def sent_msg(self): if not self.app_name: return False try: wx_conf = WxConf(app_name=self.app_name) client = WeChatClient(wx_conf.corp_id, wx_conf.Secret) print(client, 'client\n') print(self.get_title(), 'title') print('agent_id:', wx_conf.AgentId) print('url:', self.get_url()) print('desc:', self.get_description()) client.message.send_text_card(agent_id=wx_conf.AgentId, user_ids=self.user_ids, title=self.get_title(), description=self.get_description(), url=self.get_url()) print('out') except Exception as e: print(e) return True
def success_login_by_wechat(self, **kwargs): ''' 免登成功后登录后台 :param kwargs: dict类型,key值code对应value为传入的code :return: ''' # 获取用户信息 app = request.env["funenc.wechat.apps"].sudo().search( [("is_exempts", "=", True)], limit=1) client = WeChatClient(app.account_id.corp, app.app_secret) wx_userid = client.oauth.get_user_info(kwargs['code']) request.session['auth_code'] = kwargs['code'] password = {'model': 'wechat', 'auth_code': kwargs['code']} authenticate = request.session.authenticate(request.session.db, wx_userid['UserId'], password) if authenticate is False: return '该用户不在系统用户列表中' else: return http.redirect_with_hash('/web')
def sent_msg(self, obj=None): from action.models import WxConf if not self.app_name: return False try: wx_conf = WxConf(app_name=self.app_name) # print(wx_conf,'in') client = WeChatClient(wx_conf.corp_id, wx_conf.Secret) # print(client, '222') # print(self.get_title(obj), 'title') client.message.send_text_card( agent_id=wx_conf.AgentId, user_ids=self.user_ids, title=self.get_title(obj), description=self.get_description(obj), url=self.get_url(obj)) # print('out') except Exception as e: pass return True
def write_wechat(self, vals, department_old_user): if self.env['ir.config_parameter'].get_param('wechat.sync') == 'True': for department in self: client = WeChatClient(department.account.corp_id, department.account.corpsecret) client.department.update(department.id, name=department.name, parent_id=department.parent_id.id or 1, order=department.order) if 'users' in vals: old_user = department_old_user[department] new_user = [u.id for u in department.users] need_update_users = self.env[ 'odoosoft.wechat.enterprise.user'].browse( list(set(new_user) ^ set(old_user))) for user in need_update_users: client.user.update( user.login, department=[d.id for d in user.departments] or [1])
def warpper(request, *args, **kwargs): client = WeChatClient(APPID, SECRET) code = request.GET.get('code', None) #url = client.oauth.authorize_url(request.build_absolute_uri()) #log.debug('>>>auth get url:{} request.uri:{}'.format(url, request.build_absolute_uri())) if not code: return method(request, *args, **kwargs) try: user_info = client.oauth.get_user_info(code) userid = user_info.get('UserId') user_dict = client.user.get(userid) userpk = user_dict.get('email') or user_dict.get('userid') # user = User.objects.filter(email=userpk).first() except Exception as e: log.error('>>>Exception of oauth,errmsg:{},errcode:{}'.format( e.errmsg, e.errcode)) # 这里需要处理请求里包含的 code 无效的情况 return method(request, *args, **kwargs) if not userpk: return method(request, *args, **kwargs) if request.user.is_authenticated and request.user.email == userpk: log.debug( '>>>auth logged in already, user.email:{}'.format(userpk)) return method(request, *args, **kwargs) else: log.debug('>>>auth not login user_info:{}'.format(userpk)) user, created = User.objects.update_or_create( email=userpk, defaults=weixin_user_to_model(user_dict, client)) token = Token.objects.filter(email=userpk).first() if not token: token = Token.objects.create(email=userpk) user = auth.authenticate(uid=token.uid) log.debug('>>>auth user authenticated:{}'.format(user)) if user: auth.login(request, user) return method(request, *args, **kwargs)
class WeChatClientTestCase(unittest.TestCase): corp_id = '123456' secret = '123456' def setUp(self): self.client = WeChatClient(self.corp_id, self.secret) def test_fetch_access_token(self): with HTTMock(wechat_api_mock): token = self.client.fetch_access_token() self.assertEqual('1234567890', token['access_token']) self.assertEqual(7200, token['expires_in']) self.assertEqual('1234567890', self.client.access_token) def test_get_wechat_ips(self): with HTTMock(wechat_api_mock): res = self.client.misc.get_wechat_ips() self.assertEqual(['127.0.0.1'], res) def test_department_create(self): with HTTMock(wechat_api_mock): res = self.client.department.create('Test') self.assertEqual(2, res['id']) def test_department_update(self): with HTTMock(wechat_api_mock): res = self.client.department.update(2, 'Test 1') self.assertEqual(0, res['errcode']) def test_department_delete(self): with HTTMock(wechat_api_mock): res = self.client.department.delete(2) self.assertEqual(0, res['errcode']) def test_department_get(self): with HTTMock(wechat_api_mock): res = self.client.department.get() self.assertEqual(2, len(res)) def test_department_get_users(self): with HTTMock(wechat_api_mock): res = self.client.department.get_users(2) self.assertEqual(1, len(res)) def test_tag_create(self): with HTTMock(wechat_api_mock): res = self.client.tag.create('test') self.assertEqual('1', res['tagid']) def test_tag_update(self): with HTTMock(wechat_api_mock): res = self.client.tag.update(1, 'test') self.assertEqual(0, res['errcode']) def test_tag_delete(self): with HTTMock(wechat_api_mock): res = self.client.tag.delete(1) self.assertEqual(0, res['errcode']) def test_tag_get_users(self): with HTTMock(wechat_api_mock): res = self.client.tag.get_users(1) self.assertEqual(1, len(res['userlist'])) self.assertEqual(1, len(res['partylist'])) def test_tag_add_users(self): with HTTMock(wechat_api_mock): res = self.client.tag.add_users(1, [1, 2, 3]) self.assertEqual(0, res['errcode']) def test_tag_delete_users(self): with HTTMock(wechat_api_mock): res = self.client.tag.delete_users(1, [1, 2, 3]) self.assertEqual(0, res['errcode']) def test_tag_list(self): with HTTMock(wechat_api_mock): res = self.client.tag.list() self.assertEqual(2, len(res)) def test_batch_invite_user(self): with HTTMock(wechat_api_mock): res = self.client.batch.invite_user( 'http://example.com', '123456', '123456', '123|456', [123, 456], (12, 34), '' ) self.assertEqual(0, res['errcode']) def test_batch_sync_user(self): with HTTMock(wechat_api_mock): res = self.client.batch.sync_user( 'http://example.com', '123456', '123456', '12345678' ) self.assertEqual(0, res['errcode']) def test_batch_replace_user(self): with HTTMock(wechat_api_mock): res = self.client.batch.replace_user( 'http://example.com', '123456', '123456', '12345678' ) self.assertEqual(0, res['errcode']) def test_batch_replace_party(self): with HTTMock(wechat_api_mock): res = self.client.batch.replace_party( 'http://example.com', '123456', '123456', '12345678' ) self.assertEqual(0, res['errcode']) def test_batch_get_result(self): with HTTMock(wechat_api_mock): res = self.client.batch.get_result('123456') self.assertEqual(0, res['errcode']) self.assertEqual(1, res['status']) def test_jsapi_get_ticket(self): with HTTMock(wechat_api_mock): result = self.client.jsapi.get_ticket() self.assertEqual( 'bxLdikRXVbTPdHSM05e5u5sUoXNKd8-41ZO3MhKoyN5OfkWITDGgnr2fwJ0m9E8NYzWKVZvdVtaUgWvsdshFKA', # NOQA result['ticket'] ) self.assertEqual(7200, result['expires_in']) def test_jsapi_get_jsapi_signature(self): noncestr = 'Wm3WZYTPz0wzccnW' ticket = 'sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg' # NOQA timestamp = 1414587457 url = 'http://mp.weixin.qq.com?params=value' signature = self.client.jsapi.get_jsapi_signature( noncestr, ticket, timestamp, url ) self.assertEqual( '0f9de62fce790f9a083d5c99e95740ceb90c27ed', signature ) def test_user_convert_to_openid(self): with HTTMock(wechat_api_mock): res = self.client.user.convert_to_openid('zhangsan') self.assertEqual('oDOGms-6yCnGrRovBj2yHij5JL6E', res['openid']) self.assertEqual('wxf874e15f78cc84a7', res['appid']) def test_user_convert_to_user_id(self): with HTTMock(wechat_api_mock): user_id = self.client.user.convert_to_user_id( 'oDOGms-6yCnGrRovBj2yHij5JL6E' ) self.assertEqual('zhangsan', user_id) def test_upload_media(self): media_file = six.StringIO('nothing') with HTTMock(wechat_api_mock): media = self.client.media.upload('image', media_file) self.assertEqual('image', media['type']) self.assertEqual('12345678', media['media_id']) def test_material_get_count(self): with HTTMock(wechat_api_mock): res = self.client.material.get_count(1) self.assertEqual(37, res['total_count']) self.assertEqual(3, res['video_count']) self.assertEqual(10, res['voice_count']) self.assertEqual(12, res['image_count']) self.assertEqual(3, res['file_count']) self.assertEqual(6, res['mpnews_count']) def test_material_batchget_mpnews(self): with HTTMock(wechat_api_mock): res = self.client.material.batchget(1, 'mpnews') self.assertEqual('mpnews', res['type']) self.assertEqual(20, res['total_count']) self.assertEqual(3, res['item_count']) self.assertEqual( '2-G6nrLmr5EC3MMb_-zK1dDdzmd0p7cNliYu', res['itemlist'][0]['media_id'] ) def test_material_delete(self): media_id = '2-G6nrLmr5EC3MMb_-zK1dDdzmd0p7cNliYu' with HTTMock(wechat_api_mock): res = self.client.material.delete(1, media_id) self.assertEqual('deleted', res['errmsg']) def test_material_get_mpnews(self): media_id = '2-G6nrLmr5EC3MMb_-zK1dDdzmd0p7cNliYu' with HTTMock(wechat_api_mock): res = self.client.material.get_articles(1, media_id) self.assertEqual('mpnews', res['type']) self.assertEqual( '2-G6nrLmr5EC3MMb_-zK1dDdzmd0' + 'p7cNliYu9V5w7o8K0HuucGBZCzw4HmLa5C', res['mpnews']['articles'][0]['thumb_media_id'] ) self.assertEqual( '2-G6nrLmr5EC3MMb_-zK1dDdzmd0' + 'p7cNliYu9V5w7oovsUPf3wG4t9N3tE', res['mpnews']['articles'][1]['thumb_media_id'] ) def test_reraise_requests_exception(self): @urlmatch(netloc=r'(.*\.)?qyapi\.weixin\.qq\.com$') def _wechat_api_mock(url, request): return {'status_code': 404, 'content': '404 not found'} try: with HTTMock(_wechat_api_mock): self.client.material.get_count(1) except WeChatClientException as e: self.assertEqual(404, e.response.status_code) def test_shakearound_get_shake_info(self): with HTTMock(wechat_api_mock): res = self.client.shakearound.get_shake_info('123456') self.assertEqual(14000, res['page_id']) self.assertEqual('zhangsan', res['userid']) def test_service_get_provider_token(self): with HTTMock(wechat_api_mock): res = self.client.service.get_provider_token('provider_secret') self.assertEqual(7200, res['expires_in']) self.assertEqual('enLSZ5xxxxxxJRL', res['provider_access_token']) def test_service_get_login_info(self): with HTTMock(wechat_api_mock): res = self.client.service.get_login_info( 'enLSZ5xxxxxxJRL', 'auth_code' ) self.assertTrue(res['is_sys']) self.assertTrue(res['is_inner']) def test_chat_create(self): with HTTMock(wechat_api_mock): res = self.client.chat.create( '1', 'chat', 'zhangsan', ['zhangsan', 'lisi', 'wangwu'] ) self.assertEqual(0, res['errcode']) def test_chat_get(self): with HTTMock(wechat_api_mock): chat = self.client.chat.get('235364212115767297') self.assertEqual('235364212115767297', chat['chatid']) self.assertEqual('zhangsan', chat['owner']) def test_chat_update(self): with HTTMock(wechat_api_mock): res = self.client.chat.update( '235364212115767297', 'lisi', '企业应用中心', 'zhangsan', ['zhaoli'], ['zhangsan'] ) self.assertEqual(0, res['errcode']) def test_chat_quit(self): with HTTMock(wechat_api_mock): res = self.client.chat.quit('235364212115767297', 'lisi') self.assertEqual(0, res['errcode']) def test_chat_clear_notify(self): with HTTMock(wechat_api_mock): res = self.client.chat.clear_notify('zhangsan', 'single', 'lisi') self.assertEqual(0, res['errcode']) def test_chat_set_mute(self): mute_list = [ {'userid': 'zhangsan', 'status': 0}, {'userid': 'lisi', 'status': 1}, ] with HTTMock(wechat_api_mock): res = self.client.chat.set_mute(mute_list) self.assertEqual(0, res['errcode']) self.assertEqual(['zhangsan'], res['invaliduser']) def test_chat_send_text(self): with HTTMock(wechat_api_mock): res = self.client.chat.send_text( 'zhangsan', 'single', 'lisi', 'hello' ) self.assertEqual(0, res['errcode']) def test_chat_send_image(self): with HTTMock(wechat_api_mock): res = self.client.chat.send_image( 'zhangsan', 'single', 'lisi', 'media_id' ) self.assertEqual(0, res['errcode']) def test_chat_send_file(self): with HTTMock(wechat_api_mock): res = self.client.chat.send_file( 'zhangsan', 'single', 'lisi', 'media_id' ) self.assertEqual(0, res['errcode'])
from __future__ import absolute_import, unicode_literals from flask import Flask, request, abort, render_template from wechatpy.enterprise.crypto import WeChatCrypto from wechatpy.exceptions import InvalidSignatureException from wechatpy.enterprise.exceptions import InvalidCorpIdException from wechatpy.enterprise import parse_message, create_reply from wechatpy.enterprise.replies import ImageReply # import redis import requests import json import config from zabbix import ZabbixGraph from wechatpy.enterprise.client.api.media import WeChatMedia from wechatpy.enterprise import WeChatClient client = WeChatClient(config.CorpId, config.Secret) TOKEN = config.TOKEN EncodingAESKey = config.EncodingAESKey CorpId = config.CorpId app = Flask(__name__) #图灵机器人 def talks_robot(msg, ispuid=False): api_url = 'http://www.tuling123.com/openapi/api' apikey = config.turing_key if ispuid: data = {'key': apikey, 'info': msg.content, 'userid': msg.source} else:
class WeChatClientTestCase(unittest.TestCase): corp_id = '123456' secret = '123456' def setUp(self): self.client = WeChatClient(self.corp_id, self.secret) def test_fetch_access_token(self): with HTTMock(wechat_api_mock): token = self.client.fetch_access_token() self.assertEqual('1234567890', token['access_token']) self.assertEqual(7200, token['expires_in']) self.assertEqual('1234567890', self.client.access_token) def test_get_wechat_ips(self): with HTTMock(wechat_api_mock): res = self.client.misc.get_wechat_ips() self.assertEqual(['127.0.0.1'], res) def test_department_create(self): with HTTMock(wechat_api_mock): res = self.client.department.create('Test') self.assertEqual(2, res['id']) def test_department_update(self): with HTTMock(wechat_api_mock): res = self.client.department.update(2, 'Test 1') self.assertEqual(0, res['errcode']) def test_department_delete(self): with HTTMock(wechat_api_mock): res = self.client.department.delete(2) self.assertEqual(0, res['errcode']) def test_department_get(self): with HTTMock(wechat_api_mock): res = self.client.department.get() self.assertEqual(2, len(res)) def test_department_get_users(self): with HTTMock(wechat_api_mock): res = self.client.department.get_users(2) self.assertEqual(1, len(res)) def test_tag_create(self): with HTTMock(wechat_api_mock): res = self.client.tag.create('test') self.assertEqual('1', res['tagid']) def test_tag_update(self): with HTTMock(wechat_api_mock): res = self.client.tag.update(1, 'test') self.assertEqual(0, res['errcode']) def test_tag_delete(self): with HTTMock(wechat_api_mock): res = self.client.tag.delete(1) self.assertEqual(0, res['errcode']) def test_tag_get_users(self): with HTTMock(wechat_api_mock): res = self.client.tag.get_users(1) self.assertEqual(1, len(res['userlist'])) self.assertEqual(1, len(res['partylist'])) def test_tag_add_users(self): with HTTMock(wechat_api_mock): res = self.client.tag.add_users(1, [1, 2, 3]) self.assertEqual(0, res['errcode']) def test_tag_delete_users(self): with HTTMock(wechat_api_mock): res = self.client.tag.delete_users(1, [1, 2, 3]) self.assertEqual(0, res['errcode']) def test_tag_list(self): with HTTMock(wechat_api_mock): res = self.client.tag.list() self.assertEqual(2, len(res))
class WeChatClientTestCase(unittest.TestCase): corp_id = '123456' secret = '123456' def setUp(self): self.client = WeChatClient(self.corp_id, self.secret) def test_fetch_access_token(self): with HTTMock(wechat_api_mock): token = self.client.fetch_access_token() self.assertEqual('1234567890', token['access_token']) self.assertEqual(7200, token['expires_in']) self.assertEqual('1234567890', self.client.access_token) def test_get_wechat_ips(self): with HTTMock(wechat_api_mock): res = self.client.misc.get_wechat_ips() self.assertEqual(['127.0.0.1'], res) def test_department_create(self): with HTTMock(wechat_api_mock): res = self.client.department.create('Test') self.assertEqual(2, res['id']) def test_department_update(self): with HTTMock(wechat_api_mock): res = self.client.department.update(2, 'Test 1') self.assertEqual(0, res['errcode']) def test_department_delete(self): with HTTMock(wechat_api_mock): res = self.client.department.delete(2) self.assertEqual(0, res['errcode']) def test_department_get(self): with HTTMock(wechat_api_mock): res = self.client.department.get() self.assertEqual(2, len(res)) def test_department_get_users(self): with HTTMock(wechat_api_mock): res = self.client.department.get_users(2) self.assertEqual(1, len(res)) def test_tag_create(self): with HTTMock(wechat_api_mock): res = self.client.tag.create('test') self.assertEqual('1', res['tagid']) def test_tag_update(self): with HTTMock(wechat_api_mock): res = self.client.tag.update(1, 'test') self.assertEqual(0, res['errcode']) def test_tag_delete(self): with HTTMock(wechat_api_mock): res = self.client.tag.delete(1) self.assertEqual(0, res['errcode']) def test_tag_get_users(self): with HTTMock(wechat_api_mock): res = self.client.tag.get_users(1) self.assertEqual(1, len(res['userlist'])) self.assertEqual(1, len(res['partylist'])) def test_tag_add_users(self): with HTTMock(wechat_api_mock): res = self.client.tag.add_users(1, [1, 2, 3]) self.assertEqual(0, res['errcode']) def test_tag_delete_users(self): with HTTMock(wechat_api_mock): res = self.client.tag.delete_users(1, [1, 2, 3]) self.assertEqual(0, res['errcode']) def test_tag_list(self): with HTTMock(wechat_api_mock): res = self.client.tag.list() self.assertEqual(2, len(res)) def test_batch_invite_user(self): with HTTMock(wechat_api_mock): res = self.client.batch.invite_user( 'http://example.com', '123456', '123456', '123|456', [123, 456], (12, 34), '' ) self.assertEqual(0, res['errcode']) def test_batch_sync_user(self): with HTTMock(wechat_api_mock): res = self.client.batch.sync_user( 'http://example.com', '123456', '123456', '12345678' ) self.assertEqual(0, res['errcode']) def test_batch_replace_user(self): with HTTMock(wechat_api_mock): res = self.client.batch.replace_user( 'http://example.com', '123456', '123456', '12345678' ) self.assertEqual(0, res['errcode']) def test_batch_replace_party(self): with HTTMock(wechat_api_mock): res = self.client.batch.replace_party( 'http://example.com', '123456', '123456', '12345678' ) self.assertEqual(0, res['errcode']) def test_batch_get_result(self): with HTTMock(wechat_api_mock): res = self.client.batch.get_result('123456') self.assertEqual(0, res['errcode']) self.assertEqual(1, res['status'])
class HuoBiMessage: def __init__(self, name='huobi', webhook=None, agent_id=None, secret=None, company_id=None): self.name = name # 机器人webhook self.webhook = read_secret("wechat", "notechats", "huobi", name, "webhook", value=webhook) # 应用ID self.agent_id = read_secret("wechat", "notechats", "huobi", name, "agent_id", value=agent_id) # 企业ID self.company_id = read_secret("wechat", "notechats", "huobi", name, "company_id", value=company_id) # 应用Secret self.secret = read_secret("wechat", "notechats", "huobi", name, "secret", value=secret) self.client = WeChatClient(corp_id=self.company_id, secret=self.secret) def send_msg(self, msg): self.check_token() data = {"msgtype": "text", "text": {"content": msg}} self.client.message.send(agent_id=self.agent_id, user_ids=['NiuLiangTao', 'GuoYe'], party_ids=['3'], msg=data) self.send_to_qywx(msg) def send_to_qywx(self, msg): headers = {'Content-Type': 'application/json'} data = {"msgtype": "text", "text": {"content": msg}} data = json.dumps(data) r = requests.post(url=self.webhook, headers=headers, data=data) def check_token(self): # 通行密钥 access_token = None access_token = read_secret("wechat", "notechats", "huobi", self.name, "access_token") if not access_token: response = self.client.fetch_access_token() access_token = read_secret("wechat", "notechats", "huobi", self.name, "access_token", value=response['access_token'], expire_time=response['expires_in']) print(response) self.client.session.set(self.client.access_token_key, access_token) return access_token
class WeChatClientTestCase(unittest.TestCase): corp_id = "123456" secret = "123456" def setUp(self): self.client = WeChatClient(self.corp_id, self.secret) def test_fetch_access_token(self): with HTTMock(wechat_api_mock): token = self.client.fetch_access_token() self.assertEqual("1234567890", token["access_token"]) self.assertEqual(7200, token["expires_in"]) self.assertEqual("1234567890", self.client.access_token) def test_get_wechat_ips(self): with HTTMock(wechat_api_mock): res = self.client.misc.get_wechat_ips() self.assertEqual(["127.0.0.1"], res) def test_department_create(self): with HTTMock(wechat_api_mock): res = self.client.department.create("Test") self.assertEqual(2, res["id"]) def test_department_update(self): with HTTMock(wechat_api_mock): res = self.client.department.update(2, "Test 1") self.assertEqual(0, res["errcode"]) def test_department_delete(self): with HTTMock(wechat_api_mock): res = self.client.department.delete(2) self.assertEqual(0, res["errcode"]) def test_department_get(self): with HTTMock(wechat_api_mock): res = self.client.department.get() self.assertEqual(2, len(res)) def test_department_get_users(self): with HTTMock(wechat_api_mock): res = self.client.department.get_users(2) self.assertEqual(1, len(res)) def test_tag_create(self): with HTTMock(wechat_api_mock): res = self.client.tag.create("test") self.assertEqual("1", res["tagid"]) def test_tag_update(self): with HTTMock(wechat_api_mock): res = self.client.tag.update(1, "test") self.assertEqual(0, res["errcode"]) def test_tag_delete(self): with HTTMock(wechat_api_mock): res = self.client.tag.delete(1) self.assertEqual(0, res["errcode"]) def test_tag_get_users(self): with HTTMock(wechat_api_mock): res = self.client.tag.get_users(1) self.assertEqual(1, len(res["userlist"])) self.assertEqual(1, len(res["partylist"])) def test_tag_add_users(self): with HTTMock(wechat_api_mock): res = self.client.tag.add_users(1, [1, 2, 3]) self.assertEqual(0, res["errcode"]) def test_tag_delete_users(self): with HTTMock(wechat_api_mock): res = self.client.tag.delete_users(1, [1, 2, 3]) self.assertEqual(0, res["errcode"]) def test_tag_list(self): with HTTMock(wechat_api_mock): res = self.client.tag.list() self.assertEqual(2, len(res)) def test_batch_invite_user(self): with HTTMock(wechat_api_mock): res = self.client.batch.invite_user( "http://example.com", "123456", "123456", "123|456", [123, 456], (12, 34), "" ) self.assertEqual(0, res["errcode"]) def test_batch_sync_user(self): with HTTMock(wechat_api_mock): res = self.client.batch.sync_user("http://example.com", "123456", "123456", "12345678") self.assertEqual(0, res["errcode"]) def test_batch_replace_user(self): with HTTMock(wechat_api_mock): res = self.client.batch.replace_user("http://example.com", "123456", "123456", "12345678") self.assertEqual(0, res["errcode"]) def test_batch_replace_party(self): with HTTMock(wechat_api_mock): res = self.client.batch.replace_party("http://example.com", "123456", "123456", "12345678") self.assertEqual(0, res["errcode"]) def test_batch_get_result(self): with HTTMock(wechat_api_mock): res = self.client.batch.get_result("123456") self.assertEqual(0, res["errcode"]) self.assertEqual(1, res["status"]) def test_jsapi_get_ticket(self): with HTTMock(wechat_api_mock): result = self.client.jsapi.get_ticket() self.assertEqual( "bxLdikRXVbTPdHSM05e5u5sUoXNKd8-41ZO3MhKoyN5OfkWITDGgnr2fwJ0m9E8NYzWKVZvdVtaUgWvsdshFKA", # NOQA result["ticket"], ) self.assertEqual(7200, result["expires_in"]) def test_jsapi_get_jsapi_signature(self): noncestr = "Wm3WZYTPz0wzccnW" ticket = "sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg" # NOQA timestamp = 1414587457 url = "http://mp.weixin.qq.com?params=value" signature = self.client.jsapi.get_jsapi_signature(noncestr, ticket, timestamp, url) self.assertEqual("0f9de62fce790f9a083d5c99e95740ceb90c27ed", signature) def test_user_convert_to_openid(self): with HTTMock(wechat_api_mock): res = self.client.user.convert_to_openid("zhangsan") self.assertEqual("oDOGms-6yCnGrRovBj2yHij5JL6E", res["openid"]) self.assertEqual("wxf874e15f78cc84a7", res["appid"]) def test_user_convert_to_user_id(self): with HTTMock(wechat_api_mock): user_id = self.client.user.convert_to_user_id("oDOGms-6yCnGrRovBj2yHij5JL6E") self.assertEqual("zhangsan", user_id) def test_upload_media(self): media_file = six.StringIO("nothing") with HTTMock(wechat_api_mock): media = self.client.media.upload("image", media_file) self.assertEqual("image", media["type"]) self.assertEqual("12345678", media["media_id"]) def test_material_get_count(self): with HTTMock(wechat_api_mock): res = self.client.material.get_count(1) self.assertEqual(37, res["total_count"]) self.assertEqual(3, res["video_count"]) self.assertEqual(10, res["voice_count"]) self.assertEqual(12, res["image_count"]) self.assertEqual(3, res["file_count"]) self.assertEqual(6, res["mpnews_count"]) def test_material_batchget_mpnews(self): with HTTMock(wechat_api_mock): res = self.client.material.batchget(1, "mpnews") self.assertEqual("mpnews", res["type"]) self.assertEqual(20, res["total_count"]) self.assertEqual(3, res["item_count"]) self.assertEqual("2-G6nrLmr5EC3MMb_-zK1dDdzmd0p7cNliYu", res["itemlist"][0]["media_id"]) def test_material_delete(self): media_id = "2-G6nrLmr5EC3MMb_-zK1dDdzmd0p7cNliYu" with HTTMock(wechat_api_mock): res = self.client.material.delete(1, media_id) self.assertEqual("deleted", res["errmsg"]) def test_material_get_mpnews(self): media_id = "2-G6nrLmr5EC3MMb_-zK1dDdzmd0p7cNliYu" with HTTMock(wechat_api_mock): res = self.client.material.get_articles(1, media_id) self.assertEqual("mpnews", res["type"]) self.assertEqual( "2-G6nrLmr5EC3MMb_-zK1dDdzmd0" + "p7cNliYu9V5w7o8K0HuucGBZCzw4HmLa5C", res["mpnews"]["articles"][0]["thumb_media_id"], ) self.assertEqual( "2-G6nrLmr5EC3MMb_-zK1dDdzmd0" + "p7cNliYu9V5w7oovsUPf3wG4t9N3tE", res["mpnews"]["articles"][1]["thumb_media_id"], ) def test_reraise_requests_exception(self): @urlmatch(netloc=r"(.*\.)?qyapi\.weixin\.qq\.com$") def _wechat_api_mock(url, request): return {"status_code": 404, "content": "404 not found"} try: with HTTMock(_wechat_api_mock): self.client.material.get_count(1) except WeChatClientException as e: self.assertEqual(404, e.response.status_code) def test_shakearound_get_shake_info(self): with HTTMock(wechat_api_mock): res = self.client.shakearound.get_shake_info("123456") self.assertEqual(14000, res["page_id"]) self.assertEqual("zhangsan", res["userid"]) def test_service_get_provider_token(self): with HTTMock(wechat_api_mock): res = self.client.service.get_provider_token("provider_secret") self.assertEqual(7200, res["expires_in"]) self.assertEqual("enLSZ5xxxxxxJRL", res["provider_access_token"]) def test_service_get_login_info(self): with HTTMock(wechat_api_mock): res = self.client.service.get_login_info("enLSZ5xxxxxxJRL", "auth_code") self.assertTrue(res["is_sys"]) self.assertTrue(res["is_inner"]) def test_chat_create(self): with HTTMock(wechat_api_mock): res = self.client.chat.create("1", "chat", "zhangsan", ["zhangsan", "lisi", "wangwu"]) self.assertEqual(0, res["errcode"]) def test_chat_get(self): with HTTMock(wechat_api_mock): chat = self.client.chat.get("235364212115767297") self.assertEqual("235364212115767297", chat["chatid"]) self.assertEqual("zhangsan", chat["owner"]) def test_chat_update(self): with HTTMock(wechat_api_mock): res = self.client.chat.update("235364212115767297", "lisi", "企业应用中心", "zhangsan", ["zhaoli"], ["zhangsan"]) self.assertEqual(0, res["errcode"]) def test_chat_quit(self): with HTTMock(wechat_api_mock): res = self.client.chat.quit("235364212115767297", "lisi") self.assertEqual(0, res["errcode"]) def test_chat_clear_notify(self): with HTTMock(wechat_api_mock): res = self.client.chat.clear_notify("zhangsan", "single", "lisi") self.assertEqual(0, res["errcode"]) def test_chat_set_mute(self): mute_list = [{"userid": "zhangsan", "status": 0}, {"userid": "lisi", "status": 1}] with HTTMock(wechat_api_mock): res = self.client.chat.set_mute(mute_list) self.assertEqual(0, res["errcode"]) self.assertEqual(["zhangsan"], res["invaliduser"]) def test_chat_send_text(self): with HTTMock(wechat_api_mock): res = self.client.chat.send_text("zhangsan", "single", "lisi", "hello") self.assertEqual(0, res["errcode"]) def test_chat_send_image(self): with HTTMock(wechat_api_mock): res = self.client.chat.send_image("zhangsan", "single", "lisi", "media_id") self.assertEqual(0, res["errcode"]) def test_chat_send_file(self): with HTTMock(wechat_api_mock): res = self.client.chat.send_file("zhangsan", "single", "lisi", "media_id") self.assertEqual(0, res["errcode"])
''' @author: LoRexxar @contact: [email protected] @file: wechathandler.py @time: 2020/9/24 15:27 @desc: ''' from utils.log import logger from wechatpy.enterprise import WeChatClient from LSpider.settings import LOGHANDER_IS_OPEN_WEIXIN from LSpider.settings import WECHAT_NOTICE, WECHAT_NOTICE_DEBUG enterprise = WeChatClient( corp_id=WECHAT_NOTICE['corp_id'], secret=WECHAT_NOTICE['secret'], ) enterprise_debug = WeChatClient( corp_id=WECHAT_NOTICE_DEBUG['corp_id'], secret=WECHAT_NOTICE_DEBUG['secret'], ) def send_text(content): enterprise.message.send_text( agent_id=WECHAT_NOTICE['agent_id'], user_ids='guoyingqi0', tag_ids='', content=content, # title="HaoTian 实时监控警报"
def setUp(self): self.client = WeChatClient(self.corp_id, self.secret)