微信公众号之接入微信公众号服务器开发(二)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_41782425/article/details/85321424

说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家!

接着上一篇博客继续往下写 :https://blog.csdn.net/qq_41782425/article/details/85319116

一丶叙述

  • 开发说明

  1. Python代码实现(以Flask框架为例)
  2. 将使用公众号消息会话
  3. 客户端---->微信服务器---->nginx服务器---->开发者服务器
  4. 在微信服务器与开发者服务器之间搭建了nginx服务器默认为80端口(也是微信支持的端口),跟开发者服务器属于同一个主机
  5. 在nginx服务器上配置了多个端口,方便多人进行测试,转发规则:location/wechat8007
  6. 在微信公众号测试平台接口配置url为host/wechat8007时,当微信服务器发送消息给host/wechat8007时,host为nginx服务器时,就会按照/wechat8007转发规则匹配,一旦匹配成功后,由nginx服务器转发给开发者服务器上127.0.0.1:8007进程的用户,这样可以实现多个账号共享一个80端口,并可以收到微信服务器对应用户的消息
  7. 注:在写的flask程序中视图网址也必须是/wechat8007,因为nginx在向后台转发的时候,它只是按照/wechat8007规则知道转发给谁,它会把微信用户的请求原封不动的往后去发,因为微信服务器在向我们发送请求路径就是/wechat:8007,意味着nginx再转发给我们的时候,在我们写的flask程序收到的请求里面,你会发现对应的请求路径也是/wechat8007,所以我们flask程序中的route路径也必须是/wechat8007
  8. 如果是在公司做开发的话,不涉及到多个账户使用一个80端口,所以直接把程序在开发者服务器上以80端口运行,然后在微信公众测试平台配置url为配置程序地址即可
  9. 博主之所以这样做,那是因为我还没有购买服务器(●︿●)
  • 接入微信公众平台

接入微信公众平台开发,开发者需要按照如下步骤完成:

  1. 填写服务器配置
  2. 验证服务器地址的有效性
  3. 依据接口文档实现业务逻辑
  • 填写服务器配置

登录微信公众平台官网后,在公众平台后台管理页面 - 开发者中心页,点击“修改配置”按钮,填写服务器地址(URL)、Token和EncodingAESKey,其中URL是开发者用来接收微信消息和事件的接口URL。Token可由开发者可以任意填写,用作生成签名(该Token会和接口URL中包含的Token进行比对,从而验证安全性)。EncodingAESKey由开发者手动填写或随机生成,将用作消息体加解密密钥。

同时,开发者可选择消息加解密方式:明文模式、兼容模式和安全模式。模式的选择与服务器配置在提交后都会立即生效,请开发者谨慎填写及选择。加解密方式的默认状态为明文模式,选择兼容模式和安全模式需要提前配置好相关加解密代码,详情请参考消息体签名及加解密部分的文档。

1.进入微信公众平台后,找到开发栏,进入基本配置

2.利用测试平台

测试平台登录地址:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login

在手机微信上进行扫码登录即可

二丶验证服务器地址的有效性

开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带四个参数:

开发者通过检验signature对请求进行校验。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。

校验流程:

  1. 将token、timestamp、nonce三个参数进行字典序排序
  2. 将三个参数字符串拼接成一个字符串进行sha1加密
  3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信

1.根据上面微信公众平台提供的开发文档进行代码编写

代码实现如下

# coding:utf-8
from flask import Flask, request, abort
import hashlib

# 常量
# 微信的token令牌
WECHAT_TOKEN = "cdtaogang"

app = Flask(__name__)


@app.route("/wechat8007")
def wechat():
    """对接微信公众号服务器"""
    # 接收微信服务器发送的参数
    signature = request.args.get("signature")
    timestamp = request.args.get("timestamp")
    nonce = request.args.get("nonce")
    echostr = request.args.get("echostr")
    # 校验参数
    if not all([signature, timestamp, nonce, echostr]):
        abort(400)

    # 按照微信的流程进行计算签名
    li = [WECHAT_TOKEN, timestamp, nonce]
    # 排序
    li.sort()
    # 拼接字符串
    tmp_str = ''.join(li)
    # 进行sha1加密, 得到正确的签名值
    sign = hashlib.sha1(tmp_str).hexdigest()
    # 将自己计算的签名值与请求的签名参数进行对比,如果相同,则证明请求来自微信服务器
    if sign != signature:
        # 表示请求不是微信发的
        abort(403)
    else:
        return echostr

if __name__ == '__main__':
    app.run(port=8007, debug=True)

2.测试连接开发者服务器

  • step1 使用ssh命令测试连接服务器

  • step2 使用scp命令将程序文件推送到服务器

  • step3 在开发者服务器上运行wechat程序

  • step4 回到微信公众测试平台配置接口

注意:当没有在服务器运行wechat程序时,进行提交会显示失败

此时,回头看服务器程序运行日志,微信给我发了一个以get方式请求过来的数据

大功告成!说明该服务器具有有效性....

猜你喜欢

转载自blog.csdn.net/qq_41782425/article/details/85321424
今日推荐