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 ""