微信推送消息

我们先那测试环境试一下 和真实环境几乎无差别(微信公众开发平台)

测试环境: 

https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login 
 
 
其实很多东西都是固定的  
和个人发消息:
import json

import requests

# 其实就好比我们的cookie一样 需要给你关注的用户一个token

# 1. 伪造浏览器向 https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential... 发送GET请求,并获取token
r1 = requests.get(
    url = "https://api.weixin.qq.com/cgi-bin/token",
    params = {
        "grant_type": "client_credential",
        "appid":"wxe022764ef61336e9",     #这个是你的信息
        "secret": "29def1418cdd8c8317fd5ad39a127890"   #也oypXF000rxnm9-5PTTaVM851sXL4是捏信息
    },
)


access_token = r1.json().get('access_token')
print(access_token)




wx_id = "oypXF000rxnm9-5PTTaVM851sXL4"  # 这个是关注你的微信的别人的id

body = {
    "touser": wx_id,
    "msgtype": "text",
    "text": {
        "content": '老王'  # 这个是你要给别人发送的信息
    }
}
r2 = requests.post(
    url="https://api.weixin.qq.com/cgi-bin/message/custom/send",
    params ={
        'access_token': access_token,

    },
    data=bytes(json.dumps(body, ensure_ascii=False), encoding='utf-8')
)
print(r2.text)

如果要发模板信息就要先去开发平台增加模板内容

r1 = requests.get(
    url = "https://api.weixin.qq.com/cgi-bin/token",
    params = {
        "grant_type": "client_credential",
        "appid":"wxe022764ef61336e9",
        "secret":"29def1418cdd8c8317fd5ad39a127890"
    }
)
access_token = r1.json().get('access_token')

wx_id = "oypXF000rxnm9-5PTTaVM851sXL4"

body = {
    "touser": wx_id,
    "template_id": 'dD0dm09eqDra4TlbFjXiPlO5fb00Fjz0IL_cyprIkJM',  # 这个是你的在微信开发平台设置的模板id
    "data": {
        "user": {
            "value": "老王",  # 这个是拼接的内容  可以给你的模板中凭借内容
            "color": "#173177"  # 颜色
        }
    }
}

r2 = requests.post(
    url="https://api.weixin.qq.com/cgi-bin/message/template/send",
    params={
        'access_token': access_token
    },
    data=json.dumps(body)
)

print(r2.text)

我们来写一个微信可以推送信息的界面

 views:

from django.shortcuts import render,redirect,HttpResponse

from django.http import JsonResponse,HttpResponse
# Create your views here.
from first import models
def  login(request):
    '''
    用户登陆界面
    :param request:
    :return:
    '''
    if request.method == "GET":
        return render(request,"login.html")
    user = request.POST.get("user")
    pwd = request.POST.get("pwd")
    obj = models.UserInfo.objects.filter(name = user,pwd =pwd).first()  # 获取这个用户对象

    if obj:
        request.session["user_info"] = {"id":obj.id,"name":obj.name}  # 设置session  可以全局取到
        return redirect("/index/")  # 存在就设置值然后就从新定向到 index界面


    return render(request,"login.html",{"msg":"用户名或密码错误"})





def index(request):


    current_user_id = request.session["user_info"]["id"]  # 取到全局的 session值
    return render(request,"index.html")



def get_grcode(request):
    '''
    生成第二个图片的
    :param request:
    :return:
    '''
    ret = {"status":True,"data":None}
    access_url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid={appid}&redirect_uri={      redirect_uri}&response_type=code&scope=snsapi_userinfo&state={state}#wechat_redirect"     # 把你的信息拼接进去


    url = access_url.format(
        appid = "wxe022764ef61336e9",
        redirect_uri="",  # 这个是重定向的ip
        state=request.session['user_info']['id']   # 用户id
    )
    ret["data"] = url

    return JsonResponse(ret)


def get_wx_id(request):

    '''
    获取微信id 并且跟新到数据库
    :param request:
    :return:
    '''
    import requests  # 可以模仿http请求
    code = request.GET.get("code")
    state = request.GET.get("state")

    #获取用户openID(用户唯一)
    r1 = requests.get(
        url="https://api.weixin.qq.com/sns/oauth2/access_token", # 固定IP
        params = {
            "appid":"wxe022764ef61336e9",  # 你的 测试账号的id
            "secret":"29def1418cdd8c8317fd5ad39a127890",  # 你的测试账账号的信息
            "code": code,
            "grant_type": 'authorization_code',
        }
    ).json()
    # 获取的到openid表示用户授权成功
    wx_id = r1.get("openid")
    user = models.UserInfo.objects.filter(id = state).first()
    if not user.wx_id:
        user.wx_id = wx_id
        user.save()
    return HttpResponse('授权成功')


def test(request):

    user_list = models.UserInfo.objects.all()

    return render(request, 'test.html', {'user_list': user_list})

def send_msg(request):
    """
    发送消息
    :param request:
    :return:
    """
    id = request.session['user_info']['id']
    obj = models.UserInfo.objects.filter(id=id).first()
    import json
    import requests
    # 1. 伪造浏览器向 https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential... 发送GET请求,并获取token
    r1 = requests.get(
        url="https://api.weixin.qq.com/cgi-bin/token",
        params={
            "grant_type": "client_credential",
            "appid": 'wxe022764ef61336e9',
            "secret": '29def1418cdd8c8317fd5ad39a127890',
        }
    )
    access_token = r1.json().get('access_token')

    body = {
        "touser": obj.wx_id,
        "template_id": '5t4MreDNs1Ns6reAz3U-fbjNRzXQjPpjkC10z-GyngI',  # 你的模板的id
        "data": {
            "user": {
                "value": "asdfasdfadfasd",
                "color": "#173177"
            }
        }
    }
    r2 = requests.post(
        url="https://api.weixin.qq.com/cgi-bin/message/template/send",
        params={
            'access_token': access_token
        },
        data=json.dumps(body)
    )
    print(r2.text)
    return HttpResponse('发送成功')
Views

models:

from django.db import models

# Create your models here.

class UserInfo(models.Model):
     name = models.CharField(max_length = 32)
     pwd = models.CharField(max_length=64)
     wx_id = models.CharField(max_length=32,null = True, blank = True)

前端界面:

login:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="post">
    {% csrf_token %}
    <input type="text" name="user">
    <input type="text" name="pwd">
    <input type="submit" value="提交">{{ msg }}
</form>

</body>
</html>
login

index:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

{# #}

<h1>欢迎{{ request.session.user_info.name }}使用大保健2.0</h1> {#从全局中取值 #}

<h3> 扫描关注近期大保健优惠信息(必须关注才能看到近期的姑娘)</h3>

<img  style="width:200px" src="/static/img/0.jpg" alt="">

<h3>下一步请将您的微信ID发给我</h3>
<div id = "qrcode" style="width: 250px;height: 250px;background-color: white;">


</div>


<script src="/static/js/jquery.min.js"></script>
<script src="/static/js/jquery.qrcode.min.js"></script>
<script src="/static/js/qrcode.js"></script>

<script>
    $(function(){
        get_qcode();
    })
        function get_qcode() {
            $.ajax({
                url:'/get_qrcode/',
                type:'GET',
                dataType:'JSON',
                success:function (arg) {
                    //arg = {status:True,data:'xxx'}
                    $('#qrcode').empty().qrcode({text: arg.data});
                }
            })

        }

</script>
</body>
</html>
index

test:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <ul>
        {% for item in user_list %}
        <li>{{ item.name }} {{ item.wx_id }}   <a href="/send_msg/">发送消息</a></li>
        {% endfor %}
    </ul>
</body>
</html>
test

urls:

from django.conf.urls import url
from django.contrib import admin
from app01 import views
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^index/', views.index),
    url(r'^login/', views.login),
    url(r'^get_qrcode/', views.get_qrcode),
    url(r'^get_wx_id/', views.get_wx_id),
    url(r'^test/', views.test),
]
urls

猜你喜欢

转载自www.cnblogs.com/zhaoyunlong/p/9470772.html