企业微信服务商
请仔细阅读并理解:企业微信 API - 第三方应用开发
实例化
<?php
use EasyWeChat\OpenWork\Application;
$config = [
'corp_id' => 'wx3cf0f39249eb0exx',
'provider_secret' => 'f1c242f4f28f735d4687abb469072axx',
'token' => 'easywechat',
'aes_key' => '', // 明文模式请勿填写 EncodingAESKey
/**
* 接口请求相关配置,超时时间等,具体可用参数请参考:
* https://github.com/symfony/symfony/blob/5.3/src/Symfony/Contracts/HttpClient/HttpClientInterface.php
*/
'http' => [
'throw' => true, // 状态码非 200、300 时是否抛出异常,默认为开启
'timeout' => 5.0,
// 'base_uri' => 'https://qyapi.weixin.qq.com/', // 如果你在国外想要覆盖默认的 url 的时候才使用,根据不同的模块配置不同的 uri
'retry' => true, // 使用默认重试配置
// 'retry' => [
// // 仅以下状态码重试
// 'status_codes' => [429, 500]
// // 最大重试次数
// 'max_retries' => 3,
// // 请求间隔 (毫秒)
// 'delay' => 1000,
// // 如果设置,每次重试的等待时间都会增加这个系数
// // (例如. 首次:1000ms; 第二次: 3 * 1000ms; etc.)
// 'multiplier' => 3
// ],
],
];
$app = new Application($config);
API
Application 就是一个工厂类,所有的模块都是从 $app
中访问,并且几乎都提供了协议和 setter 可自定义修改。
服务端
服务端模块封装了服务端相关的便捷操作,隐藏了部分复杂的细节,基于中间件模式可以更方便的处理消息推送和服务端验证。
$app->getServer();
📖 更多说明请参阅:服务端使用文档
API Client
封装了多种模式的 API 调用类,你可以选择自己喜欢的方式调用开放平台任意 API,默认自动处理了 access_token 相关的逻辑。
$app->getClient();
📖 更多说明请参阅:API 调用
配置
$config = $app->getConfig();
你可以轻松使用 $config->get($key, $default)
读取配置,或使用 $config->set($key, $value)
在调用前修改配置项。
ProviderAccessToken
provider_access_token 是开放平台 API 调用的必备条件,如果你想获取它的值,你可以通过以下方式拿到当前的 provider_access_token:
$providerAccessToken = $app->getProviderAccessToken();
$providerAccessToken->getToken(); // string
当然你也可以使用自己的 ProviderAccessToken 类:
$providerAccessToken = new MyCustomProviderAccessToken();
$app->setProviderAccessToken($providerAccessToken)
SuiteTicket
你可以通过以下方式拿到当前 suite_ticket 类:
$suiteTicket = $app->getSuiteTicket();
$suiteTicket->getTicket(); // string
开放平台账户
开放平台账号类,提供一系列 API 获取开放平台的基本信息:
$account = $app->getAccount();
$account->getCorpId();
$account->getProviderSecret();
$account->getToken();
$account->getAesKey();
第三方应用需要在打开的网页里面携带用户的身份信息
第三方应用或者网站网页授权的逻辑和公众号的网页授权基本一样:
$oauth = $app->getOAuth(string $suiteId, AccessTokenInterface $suiteAccessToken);
📖 详情请参考:网页授权
企业网页授权
$oauth = $app->getCorpOAuth(string $corpId, AccessTokenInterface $suiteAccessToken);
📖 详情请参考:网页授权
使用授权码获取授权信息
在用户在授权页授权流程完成后,授权页会自动跳转进入回调 URI,并在 URL 参数中返回授权码和过期时间,如:(https://easywechat.com/callback?auth_code=xxx&expires_in=600
)
$permanentCode = '企业永久授权码';
$suiteAccessToken = new SuiteAccessToken($suiteId, $suiteSecret);
$authorization = $app->getAuthorization($corpId, $authorizatpermanentCodeionCode, $suiteAccessToken);
$authorization->getCorpId(); // auth_corp_info.corpid
$authorization->toArray();
$authorization->toJson();
// {
// "errcode":0 ,
// "errmsg":"ok" ,
// "dealer_corp_info":
// {
// "corpid": "xxxx",
// "corp_name": "name"
// },
// "auth_corp_info":
// {
// "corpid": "xxxx",
// "corp_name": "name",
// "corp_type": "verified",
// "corp_square_logo_url": "yyyyy",
// "corp_user_max": 50,
// "corp_agent_max": 30,
// "corp_full_name":"full_name",
// "verified_end_time":1431775834,
// "subject_type": 1,
// "corp_wxqrcode": "zzzzz",
// "corp_scale": "1-50人",
// "corp_industry": "IT服务",
// "corp_sub_industry": "计算机软件/硬件/信息服务",
// "location":"广东省广州市"
// },
// "auth_info":
// {
// "agent" :
// [
// {
// "agentid":1,
// "name":"NAME",
// "round_logo_url":"xxxxxx",
// "square_logo_url":"yyyyyy",
// "appid":1,
// "auth_mode":1,
// "privilege":
// {
// "level":1,
// "allow_party":[1,2,3],
// "allow_user":["zhansan","lisi"],
// "allow_tag":[1,2,3],
// "extra_party":[4,5,6],
// "extra_user":["wangwu"],
// "extra_tag":[4,5,6]
// },
// "shared_from":
// {
// "corpid":"wwyyyyy"
// }
// },
// {
// "agentid":2,
// "name":"NAME2",
// "round_logo_url":"xxxxxx",
// "square_logo_url":"yyyyyy",
// "appid":5,
// "shared_from":
// {
// "corpid":"wwyyyyy"
// }
// }
// ]
// }
// }
获取企业凭证
在公众号/小程序接口调用令牌(authorizer_access_token
)失效时,可以使用刷新令牌(authorizer_refresh_token)获取新的接口调用令牌。
注意:
authorizer_access_token
有效期为 2 小时,开发者需要缓存authorizer_access_token
,避免获取/刷新接口调用令牌的 API 调用触发每日限额。缓存方法可以参考:https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Get_access_token.html
$permanentCode = '企业永久授权码';
$suiteAccessToken = new SuiteAccessToken($suiteId, $suiteSecret);
$authorizerAccessToken = $app->getAuthorizerAccessToken($corpId, $permanentCode, $suiteAccessToken)
// {
// "errcode":0 ,
// "errmsg":"ok" ,
// "access_token": "xxxxxx",
// "expires_in": 7200
// }
$authorizerAccessToken->getToken(); // string