关于微信公众号网页与django授权记录
最近因为工作需要,需要在django中调用微信公众号中的接口来对公众号中打开的网页进行授权,所以接触到了微信的授权与django中接口的调用。
首先,在django中需要创建两个view,一个view用来获取微信授权的code,另一个view用来获取openid等用户的信息,话不多说,我们来分析第一个view
def weixinbind(request):
if request.method == 'GET':
try:
return HttpResponseRedirect(
'https://open.weixin.qq.com/connect/oauth2/authorize?appid=这里写你的appid&redirect_uri=这里写你的回调函数地址,就是第二个view注册的路由地址&response_type=code&scope=snsapi_userinfo#wechat_redirect')
except Exception as e:
log('error', str(e), False)
return render(request, '500.html')
需要注意的亮点就是appid后面写的是你在微信开发者文档中注册通过的appid,而redirect_uri写的是你回调函数的路由地址,总地址,注意必须是https的,后面的response_type和scope可以在开发者文档中根据自己的需求进行填写。
在这里我需要着重提醒,redirect_uri中的域名必须是注册在微信开发者中心里面这个小程序/公众号中的域名。
在django中,redirect_uri中的地址必须用urllib.parse进行拆分
比如我有一个地址是https://www.qq.com/weixin_bind_callback,那么写在redirect_uri中时就需要用urllib.parse进行拆分
s = https://www.qq.com/weixin_bind_callback
urllib.parse.quote(s,safe='')
这样我们得到的地址就是https%3A%2F%2Fwww.qq.com%2Fweixin_bind_callback
以上就是第一个获取code的view
下面我们来说第二个view,用来获取用户的基本信息
def weixinbind_callback(request):
if request.method == 'GET':
code = request.GET.get('code')
state = request.GET.get('state')
appid = xxxxx' # 你的公众号appid
appsecret = xxxx' # 你的公众号appsecret
r = requests.get(
'https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code' % (
appid, appsecret, code))
d = json.loads(r.text)
r = requests.get(
'https://api.weixin.qq.com/sns/userinfo?access_token=%s&openid=%s&lang=zh_CN' % (
d['access_token'], d['openid'])
)
print(r.content)
dd = json.loads(r.content.decode('utf8'))
openid = dd['openid']
return HttpResponseRedirect('/wechat/index')
因为我主要需要用户的openid所以我只获取了用户的openid,这就是在django中调用微信授权接口然后进行用户下一步操作的两个view,希望对各位有所帮助。
如果大家还有什么不太理解的地方可以多看看开发者文档,我相信对大家会很有帮助的