微信第三方开发工具较多,此处我们用wechatpy
01 获取并设置参数
登录公众号,拉到最下面,找到开发/基本配置页面:
01.1 在公众号开发信息中,获取开发者ID(AppID)和开发者密码(AppSecret)。
01.2 点击服务器配置下的修改配置,在Token中填入3-32个任意字符。
token是接入令牌,在此填入的token必须和程序中的token相同。
01.3 常量定义
在GeneralTools/Constants.py中增加微信公众号常量配置。
"""
微信相关常量设置
"""
# 微信的token令牌
WECHAT_TOKEN = "toneng"
WECHAT_APPID = "wxe2a552d68c2a" # 要填自己的开发者ID
WECHAT_APPSECRET = "c83b7a4833c896ca281d3d6e027776" # 要填写自己的
# 微信服务器IP地址
SERVER_ID_ADDRESS = '49.000.156.156' # 填写自己的IP或域名
SERVER_ID_PORT = '6379'
# 缓存公众号access_token
WECHATPY_ACCESS_TOKEN_CACHE = 'redis://:@' + SERVER_ID_ADDRESS + ':' + SERVER_ID_PORT + '/3'
02 编写微信接口
02.1 编写微信接口的目的是让微信调用,微信带着四个参数来调用这个接口:
signature:微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
timestamp:时间戳
nonce:随机数
echostr:随机字符串
02.2 接口验证消息的确来自微信服务器
编写微信接口的主要功能是:
把从微信传入的token、timestamp、nonce三个参数按字典序排序
将三个参数字符串拼接成一个字符串进行sha1加密
开发者用于加密后的字符串与signature对比,如果相同,则表示消息来源于微信服务器。
验证成功后返回echostr
此处主要介绍wechatpy插件中关于验证签名的函数check_signature,包含token、signature、timestamp、nonce四个参数。传入这四个参数进行签名验证,如果抛出异常,表示验证失败,否则验证成功。
from wechatpy.utils import check_signature
check_signature(
token=Constents.WECHAT_TOKEN, # 开发者在公众号配置中配置的令牌
signature=signature, # 微信加密签名
timestamp=timestamp, # 时间戳
nonce=nonce # 随机数
)
源码如下:
from django.views.generic import View
from rest_framework import status
import logging
from django.http import HttpResponse
from wechatpy.utils import check_signature
from wechatpy.exceptions import InvalidSignatureException
from GeneralTools import Constents
logger = logging.getLogger('tongheng2')
class WeChatInterface(View):
"""
微信公众号开发服务器配置
"""
@classmethod
def get(cls, request):
"""
微信服务器验证消息
:param request:GET请求携带参数(signature、timestamp、nonce、echostr)
:return:原样返回echostr参数
"""
# logger.info("body:%s" % request.body)
# logger.info("GET:%s" % request.GET)
# logger.info("POST:%s" % request.POST)
# 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
signature = request.GET.get('signature')
# 时间戳
timestamp = request.GET.get('timestamp')
# 随机数
nonce = request.GET.get('nonce')
# 随机字符串
echostr = request.GET.get('echostr')
logger.info("signature:%s" % signature)
logger.info("timestamp:%s" % timestamp)
logger.info("nonce:%s" % nonce)
logger.info("echostr:%s" % echostr)
# 校验参数
if not all([signature, timestamp, nonce, echostr]):
# 请求参数错误
return HttpResponse(status.HTTP_400_BAD_REQUEST)
try:
check_signature(
token=Constents.WECHAT_TOKEN, # 开发者在公众号配置中配置的令牌
signature=signature, # 微信加密签名
timestamp=timestamp, # 时间戳
nonce=nonce # 随机数
)
except InvalidSignatureException as e:
# 处理异常情况或忽略
logger.error(e)
# 微信签名错误
return HttpResponse(status.HTTP_403_FORBIDDEN)
# 验证成功时,应原样返回 echostr 参数值
return HttpResponse(echostr)
03 接口测试
在微信公众号开发/基本配置/修改配置中,输入上面编写的微信接口url,点击提交。
如果成功,则表示成为了名微信开发者,可以正式开发微信其它功能了。

04 接口测试成功后,点击服务器启用。

05 申请公众平台测试账号
在微信公众平台首页,最下面的开发/开发者工具,点击公从平台测试账号,手机扫码即可进入。
微信会为开发者提供一个测试的开发者ID(appID)和开发者测试密码(appsecret)
修改接口配置信息,把上面的接口和token输入,点击提交,系统显示配置成功,则表示开通了公众平台测试账号。

06 关注测试账号
在测试账号页面向下拉,可以看到一个二维码,扫码即关注。

有了测试公众号,就可以进行微信公众号开发了。
浙公网安备 33010602011771号