前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >通过微信开放平台授权获取公众号文章

通过微信开放平台授权获取公众号文章

作者头像
沈唁
发布2023-11-09 18:09:14
4170
发布2023-11-09 18:09:14
举报
文章被收录于专栏:沈唁志沈唁志

类似于腾讯云开发者社区自媒体分享计划[1]、OSCHINA 开源中国 OSC 源创计划[2],这两个平台都有搬家的功能。

开源中国应该百分百使用了此接口,而腾讯云开发者社区就不一定了,通过查看公众号设置中的授权管理,腾讯云官网只授权了公众号账号信息服务获取认证状态信息两个权限集。

而开源中国的授权权限就是本文中要说明的两个:公众号账号信息服务素材管理

  • 公众号账号信息服务 用于获取授权公众号的信息,例如头像、名称、二维码地址、头像地址、简介等
  • 素材管理 用于获取发布的文章等

配置

开始之前需要先注册微信开放平台,有一个发布过文章的公众号用于测试。

在微信开发平台中进行配置:

微信第三方平台详情

  1. 获取APPIDAppSecret
  2. 开发配置中配置公众号权限集:3 公众号账号信息服务11 素材管理
  3. 开发配置中配置开发资料,设置授权流程相关的域名和白名单等。

开发资料

开发资料填写示例如下:

  • 授权事件接收配置:example.com/events.php,用于接收平台推送给第三方平台账号的消息与事件,如授权事件通知、component_verify_ticket 等。
  • 消息与事件接收配置:example.com/APPID/events.php。本文中的场景应该用不到。
  • 授权发起页域名:example.com,必须从本域名内网页跳转到登录授权页,才可完成登录授权
  • 其他的就按提示说明进行填写配置。

测试使用

使用 PHP 语言为例,ngrok 进行内网穿透。

使用 easywechat 的 SDK:

代码语言:javascript
复制
composer require w7corp/easywechat:^6.7

新建4个文件,实际开发中应结合所使用的框架进行封装。

  1. auth.php 用于生成微信授权的链接,这里需要生成链接可点击,因为微信的授权链接需要携带referer才正常授权。不然可能会遇到错误提示:请确认授权入口页所在域名,与授权后回调页所在域名相同,并且,此两者都必须与申请第三方平台时填写的授权发起页域名相同
  2. events.php 用于接收授权事件;
  3. callback.php 授权后的回调地址;
  4. test.php 用来编写获取公众号账号信息、文章的代码。

首先初始化 SDK,这部分代码在4个文件中都要添加,下文会省略。

代码语言:javascript
复制
include __DIR__ . '/vendor/autoload.php';

use EasyWeChat\OpenPlatform\Application;

$config = [
    'app_id' => '', // 开放平台账号的 appid
    'secret' => '', // 开放平台账号的 secret
    'token' => '', // 开发资料中配置的消息校验Token
    'aes_key' => '', // 开发资料中配置的消息加解密Key
];

$app = new Application($config);

events.php

SDK 默认会处理事件 component_verify_ticket ,并会缓存 verify_ticket。暂时不需要处理其他事件,所以直接这样使用:

代码语言:javascript
复制
include __DIR__ . '/vendor/autoload.php';

use EasyWeChat\OpenPlatform\Application;

$config = [
    'app_id' => '', // 开放平台账号的 appid
    'secret' => '', // 开放平台账号的 secret
    'token' => '', // 开发资料中配置的消息校验Token
    'aes_key' => '', // 开发资料中配置的消息加解密Key
];

$app = new Application($config);

$server = $app->getServer();

return $server->serve();

auth.php

代码语言:javascript
复制
$app = new Application($config);
# 使用对应的回调地址,授权后会跳转到该地址
$url = $app->createPreAuthorizationUrl('https://example.com/callback.php');

# 需要通过点击携带referer
echo "<a href='{$url}'>{$url}</a>";

点击生成后的链接,扫码进行授权,扫码完成并授权后,页面将跳转到callback.php

callback.php

代码语言:javascript
复制
$app = new Application($config);
$authorization = $app->getAuthorization($_GET['auth_code']);
$authorizationInfo = $authorization->toArray()['authorization_info'];

var_dump($authorizationInfo);

$authorizerAppid = $authorizationInfo['authorizer_appid'];
$authorizerAccessToken = $authorizationInfo['authorizer_access_token'];
$authorizerRefreshToken = $authorizationInfo['authorizer_refresh_token'];

获取到授权公众号的appidaccess_tokenrefresh_token,需要结合业务保存到数据库中。

test.php

获取到所需要的信息以后,就可以调用官方的接口来获取信息了:

代码语言:javascript
复制
$app = new Application($config);

# callback.php 中返回的信息
$authorizerAppid = '';
$authorizerAccessToken = '';
$authorizerRefreshToken = '';

// 获取账号信息 https://developers.weixin.qq.com/doc/oplatform/openApi/OpenApiDoc/authorization-management/getAuthorizerInfo.html
$response = $app->getClient()->post('cgi-bin/component/api_get_authorizer_info', ['json' => ['component_appid'  => $config['app_id'], 'authorizer_appid' => $authorizerAppid]]);
var_dump($response->toArray());

// 获取已发布的文章素材 https://developers.weixin.qq.com/doc/offiaccount/Asset_Management/Get_materials_list.html
$officialAccount = $app->getOfficialAccountWithAccessToken($authorizerAppid, $authorizerRefreshToken);
$response = $officialAccount->getClient()->post('cgi-bin/material/batchget_material', ['json' => ['type' => 'news', 'offset' => 0, 'count' => 20]]);
var_dump($response->toArray());

这样就可以通过$officialAccount来调用公众号的所授权的接口来获取需要的数据了。

参考资料

[1]

自媒体分享计划: https://cloud.tencent.com/developer/support-plan?invite_code=cqidlih5bagj

[2]

OSC 源创计划: https://www.oschina.net/sharing-plan?invite=3730309

好文和朋友一起看~

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-11-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 鲁飞 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 配置
    • 开发资料
    • 测试使用
      • events.php
        • auth.php
          • callback.php
            • test.php
              • 参考资料
              相关产品与服务
              云开发 CloudBase
              云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档