代码实现
1.获取登录跳转地址 注意(回调地址必须和应用中 一致)
appid = 'dingoa2kslvfvtiaeic7wi' # 应用中的appid
redirect_uri = 'http://127.0.0.1:8000/user/dindin_back/' # 钉钉返回信息的回调地址
return {
"dindin_url": "https://oapi.dingtalk.com/connect/qrconnect?appid=" + appid + '&response_type=code&scope=snsapi_login&state=STATE&redirect_uri=' + redirect_uri}
2.回调地址 必须和上边路由中填写一致 否则跳转不过去
登录完成后会携带code值 跳转到回调地址
import time
import hmac
import base64
from hashlib import sha256
import urllib
import json
code = request.GET.get("code")
t = time.time()
# 时间戳
timestamp = str((int(round(t * 1000))))
appSecret = 'YCoNtgYLMDKNS9096KKrnDDazZ7IgJHtGiOA7Y0YvTB8c4tn2vRBvaj_GTIvMkHQ'
# 构造签名
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?signature=' + urllib.parse.quote(
signature.decode("utf-8")) + "×tamp=" + timestamp + "&accessKey=dingoa2kslvfvtiaeic7wi",
data=json.dumps(payload), headers=headers)
# 转换为json格式
res_dict = json.loads(res.text)
return res_dict