def put(self, siteid, uid): user_info = self.storage.get_user_info(uid) # Update user info from wechat resp = yield wxclient.update_user_info(user_info["appid"], user_info["openid"]) if resp["err_code"] != 0: self.send_response(err_code=resp["err_code"]) else: resp["data"]["uid"] = int(uid) self.send_response(data=resp["data"])
def put(self, siteid, uid): user_info = self.storage.get_user_info(uid) # Update user info from wechat resp = yield wxclient.update_user_info(user_info['appid'], user_info['openid']) if resp['err_code'] != 0: self.send_response(err_code=resp['err_code']) else: resp['data']['uid'] = int(uid) self.send_response(data=resp['data'])
def post(self, siteid): appid = self.get_argument("appid") appinfo = self.storage.get_app_info(appid=appid) if not appinfo: self.send_response(err_code=3201) raise tornado.gen.Return() openid = self.get_argument("openid", "") if openid: res = yield wxclient.update_user_info(appid, openid) if res["err_code"] == 0: self.send_response(data=res["data"]) raise tornado.gen.Return() code = self.get_argument("code", "") if code: req_data1 = {"code": code, "appid": appid, "secret": appinfo["secret"], "grant_type": "authorization_code"} try: resp1 = yield httputils.get_dict(url=url.wechat_oauth_access_token, data=req_data1) except tornado.httpclient.HTTPError: self.send_response(err_code=1001) raise tornado.gen.Return() resp_data1 = self.parse_oauth_resp(resp1) if resp_data1: openid = resp_data1["openid"] res = {"openid": openid, "appid": appid} # Get user info from wechat if "snsapi_userinfo" in [v.strip() for v in resp_data1["scope"].split(",")]: req_data2 = {"access_token": resp_data1["access_token"], "openid": openid, "lang": "zh_CN"} try: resp2 = yield httputils.get_dict(url=url.wechat_oauth_userinfo, data=req_data2) except tornado.httpclient.HTTPError: self.send_response(err_code=1001) raise tornado.gen.Return() resp_data2 = self.parse_oauth_resp(resp2) if resp_data2: res.update(resp_data2) post_resp_data = dtools.transfer(res, copys=user_attrs, allow_empty=False) self.send_response(post_resp_data) self.storage.add_user_info(post_resp_data) raise tornado.gen.Return() self.send_response(err_code=1)
def post(self): post_args = dtools.xml2dict(self.request.body.decode('utf8')) logging.info(post_args) appinfo = self.storage.get_app_info(openid=post_args['ToUserName']) appid = appinfo['appid'] crypter = None if appinfo['is_encrypted']: crypter = Prpcrypt(appinfo['encoding_key']) plain_xml = crypter.decrypt(post_args['Encrypt'], appid) if plain_xml: post_args = dtools.xml2dict(plain_xml) else: # TODO: error pass req_data = dtools.transfer( post_args, renames=[ ('FromUserName', 'openid'), ('MsgType', 'msg_type'), ('MsgId', 'msg_id'), ('CreateTime', 'msg_time'), ('Content', 'content'), ('Event', 'event_type'), ('PicUrl', 'pic_url'), ('Location_X', 'latitude'), ('Location_Y', 'longitude'), ('Label', 'label'), ('MediaId', 'media_id')], allow_empty=False ) logging.info('message from tencent: %s', req_data) req_data['appid'] = appid site_info = self.storage.get_site_info(appinfo['siteid']) security.add_sign(req_data, site_info['sitekey']) try: resp = yield httputils.post_dict( url=site_info['msg_notify_url'], data=req_data) except tornado.httpclient.HTTPError: self.send_response(err_code=9002) raise tornado.gen.Return() if resp.code != 200: self.send_response(err_code=9002) raise tornado.gen.Return() try: resp_data = json.loads(resp.body.decode('utf8')) if resp_data.get('err_code') == 0: wx_resp = build_response(from_id=post_args['ToUserName'], to_id=post_args['FromUserName'], data=resp_data.get('data')) if appinfo['is_encrypted']: wx_resp = encrypt_data(wx_resp, crypter, appid) self.send_response(wx_resp) else: self.send_response(err_code=9003) except ValueError: self.send_response(err_code=9101) # Add basic user info openid = req_data['openid'] user_info = self.storage.get_user_info(appid=appid, openid=openid) if not user_info: if appinfo['is_verified']: yield wxclient.update_user_info(appid, openid) else: self.storage.add_user_info({ 'appid': appid, 'openid': openid, 'fakeid': openid }) # Use mock_browser to get user info if not appinfo['is_protected'] and (not user_info or not user_info.get('nickname')) and not req_data.get( 'event_type'): user_resp = yield wxclient.mock_browser.find_user( appid=appid, timestamp=int(req_data['msg_time']), mtype=req_data['msg_type'], content=req_data.get('content', '') ) if user_resp['err_code'] == 0: more_info = { 'appid': appid, 'openid': openid, 'fakeid': user_resp['data']['fakeid'], 'nickname': user_resp['data']['nick_name'] } if not appinfo['is_verified']: contact_resp = yield wxclient.mock_browser.get_contact_info( appid=appid, fakeid=user_resp['data']['fakeid'], msg_id=user_resp['data']['id'] ) contact_info = contact_resp['data']['contact_info'] more_info.update({ 'sex': contact_info['gender'], 'city': contact_info['city'], 'province': contact_info['province'], 'country': contact_info['country'] }) logging.info('userinfo updated: %s', more_info) self.storage.add_user_info(more_info)
def post(self, siteid): appid = self.get_argument('appid') appinfo = self.storage.get_app_info(appid=appid) if not appinfo: self.send_response(err_code=3201) raise tornado.gen.Return() openid = self.get_argument('openid', '') if openid: res = yield wxclient.update_user_info(appid, openid) if res['err_code'] == 0: self.send_response(data=res['data']) raise tornado.gen.Return() code = self.get_argument('code', '') if code: req_data1 = { 'code': code, 'appid': appid, 'secret': appinfo['secret'], 'grant_type': 'authorization_code', } try: resp1 = yield httputils.get_dict( url=url.wechat_oauth_access_token, data=req_data1) except tornado.httpclient.HTTPError: self.send_response(err_code=1001) raise tornado.gen.Return() resp_data1 = self.parse_oauth_resp(resp1) if resp_data1: openid = resp_data1['openid'] res = { 'openid': openid, 'appid': appid, } # Get user info from wechat if 'snsapi_userinfo' in [ v.strip() for v in resp_data1['scope'].split(',') ]: req_data2 = { 'access_token': resp_data1['access_token'], 'openid': openid, 'lang': 'zh_CN' } try: resp2 = yield httputils.get_dict( url=url.wechat_oauth_userinfo, data=req_data2) except tornado.httpclient.HTTPError: self.send_response(err_code=1001) raise tornado.gen.Return() resp_data2 = self.parse_oauth_resp(resp2) if resp_data2: res.update(resp_data2) post_resp_data = dtools.transfer(res, copys=user_attrs, allow_empty=False) self.send_response(post_resp_data) self.storage.add_user_info(post_resp_data) raise tornado.gen.Return() self.send_response(err_code=1)