• 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 关注测试账号

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

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

  • 相关阅读:
    读书笔记——高效能人士的七个习惯3
    读书笔记——高效能人士的七个习惯2(四类优先级)
    读书笔记——高效能人士的七个习惯1
    任正非最新谈话:吉田社长
    罗辑思维CEO脱不花:关于工作和成长,这是我的121条具体建议
    不需注释的生命
    读书笔记:《尽管去做——无压工作的艺术》摘抄
    C语言中变量名及函数名的命名规则与驼峰命名法
    回车”(carriage return)和”换行”(line feed)的区别和来历-(附:ASCII表)
    printf输出格式总结
  • 原文地址:https://www.cnblogs.com/dorian/p/12386489.html
Copyright © 2020-2023  润新知