github.com/jincm/wesharechain@v0.0.0-20210122032815-1537409ce26a/server/block/api/wx_account/login.py (about) 1 #coding:utf-8 2 3 from tornado.web import RequestHandler 4 import tornado.httpclient 5 from six.moves.urllib import parse 6 from util.exception import ParamExist 7 from util import common_util 8 import logging 9 import json 10 from operation.wx_user import WxUserOp 11 12 from util.ini_client import ini_load 13 14 _conf = ini_load('config/wx.ini') 15 game_dic_con = _conf.get_fields('key') 16 17 LOG = logging.getLogger(__name__) 18 19 class LoginHandler(RequestHandler): 20 def initialize(self, **kwds): 21 pass 22 23 def post(self): 24 try: 25 code = self.get_argument('code', '') 26 wx_name = self.get_argument('wx_name', '') 27 invitation = self.get_argument('invitation', '') 28 phone = self.get_argument('phone', '') 29 verify_code = self.get_argument('verify_code', '') 30 #判断下验证码 31 32 33 34 #通过邀请码获取邀请人的用户id 35 referrer_id = self.getReferrer(invitation) 36 # 微信服务器验证 37 url = "https://api.weixin.qq.com/sns/jscode2session" 38 app_id = game_dic_con.get("appid") 39 secret = game_dic_con.get("secret") 40 params = { 41 "appid": app_id, 42 "secret": secret, 43 "js_code": code, 44 "grant_type": "authorization_code" 45 } 46 http_client = tornado.httpclient.HTTPClient() 47 response = http_client.fetch("%s?%s" % (url, parse.urlencode(params))) 48 dic_body = json.loads(response.body) 49 openid = dic_body.get('openid') 50 session_key = dic_body.get('session_key') 51 # 存储openid和session_key,并返回识别session串 52 op = WxUserOp() 53 exit_app = op.info_by_openid(openid=openid) 54 if exit_app: 55 op.update(exit_app.get("id"), session_key=session_key) 56 token = common_util.gen_token(exit_app.get("user_id"), 0) 57 self.finish(json.dumps({'state': 0, 'id': exit_app.get("user_id"), 'token': token})) 58 else: 59 _ = op.create(code=code, 60 openid=openid, 61 session_key=session_key, 62 wx_name=wx_name, 63 referrer_id=referrer_id, 64 phone=phone, 65 ) 66 token = common_util.gen_token(_.get("user_id"), 0) 67 self.finish(json.dumps({'state': 0, 'id': _.get("user_id"), 'token': token})) 68 except ParamExist as ex: 69 LOG.error("Wx login error:%s" % ex) 70 self.finish(json.dumps({'state': 9, 'message': 'params exit'})) 71 except Exception as ex: 72 LOG.error("Wx login error:%s" % ex) 73 self.finish(json.dumps({'state': 10, 'message': 'wx action error'})) 74 75 def getReferrer(self, invitation): 76 """ 77 通过邀请码获取邀请人的用户id 78 :param invitation: 79 :return: 80 """ 81 return ""