python制作微信个人二维码_Python实现 | 微信带参数的二维码

微信运营越来越多了,这种带参数二维码的使用场景还挺多的,但是网上的实现大都是PHP啥的,还不想写PHP的我只好用Python实现一下了。

关于带参二维码的介绍,记得先看官网:生成带参数的二维码。

先大体看看介绍

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

2、永久二维码,是无过期时间的,但数量较少(目前为最多10万个)。永久二维码主要用于适用于帐号绑定、用户来源统计等场景。

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

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

总结一句,就是生成的二维码本身有一个独特的scene_id,扫描这个码,后台可以获得先关的标签对,也就是后台会获得以下数据:带参二维码返回的数据

好啦,我们先来看如何生成带scene_id的二维码,而后台的处理事件,我们之后再来看,因为我刚刚才为此买了一个域名,结果实名+备案要好几天,暴风哭泣。

先来说一下基本流程:从服务号的管理处获得AppID和AppSecret,具体可以看获取AccessToken。

根据AppID和AppSecret来构造Post请求,获得Access Token

根据Access Token构造Post请求,获得Ticket

用Ticket获得需要的二维码

获得AccessToken

我们直接来看代码,没怎么做封装:

import urllib

import urllib.request

import json

from urllib import parse, request

记得要有appid 和 appsecret

appid = '这里放你的appid'

secret = '这里放你的appsecret'

def token_url(appid, secret):

return "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s"%(appid, secret)

获得accessToken函数

def get_access_token(appid, secret):

access_token_url = token_url(appid, secret)

f = urllib.request(access_token_url)

json_string = f.read()

return json.loads(json_string)['access_token']

现在是开始获取

access_token_url = token_url(appid, secret)

f = urllib.request.urlopen(access_token_url)

json_string = f.read()

access_token = json.loads(json_string)['access_token']

好啦,现在有accessToken了

现在来获取Ticket

传入accessToken来构造Ticket_url

def get_ticket_url(access_token):

url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=%s" %(access_token)

return url

ticket_url = get_ticket_url(access_token)

构造Post请求的参数,这个官网的介绍很清楚,其中scene_id是自己随意设置的数字,这个数据是在用户扫描二维码之后,告诉你被扫描的二维码是哪个

body = {"expire_seconds":604800, "action_name": "QR_SCENE", "action_info": {"scene": {"scene_id": 123}}}

记得要对post数据进行encode,不然会报错

json_data = json.dumps(body).encode(encoding='utf-8')

已经构造好啦,现在来获取所ticket和二维码啦

req = request.Request(url=ticket_url, data=json_data)

res = request.urlopen(req).read()

ticket_string = json.loads(res)['ticket']

def exchange_by_ticket(ticket_string):

ticket = ticket_string

exchange_by_ticker_url = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=%s" % (ticket)

return exchange_by_ticker_url

exchange_by_ticker_url = exchange_by_ticket(ticket_string)

就能够收到所需要的二维码啦,✿✿ヽ(°▽°)ノ✿,之后的话,就要写服务器来如何响应用户的扫描啦。

原理是这样的:当用户扫描了带参数的二维码之后,会返回一个参数列表给微信

这个参数列表就包含scene_id,这样你就知道他扫描的是哪个二维码

微信将那个参数列表发送到你提前设置好的url服务器

你写的程序对这个参数列表进行相应,并将相应的反应信息发送给微信

微信再将数据发送给用户

之后我会继续实现的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值