微信第三方开发工具较多,此处我们用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 关注测试账号
在测试账号页面向下拉,可以看到一个二维码,扫码即关注。
有了测试公众号,就可以进行微信公众号开发了。