下面这些链接都 需要自己拼接
第一步:获取AppID AppSecret (不做解释,自己去微信公众平台申请)
第二步:生成扫描二维码,获取code
redirect_uri 只能存放一个域名,需要配置对!!!
例如: https://www.cvccode.com
AppID 这个是服务号的
第三步:通过code获取access_token
https://api.weixin.qq.com/sns/oauth2/access_token?appid=AppID&secret=AppSecret&code=00294221aeb06261d5966&grant_type=authorization_code
第四步:因接口频率有次数限制,如果需要,刷新access_token
第五步:通过access_token和openid获取用户的基础信息,包括头像、昵称、性别、地区
-
from urllib.parse
import quote
-
import requests
-
from django.shortcuts
import redirect
-
-
from community.models
import Friends
-
from utils.connection_pool
import my_redis_pool
-
from .models
import User,User_wx
-
from django.http
import HttpResponse
-
import json
-
from utils.forms
import LoginForm,CodeLoginForm,FindPasswordForm
-
import datetime
-
from django.contrib.auth
import authenticate
-
from django.db
import transaction
-
import uuid
-
from utils.common
import md5_openid, get_code, check_user
-
from utils.aliyunsm
import send_sms
-
-
# 获取地址
-
# WX_IP XXXXXX 你的IP地址
-
def Wxpath(request):
-
if request.method ==
"GET":
-
url=
"https://open.weixin.qq.com/connect/qrconnect?appid={0}&redirect_uri={1}&scope=snsapi_login&response_type=code&state=c76d65ce880a205a3edebf76336ca135&connect_redirect=1#wechat_redirect"
-
redirect_uri =
"https://cvccode.com/chaowei/wxlogin/"
-
redirect_uri = quote(redirect_uri)
-
return redirect(url.format(WX_IP,redirect_uri))
-
-
-
# 微信登录 WX_IP WX_SCREXT
-
-
def Wxlogin(request):
-
if request.method==
"GET":
-
# 获取用户信息
-
code = request.GET.get(
"code")
-
if
not code:
-
result = {
"result":
"1",
"data":
"缺少参数"}
-
return HttpResponse(json.dumps(result, ensure_ascii=
False), content_type=
"application/json,charset=utf-8")
-
-
user = check_user(request)
-
token_url =
"https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&connect_redirect=1&grant_type=authorization_code"
-
data = requests.get(token_url.format(WX_IP, WX_SCRECT, code))
-
data = json.loads(data.content.decode(
"utf-8"))
-
-
# 获取 access_token
-
access_token = data[
'access_token']
-
open_id = data[
'openid']
-
unionid = data[
'unionid']
-
-
# 绑定用户
-
if user:
-
user.bindWeChat =
'1'
-
user.unionid = unionid
-
User_wx.objects.create(
-
user_id=user.id,
-
union_id=unionid,
-
update_time=datetime.datetime.now(),
-
web_open_id=data[
'openid']
-
)
-
result = {
"result":
"0",
"data":
"绑定微信成功"}
-
return HttpResponse(json.dumps(result, ensure_ascii=
False), content_type=
"application/json,charset=utf-8")
-
-
# 第一次扫码登陆
-
else:
-
# 获取用户信息
-
user_url =
"https://api.weixin.qq.com/sns/userinfo?access_token={0}&openid={1}"
-
data = requests.get(user_url.format(access_token, open_id))
-
data = json.loads(data.content.decode(
"utf-8"))
-
-
obj = User.objects.create_user(
-
username=data[
'nickname'],
-
open_id=md5_openid(),
-
password=
"123456",
-
avatar=data[
'headimgurl'],
-
unionid=data[
'unionid'],
-
date_joined=datetime.datetime.now(),
-
last_login=datetime.datetime.now()
-
)
-
User_wx.objects.create(
-
user_id= obj.id,
-
union_id = data[
'unionid'],
-
update_time = datetime.datetime.now(),
-
web_open_id = data[
'openid']
-
)
-
Friends.objects.create(
-
is_del=
0,
-
friend_id=obj.id,
-
user_id=obj.id,
-
update_time=datetime.datetime.now()
-
)
-
token = set_token(obj)
-
result = {
-
"result":
0,
-
"data":{
-
"userInfo":{
-
"name": obj.username,
-
"child_name": obj.child_name,
-
"icon": obj.avatar,
-
"token": str(token),
-
"mobile": obj.mobile,
-
"openid": obj.open_id
-
}
-
}
-
}
-
# 响应
-
return HttpResponse(json.dumps(result, ensure_ascii=
False),
-
content_type=
"application/json,charset=utf-8")
转载:https://blog.csdn.net/haodiaoer/article/details/106078902
查看评论