0032 微信公众平台开发(01 成为微信开发者)

  微信第三方开发工具较多,此处我们用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 关注测试账号

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

  有了测试公众号,就可以进行微信公众号开发了。

原文地址:https://www.cnblogs.com/dorian/p/12386489.html