码迷,mamicode.com
首页 > 微信 > 详细

微信公众号定制开发

时间:2019-05-24 15:49:28      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:获取用户基本信息   rect   需要   跳转   net   authorize   info   targe   用户信息   

 

1、配置 公众号   -开发-网页服务-网页授权- 修改 网页授权获取用户基本信息 授权域名。 (注: 公众号自动回复开发,需要开启  服务器配置,单独的获取用户信息则不需要。 jssdk是 白名单授权管理。)

2、菜单 接入 :   http:// XXX / user/info 访问时用户授权,授权以后跳转到  http://XXX/home?code=xxx (配置)此时再次  调用 http:// XXX / user/info 获取用户信息 放入session(供以后接口获取)

代码参考: 

     

# setting.py

AppID = ‘‘
AppSecret = ‘‘
Token = ‘‘


# view.py

# wx.view代码

from wechatpy.utils import check_signature
from back import settings
from wechatpy.exceptions import InvalidSignatureException
from django.http import HttpResponse
from wechatpy import parse_message, create_reply
from wechatpy.replies import BaseReply
from wechatpy import WeChatClient
from wechatpy.oauth import WeChatOAuth
from django.shortcuts import redirect

import wx.wechat as wx_wechat


# 连接微信公众号的方法
def serve(request):
    # GET 方式用于微信公众平台绑定验证
    if request.method == GET:
        signature = request.GET.get(signature, ‘‘)
        timestamp = request.GET.get(timestamp, ‘‘)
        nonce = request.GET.get(nonce, ‘‘)
        echo_str = request.GET.get(echostr, ‘‘)
        try:
            check_signature(settings.Token, signature, timestamp, nonce)
        except InvalidSignatureException:
            echo_str = 错误的请求
        response = HttpResponse(echo_str)
    else:

        msg = parse_message(request.body)
        msg_dict = msg.__dict__[_data]
        # print(msg.id, msg.source, msg.create_time, msg.type, msg.target, msg.time, msg.__dict__[‘_data‘][‘Event‘], ‘====‘)
        if msg.type == text:
            pass
        elif msg.type == event:
            if msg_dict[Event] == subscribe:
                    # 关注后 将获取的用户的信息保存到数据库
                wx_wechat.subscribe(getWxUserInfo(msg.source))
            elif msg_dict[Event] == unsubscribe:
                    # 取关后,将用户的关注状态更改为 未关注
                wx_wechat.unsubscribe(msg.source)
        else:
            pass
        response = HttpResponse(‘‘, content_type="application/xml")
    return response


def getWxClient():
    return WeChatClient(settings.AppID, settings.AppSecret)


def getWxUserInfo(openid):
    wxClient = getWxClient()
    wxUserInfo = wxClient.user.get(openid)
    return wxUserInfo


def getWeChatOAuth(redirect_url):
    # redirect_url = "需要跳转的域名: dayu1.net/home"
    return WeChatOAuth(settings.AppID, settings.AppSecret, redirect_url, scope=snsapi_userinfo )

# 定义授权装饰器
def oauth(method):
    def warpper(request):
        if request.session.get(user_info, None) is None:
            code = request.GET.get(code, None)
            wechat_oauth = getWeChatOAuth(request.get_raw_uri())
            url = wechat_oauth.authorize_url
            if code:
                try:
                    wechat_oauth.fetch_access_token(code)
                    user_info = wechat_oauth.get_user_info()
                except Exception as e:
                    print(str(e))
                    # 这里需要处理请求里包含的 code 无效的情况
                    # abort(403)
                else:
                    request.session[user_info] = user_info
            else:
                return redirect(url)

        return method(request)
    return warpper

@oauth
def get_wx_user_info(request):
    user_info = request.session.get(user_info)
    return HttpResponse(str(user_info))



# url 配置

# wx.url代码
from django.urls import path
from . import views

urlpatterns = [
    path(wechat/, views.serve),

    path(user/info, views.get_wx_user_info)
]

 

微信公众号定制开发

标签:获取用户基本信息   rect   需要   跳转   net   authorize   info   targe   用户信息   

原文地址:https://www.cnblogs.com/Mvloveyouforever/p/10918384.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!