wx.login({ success(res) { if (res.code) { //发起网络请求 wx.request({ url: app.globalData.host+'login', method:"post", data: { code: res.code } }) } else { console.log('登陆失败!' + res.errMsg) } } })
#.......省略一下配置路由啥的 class Login(APIView): def post(self,request): code = request.data.get('code') print(code,type(code)) #061HMtlG0hAQ6d2hOYkG0DlhlG0HMtlh <class 'str'>
GET https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
appid | string | 是 | 小程序 appId | |
secret | string | 是 | 小程序 appSecret | |
js_code | string | 是 | 登陆时获取的 code | |
grant_type | string | 是 | 受权类型,此处只需填写 authorization_code |
返回的 JSON 数据包html
属性 | 类型 | 说明 |
---|---|---|
openid | string | 用户惟一标识 |
session_key | string | 会话密钥 |
unionid | string | 用户在开放平台的惟一标识符,在知足 UnionID 下发条件的状况下会返回,详见 UnionID 机制说明。 |
errcode | number | 错误码 |
errmsg | string | 错误信息 |
值 | 说明 | 最低版本 |
---|---|---|
-1 | 系统繁忙,此时请开发者稍候再试 | |
0 | 请求成功 | |
40029 | code 无效 | |
45011 | 频率限制,每一个用户每分钟100次 |
import requests class Login(APIView): def post(self,request): code = request.data.get('code') #https: // api.weixin.qq.com / sns / jscode2session?appid = {} & secret ={} & js_code = {} & grant_type = authorization_code url= f"https://api.weixin.qq.com/sns/jscode2session?appid=xxxx&secret=xxxx&js_code={code}&grant_type=authorization_code" #appid与secret不一样的开发者不同 reponse=requests.get(url) #由于返回值是json的形式 data=reponse.json() print(data)
appid看你小程序中设置了是哪一个appid前端
对于的appid有对应的secretpython
其中appid
以及secret
均在你小程序帐号中
数据库
import hashlib class Login(APIView): ........ if data.get("openid") and data.get("session_key"): md5 = hashlib.md5() md5.update(data['openid'].encode("utf-8")) md5.update(data['session_key'].encode("utf-8")) key = md5.hexdigest() val =data['session_key']+"&"+data['openid'] print(key,val)
from rest_framework.response import Response from django.core.cache import cache class Login(APIView): ........ cache.set(key,val) #存缓存中较少对于数据库的压力 has_user=models.Wxuser.objects.filter(openid=data['openid']).first() #将惟一标识进行存储 if not has_user: models.Wxuser.objects.create(openid=data['openid']) return Response({ "code": 200, "msg": "ok", "data":{'login_key':key} #发送login_key其目的是为了后续能够直接去缓存取对于信息 })
目的,标识已登入以及获取标识,方便后续对于用户信息的查找django
var that = this wx.login({ success(res) { if (res.code) { //发起网络请求 wx.request({ url: app.globalData.host + 'login', method: "post", data: { code: res.code }, success(res) { console.log(res.data.data.login_key) console.log(that) that.setData({ login_key: res.data.data.login_key } ) }, }) }else { console.log('登陆失败!' + res.errMsg) } } })
其中setData
方法的必须对象是整个页面json