飞道的博客

python 网页微信登录思路+成功案列

561人阅读  评论(0)
 
下面这些链接都 需要自己拼接
 
 

第一步:获取AppID  AppSecret (不做解释,自己去微信公众平台申请) 

 

第二步:生成扫描二维码,获取code 

https://open.weixin.qq.com/connect/qrconnect?appid=AppID&redirect_uri=http://www.baidu.com&response_type=code&scope=snsapi_login&state=2014#wechat_redirect

 

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

https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=AppID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN

 

第五步:通过access_token和openid获取用户的基础信息,包括头像、昵称、性别、地区

https://api.weixin.qq.com/sns/userinfo?access_token=bezXEiiBSKSxW0eoblIewFNHqAG-PyW9OqI_L81E4ZCi2cFpfoJTyQc0xKlPPCtqK1kLJfiRbVrpoOVLw7fjpqh52bn7C68SHa2HSgYsVPXZPvJvtayDa57-_7TeHYw&openid=o39YsbmuV_bIPGpj1MTe

 

 

 


    
  1. from urllib.parse import quote
  2. import requests
  3. from django.shortcuts import redirect
  4. from community.models import Friends
  5. from utils.connection_pool import my_redis_pool
  6. from .models import User,User_wx
  7. from django.http import HttpResponse
  8. import json
  9. from utils.forms import LoginForm,CodeLoginForm,FindPasswordForm
  10. import datetime
  11. from django.contrib.auth import authenticate
  12. from django.db import transaction
  13. import uuid
  14. from utils.common import md5_openid, get_code, check_user
  15. from utils.aliyunsm import send_sms
  16. # 获取地址
  17. # WX_IP XXXXXX 你的IP地址
  18. def Wxpath(request):
  19. if request.method == "GET":
  20. 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"
  21. redirect_uri = "https://cvccode.com/chaowei/wxlogin/"
  22. redirect_uri = quote(redirect_uri)
  23. return redirect(url.format(WX_IP,redirect_uri))

 


    
  1. # 微信登录 WX_IP WX_SCREXT
  2. def Wxlogin(request):
  3. if request.method== "GET":
  4. # 获取用户信息
  5. code = request.GET.get( "code")
  6. if not code:
  7. result = { "result": "1", "data": "缺少参数"}
  8. return HttpResponse(json.dumps(result, ensure_ascii= False), content_type= "application/json,charset=utf-8")
  9. user = check_user(request)
  10. token_url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&connect_redirect=1&grant_type=authorization_code"
  11. data = requests.get(token_url.format(WX_IP, WX_SCRECT, code))
  12. data = json.loads(data.content.decode( "utf-8"))
  13. # 获取 access_token
  14. access_token = data[ 'access_token']
  15. open_id = data[ 'openid']
  16. unionid = data[ 'unionid']
  17. # 绑定用户
  18. if user:
  19. user.bindWeChat = '1'
  20. user.unionid = unionid
  21. User_wx.objects.create(
  22. user_id=user.id,
  23. union_id=unionid,
  24. update_time=datetime.datetime.now(),
  25. web_open_id=data[ 'openid']
  26. )
  27. result = { "result": "0", "data": "绑定微信成功"}
  28. return HttpResponse(json.dumps(result, ensure_ascii= False), content_type= "application/json,charset=utf-8")
  29. # 第一次扫码登陆
  30. else:
  31. # 获取用户信息
  32. user_url = "https://api.weixin.qq.com/sns/userinfo?access_token={0}&openid={1}"
  33. data = requests.get(user_url.format(access_token, open_id))
  34. data = json.loads(data.content.decode( "utf-8"))
  35. obj = User.objects.create_user(
  36. username=data[ 'nickname'],
  37. open_id=md5_openid(),
  38. password= "123456",
  39. avatar=data[ 'headimgurl'],
  40. unionid=data[ 'unionid'],
  41. date_joined=datetime.datetime.now(),
  42. last_login=datetime.datetime.now()
  43. )
  44. User_wx.objects.create(
  45. user_id= obj.id,
  46. union_id = data[ 'unionid'],
  47. update_time = datetime.datetime.now(),
  48. web_open_id = data[ 'openid']
  49. )
  50. Friends.objects.create(
  51. is_del= 0,
  52. friend_id=obj.id,
  53. user_id=obj.id,
  54. update_time=datetime.datetime.now()
  55. )
  56. token = set_token(obj)
  57. result = {
  58. "result": 0,
  59. "data":{
  60. "userInfo":{
  61. "name": obj.username,
  62. "child_name": obj.child_name,
  63. "icon": obj.avatar,
  64. "token": str(token),
  65. "mobile": obj.mobile,
  66. "openid": obj.open_id
  67. }
  68. }
  69. }
  70. # 响应
  71. return HttpResponse(json.dumps(result, ensure_ascii= False),
  72. content_type= "application/json,charset=utf-8")

 

 

 


转载:https://blog.csdn.net/haodiaoer/article/details/106078902
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场