微信扫码推送消息1.0

接入指南

一.填写服务器配置

个人的配置

URL
http://47.103.53.74/weixin_data/
Token
huojibufei

二.验证消息的确来自微信服务器(weixin_data中get请求, token记得修改为第一步服务器配置中的token)

from django.views.decorators.csrf import csrf_exempt
import hashlib
from django.http import HttpResponse
from django.utils.encoding import smart_str
from xml.etree import ElementTree as ET
import time

def test_data(request):
    signature = request.GET.get('signature', '')
    timestamp = request.GET.get('timestamp', '')
    nonce = request.GET.get('nonce', '')
    echostr = request.GET.get('echostr', '')

    if signature == '' or timestamp == '' or nonce == '' or echostr == '':
        return HttpResponse('error')
    token = 'huojibufei'
    try:
        list = [token, timestamp, nonce]
        print(list)
        list.sort()
        str_list = str(list[0]) + str(list[1]) + str(list[2])
        hash = hashlib.sha1()
        hash.update(str_list.encode('utf-8'))
        hashcode = hash.hexdigest()
        if hashcode == signature:
            return HttpResponse(echostr)
        else:
            return HttpResponse("error")
    except:
        return HttpResponse("error")

@csrf_exempt
def weixin_data(request):
    if request.method == "GET":
        return test_data(request)
    else:
        print("POST请求")
        print(request.body)
        analysisObj = Analysis(smart_str(request.body))
        toWxData = analysisObj.prase(smart_str(request.body))
        print(toWxData)
        return HttpResponse(smart_str(toWxData))

三.生成带参数的二维码(具体点击)

目前有2种类型的二维码:

1、临时二维码,是有过期时间的,最长可以设置为在二维码生成后的30天(即2592000秒)后过期,但能够生成较多数量。临时二维码主要用于帐号绑定等不要求二维码永久保存的业务场景
2、永久二维码,是无过期时间的,但数量较少(目前为最多10万个)。永久二维码主要用于适用于帐号绑定、用户来源统计等场景。

用户扫描带场景值二维码时,可能推送以下两种事件:

如果用户还未关注公众号,则用户可以关注公众号,关注后微信会将带场景值关注事件推送给开发者。

如果用户已经关注公众号,在用户扫描后会自动进入会话,微信也会将带场景值扫描事件推送给开发者。

获取带参数的二维码的过程包括两步,首先创建二维码ticket,然后凭借ticket到指定URL换取二维码。

此处生成永久二维码(假永久)参数详见官方文档

http请求方式: POST
URL: https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=TOKEN
POST数据格式:json
POST数据例子:{"expire_seconds":2592000, "action_name": "QR_LIMIT_SCENE", "action_info": {"scene": {"scene_id": 123}}}

或者也可以使用以下POST数据创建字符串形式的二维码参数:
{"action_name": "QR_LIMIT_STR_SCENE", "action_info": {"scene": {"scene_str": "test"}}}

返回说明

正确的Json返回结果:

{
    "ticket": "gQEK8TwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAyZ1BzbEVaSTlmSjIxMDAwME0wM3UAAgSoLzxdAwQAAAAA",
    "url": "http://weixin.qq.com/q/02gPslEZI9fJ210000M03u"
}
参数 说明
ticket 获取的二维码ticket,凭借此ticket可以在有效时间内换取二维码。
expire_seconds 该二维码有效时间,以秒为单位。 最大不超过2592000(即30天)。
url 二维码图片解析后的地址,开发者可根据该地址自行生成需要的二维码图片

通过ticket换取二维码(详见官方文档)

草料二维码填入url生成二维码

四.接收事件推送(此处介绍扫描带参数二维码事件)

在微信用户和公众号产生交互的过程中,用户的某些操作会使得微信服务器通过事件推送的形式通知到开发者在开发者中心处设置的服务器地址,从而开发者可以获取到该信息。其中,某些事件推送在发生后,是允许开发者回复用户的,某些则不允许,详细内容如下:

目录
1 关注/取消关注事件
2 扫描带参数二维码事件
3 上报地理位置事件
4 自定义菜单事件
5 点击菜单拉取消息时的事件推送
6 点击菜单跳转链接时的事件推送

扫描带参数二维码事件

用户扫描带场景值二维码时,可能推送以下两种事件:
    如果用户还未关注公众号,则用户可以关注公众号,关注后微信会将带场景值关注事件推送给开发者。
    如果用户已经关注公众号,则微信会将带场景值扫描事件推送给开发者。

1. 用户未关注时,进行关注后的事件推送

推送XML数据包示例:


  
  
  123456789
  
  
  
  

参数说明

参数 描述
ToUserName 开发者微信号
FromUserName 发送方帐号(一个OpenID)
CreateTime 消息创建时间 (整型)
MsgType 消息类型,event
Event 事件类型,subscribe
EventKey 事件KEY值,qrscene_为前缀,后面为二维码的参数值
Ticket 二维码的ticket,可用来换取二维码图片

2. 用户已关注时的事件推送

推送XML数据包示例:


  
  
  123456789
  
  
  
  

参数说明

参数 描述
ToUserName 开发者微信号
FromUserName 发送方帐号(一个OpenID)
CreateTime 消息创建时间 (整型)
MsgType 消息类型,event
Event 事件类型,SCAN
EventKey 事件KEY值,是一个32位无符号整数,即创建二维码时的二维码scene_id
Ticket 二维码的ticket,可用来换取二维码图片

未完待续......(等我将代码push到gitee再更新, 个人火鸡不肥将同步更新)

你可能感兴趣的:(微信扫码推送消息1.0)