钉钉企业注册:点击跳转
官方文档:点击跳转
悦哥钉钉登录博客:点击查看
钉钉登录
1.注册钉钉企业
2.登录企业后台管理
3.选择应用开发
4.移动接入应用->登录

5.创建扫码登录应用授权


6.获取创建以后企业应用的appid,appsecret,回调域名

代码示例
1 2 3 4 5 6 7 8 9 10
| urls:path('ding_url/',ding_login),
def ding_login(request): appid = 'dingoab7edavvvtdcwqcra' redirect_uri = 'http://127.0.0.1:8000/callback/' return redirect('https://oapi.dingtalk.com/connect/qrconnect?appid=' +appid+'&response_type=code&scope=snsapi_login&state=STATE&redirect_uri='+redirect_uri)
|
7.钉钉会将code返回到回调网址中

因为钉钉只有java和php的sdk,所以使用hmac加密自己写sdk
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| urls:path('callback/',ding_back),
def ding_back(request): code = request.GET.get('code',None) print('code是:%s'%code)
t = time.time() timestamp = str(int(round(t*1000))) print('时间:',timestamp)
appSecret = '8F3q2UmU-2ljILNJAtodsnFaLllpMEioNWI5GRtnoz5OyubMYbiTxlVC3yrPmHiE' signature = base64.b64encode(hmac.new(appSecret.encode('utf-8'),timestamp.encode('utf-8'),digestmod=sha256).digest()) payload = {'tmp_auth_code':code} headers = {'Content-Type':'application/json'} res = requests.post('https://oapi.dingtalk.com/sns/getuserinfo_bycode?' 'accessKey=dingoab7edavvvtdcwqcra×tamp='+timestamp+ '&signature='+urllib.parse.quote(signature.decode('utf-8')),headers=headers,data=json.dumps(payload))
res_dict = json.loads(res.text) print(res_dict) username = str(res_dict['user_info']['nick']) user = User.objects.filter(username=username).first() if user: user.username = username print('已经登陆过,用户名',username) else: user = User(username=username) user.save() print('首次注册,用户名',username) return redirect('http://localhost:8080/?username='+username)
|
