公众号开放接口token验证

微信公众平台是运营者通过公众号为微信用户提供资讯和服务的平台,而公众平台开放接口则是提供服务的基础,开发者在公众平台网站中创建公众号、获取接口权限后,可以通过接口实现用户管理、素材管理、消息管理等功能。

最近在重构 在线ADLib服务 这个项目,想用下公众号的接口,结果第一步就卡住了,特此记录下。

大多数情况下,调用接口服务都需要先获取access_token,而我主要想用的是接收公众号消息的接口,并不需要获取access_token,只绑定自己的服务器就可以。所以我的第一步卡在了绑定服务器上,离了大谱!

接入概述

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

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

填写服务器配置

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

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

服务器配置

验证消息的确来自微信服务器

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

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

当你原样返回echostr参数内容后,神奇的事情发生了,页面会提示你token验证失败!!!

我反复试了很多次,json、xml各种试,都不行,最后发现echostr这个参数一直是数字,就试了下返回数字,然后就成功了。公开信息显示,根据今年上半年的数据推算,企鹅员工平均年薪突破了100w,我觉得应该是太忙了,没时间更新文档。

@app.api_route("/wx_gzh/echo", methods=["GET", "POST"])
async def echo(
    request: Request,
    signature: str = None,
    timestamp: str = None,
    nonce: str = None,
    echostr: int = None,
):
    if request.method == "POST":
        headers = request.headers
        body = await request.body()

        # 打印请求头和请求体
        print("Headers:", headers)
        print("Body:", body.decode("utf-8"))

        # 解析XML请求体
        root = ET.fromstring(body)
        xml_data = {child.tag: child.text for child in root}

        return {"headers": dict(headers), "body": xml_data}

    elif request.method == "GET":
        token = "adlib"  # 替换为你的Token
        data = [token, timestamp, nonce]
        data.sort()
        data = "".join(data).encode("utf-8")

        hashcode = hashlib.sha1(data).hexdigest()
        if hashcode == signature:
            return JSONResponse(content={"echostr": echostr})
        else:
            return JSONResponse(content={"error": "Invalid signature"}, status_code=400)

不过当天晚上拿到了GitHub Models的试用资格,哈哈!现在确实离了GitHub Copilot已经不知道怎么写代码了,看看Github Models能带来什么惊喜。

公众号 | FunIO
微信搜一搜 “funio”,发现更多精彩内容。
个人博客 | blog.boringhex.top

  • 11
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 微信公众号用户绑定是指将微信用户的身份信息与公众号进行绑定。这样,公众号就可以给用户提供个性化的服务,并跟踪用户的使用情况。 要进行微信公众号用户绑定,需要获取用户的授权。用户可以通过扫描二维码或者点击链接来进行授权。 在用户授权后,公众号可以使用 access_token 来获取用户的身份信息。access_token 是一个令牌,可以用来调用微信提供的接口,如获取用户信息、发送消息等。 获取 access_token 需要使用 appid 和 appsecret,这两个值是在微信公众平台注册公众号时获得的。可以使用以下方式获取 access_token: 1. 通过微信公众平台提供的接口:https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET 2. 使用微信开发工具包(如 wechat-sdk)提供的方法。 获取到 access_token 后,可以使用它来调用微信的各种接口,实现公众号的功能。 希望这些信息对您有帮助。 ### 回答2: 微信公众号用户绑定和获取access_token是指在开发微信公众号时,用户需要通过绑定微信公众号获取用户的唯一标识,同时需要获取access_token,用于进行微信公众号接口调用。 微信公众号用户绑定是指将用户的微信账号与公众号进行关联。当用户使用微信扫描公众号的二维码或搜索公众号并关注后,用户的微信账号就会与公众号产生绑定关系。通过绑定,公众号可以获取用户的微信唯一标识openid,并在后续的业务中使用该openid进行用户身份的识别和处理。用户绑定后,可以接收公众号的消息推送,参与互动等。 获取access_token是为了进行微信公众号接口调用,如发送消息,获取用户信息等。access_token公众号接口调用的全局唯一票据,在一定时间内有效。开发者可以使用appid和appsecret去微信开放平台接口获取access_token,获取成功后,可以保存起来在一定时间内复用,减少请求次数。在接口调用时,需要在请求中携带access_token,微信服务器会校验并返回相应的结果。 可以通过以下步骤来获取access_token: 1. 使用appid和appsecret向微信开放平台接口发送请求。 2. 微信开放平台接口验证appid和appsecret的正确性,并生成access_token。 3. 将生成的access_token保存起来,方便后续的接口调用使用。 总结:微信公众号用户绑定和获取access_token是在开发微信公众号时必要的步骤。用户绑定后,公众号可以获取用户的唯一标识openid,进行个性化推送等业务。获取access_token后,公众号可以使用该票据进行接口的调用,如发送消息,获取用户信息等。 ### 回答3: 微信公众号用户绑定是指将用户的微信账号与公众号进行绑定,让用户能够接收公众号的消息和使用公众号提供的服务。用户可以通过扫描公众号的二维码、点击公众号的链接或搜索公众号的名称等方式进行绑定。绑定之后,用户可以在微信中收到公众号的推送消息,并能够参与公众号提供的互动内容。 获取access_token是为了进行微信公众号开发所必需的操作之一。access_token是用于调用接口的全局唯一凭证,每个公众号是唯一的。微信公众平台会为每个公众号生成一个有效期为2小时的access_token,并且提供了接口用于获取access_token。获取access_token的方法是使用公众号的唯一凭证AppID和AppSecret在微信公众平台接口中进行请求,返回结果中包含了access_token的值。 开发者可以利用access_token调用微信公众平台提供的各种接口,比如发送消息、获取用户信息等。在开发过程中,需要特别注意access_token的有效期,及时更新access_token以确保接口调用的正常进行。为了提高效率和安全性,可以将access_token保存在服务器中进行管理,每次需要使用时从服务器中获取最新的access_token进行调用。 总结来说,微信公众号用户绑定是为了让用户与公众号进行关联,而获取access_token是为了开发者能够调用各种微信公众平台接口进行开发。这两者都是微信公众号开发中非常重要的步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值