Ce SDK est développé sur la base d'EasyWechat. Afin de faciliter le développement de plateformes tierces pour les comptes publics WeChat, il encapsule le développement de plateformes tierces autorisées par les comptes publics WeChat, ainsi que l'accès automatisé aux versions à l'échelle du réseau. les fonctions ont été testées par la plateforme de compte public existante. La version officielle 1.0.0 est maintenant publiée. Si vous rencontrez des problèmes lors de l'utilisation de ce SDK, veuillez me contacter. Si vous pensez que ce projet vous est utile, donnez-lui une étoile et laissez-le. je sais. Merci.
composer require chunhei2008/easy-open-wechat
wiki github
À l'exception des champs de configuration associés de la plateforme tierce nouvellement ajoutée, les autres champs sont toujours les champs de configuration d'EasyWechat.
$config = [
'debug' => false, //是否调试模式
'component_app_id' => 'component app id', //第三方公众平台app id
'component_app_secret' => 'component app secret', //第三方公众平台app secret
'token' => 'token', //公众号消息校验Token
'aes_key' => 'aea key', //公众号消息加解密Key
'redirect_uri' => 'auth callback uri', //授权回调页面URI
'log' => [ //日志
'level' => 'debug',
'file' => '/tmp/easyopenwechat.log',
],
];
Les plateformes tierces peuvent placer une entrée « Autorisation de compte officiel WeChat » sur leurs sites Web pour guider les opérateurs de comptes publics vers la page d'autorisation. L'URL de la page d'autorisation est https://mp.weixin.qq.com/cgi-bin/componentloginpage?component_appid=xxxx&pre_auth_code=xxxxx&redirect_uri=xxxx Dans cette URL, la partie de plate-forme tierce doit fournir la partie de plate-forme tierce. appid, code de pré-autorisation et URI de rappel.
<?php
/**
* auth.php
*
* Author: wangyi <[email protected]>
*
* Date: 2016/12/18 09:18
* Copyright: (C) 2014, Guangzhou YIDEJIA Network Technology Co., Ltd.
*/
include "./vendor/autoload.php";
$config = [
'debug' => true,
'component_app_id' => '第三方平台app id',
'component_app_secret' => '第三方平台app secret',
'token' => '公众号消息校验Token
',
'aes_key' => '公众号消息加解密Key
',
'redirect_uri' => '授权回调页面url',
'log' => [
'level' => 'debug',
'file' => '/tmp/easyopenwechat.log',
],
];
$app = new Chunhei2008EasyOpenWechatFoundationApplication($config);
$page = $app->login->getLoginPage();
echo "<a href="$page">auth</a>";
Une fois le processus d'autorisation terminé, la page d'autorisation passera automatiquement à l'URI de rappel et renverra le code d'autorisation et le délai d'expiration dans les paramètres d'URL (redirect_url?auth_code=xxx&expires_in=600 après avoir obtenu le code d'autorisation, le tiers) ; la plateforme peut utiliser le code d'autorisation en échange des identifiants d'appel d'interface du compte officiel autorisé (authorizer_a ccess_token, également appelé token), puis appelez les informations d'identification via cette interface et suivez les instructions de la documentation du développeur de compte officiel (mp.weixin.qq.com/wiki) pour appeler l'API liée au compte officiel (quelles API peuvent être appelé dépend de l'ensemble d'autorisations que l'utilisateur autorise sur la plate-forme tierce dépend également des autorisations d'interface dont dispose le compte officiel lui-même), en utilisant JS SDK et autres fonctionnalités. Pour plus de détails, veuillez consulter [Description de l'interface de la plateforme tierce du compte officiel]
<?php
/**
* authcallback.php
*
* Author: wangyi <[email protected]>
*
* Date: 2016/12/18 09:55
* Copyright: (C) 2014, Guangzhou YIDEJIA Network Technology Co., Ltd.
*/
include "./vendor/autoload.php";
$config = [
'debug' => true,
'component_app_id' => '第三方平台app id',
'component_app_secret' => '第三方平台app secret',
'token' => '公众号消息校验Token
',
'aes_key' => '公众号消息加解密Key
',
'redirect_uri' => '授权回调页面url',
'log' => [
'level' => 'debug',
'file' => '/tmp/easyopenwechat.log',
],
];
// 回调页面带回的授权码
$auth_code = $_GET['auth_code'];
$app = new Chunhei2008EasyOpenWechatFoundationApplication($config);
// 使用授权码获取授权公众号的信息,并且自动保存公众号的refresh_token等
$auth_info = $app->authorization->setAuthorizationCode($auth_code)->getAuthorizationInfo();
var_dump($auth_info);
Réponse à tous les événements d'autorisation au cours du processus d'autorisation, y compris la réponse de surveillance des versions à l'échelle du réseau
<?php
include "./vendor/autoload.php";
$config = [
'debug' => true,
'component_app_id' => '第三方平台app id',
'component_app_secret' => '第三方平台app secret',
'token' => '公众号消息校验Token
',
'aes_key' => '公众号消息加解密Key
',
'redirect_uri' => '授权回调页面url',
'log' => [
'level' => 'debug',
'file' => '/tmp/easyopenwechat.log',
],
];
$app = new Chunhei2008EasyOpenWechatFoundationApplication($config);
$app->auth->handle()->send();
<?php
/**
* message.php
*
* Author: wangyi <[email protected]>
*
* Date: 2016/12/18 09:13
* Copyright: (C) 2014, Guangzhou YIDEJIA Network Technology Co., Ltd.
*/
include "./vendor/autoload.php";
$config = [
'debug' => true,
'component_app_id' => '第三方平台app id',
'component_app_secret' => '第三方平台app secret',
'token' => '公众号消息校验Token
',
'aes_key' => '公众号消息加解密Key
',
'redirect_uri' => '授权回调页面url',
'log' => [
'level' => 'debug',
'file' => '/tmp/easyopenwechat.log',
],
];
//公众号消息与事件接收URL中带的$APPID$
$app_id = $_GET['app_id'];
$config['app_id'] = $app_id;
$app = new Chunhei2008EasyOpenWechatFoundationApplication($config);
//获取easywechat的app对象
$wechat = $app->wechat;
//余下的和EasyWechat开发一模一样
$response = $wechat->server->setMessageHandler(function ($message) {
return "您好!欢迎关注我! this is easy open wechat";
})->serve();
$response->send();
Le SDK utilise Cache par défaut pour mettre en cache et stocker les informations clés des comptes publics. Cependant, il est préférable de stocker les données d'informations clés telles que authoriser_appid, authoriser_refresh_token, etc. dans un emplacement de stockage persistant tel qu'une base de données. considération.
L'implémentation par défaut utilise le cache pour le stockage
<?php
/**
* AuthorizerRefreshToken.php
*
* Author: wangyi <[email protected]>
*
* Date: 2016/12/17 11:44
* Copyright: (C) 2014, Guangzhou YIDEJIA Network Technology Co., Ltd.
*/
namespace Chunhei2008EasyOpenWechatCore;
use Chunhei2008EasyOpenWechatContractsAuthorizerRefreshTokenContract;
use Chunhei2008EasyOpenWechatSupportLog;
use Chunhei2008EasyOpenWechatTraitsCacheTrait;
use DoctrineCommonCacheCache;
class AuthorizerRefreshToken implements AuthorizerRefreshTokenContract
{
use CacheTrait;
/**
* app id
*
* @var string
*/
protected $authorizerAppId = '';
/**
* cache key prefix
*/
const AUTHORIZER_REFRESH_TOKEN_CACHE_PREFIX = 'easyopenwechat.core.refresh_token.';
public function __construct(Cache $cache = null)
{
$this->cache = $cache;
$this->setCacheKeyField('authorizerAppId');
$this->setPrefix(static::AUTHORIZER_REFRESH_TOKEN_CACHE_PREFIX);
}
/**
*
* get refresh token
*
* @param $authorizerAppId
*
* @return mixed|string
*/
public function getRefreshToken($authorizerAppId)
{
$this->setAuthorizerAppId($authorizerAppId);
$cacheKey = $this->getCacheKey();
$authorizerRefreshToken = $this->getCache()->fetch($cacheKey);
Log::debug('Get refresh token from cache:', [$authorizerAppId, $authorizerRefreshToken]);
return $authorizerRefreshToken;
}
/**
* set refresh token
*
* @param $authorizerAppId
* @param $authorizerRefreshToken
*/
public function setRefreshToken($authorizerAppId, $authorizerRefreshToken)
{
$this->setAuthorizerAppId($authorizerAppId);
$cacheKey = $this->getCacheKey();
$this->getCache()->save($cacheKey, $authorizerRefreshToken);
Log::debug('Set refresh token:', [$authorizerAppId, $authorizerRefreshToken]);
}
/**
*
* remove refresh token
*
* @param $authorizerAppId
*/
public function removeRefreshToken($authorizerAppId)
{
$this->setAuthorizerAppId($authorizerAppId);
$cacheKey = $this->getCacheKey();
$this->getCache()->delete($cacheKey);
Log::debug('Remove refresh token:', [$authorizerAppId]);
}
/**
* set authorizer app id
*
* @param $authorizerAppId
*/
private function setAuthorizerAppId($authorizerAppId)
{
$this->authorizerAppId = $authorizerAppId;
}
}
<?php
/**
* AuthorizerRefreshToken.php
*
* Author: wangyi <[email protected]>
*
* Date: 2016/12/17 11:44
* Copyright: (C) 2014, Guangzhou YIDEJIA Network Technology Co., Ltd.
*/
namespace Chunhei2008EasyOpenWechatCore;
use Chunhei2008EasyOpenWechatContractsAuthorizerRefreshTokenContract;
use Chunhei2008EasyOpenWechatSupportLog;
use Chunhei2008EasyOpenWechatTraitsCacheTrait;
use DoctrineCommonCacheCache;
class AuthorizerRefreshTokenDB implements AuthorizerRefreshTokenContract
{
/**
*
* get refresh token
*
* @param $authorizerAppId
*
* @return mixed|string
*/
public function getRefreshToken($authorizerAppId)
{
// get refresh token by app id from db
Log::debug('Get refresh token from cache:', [$authorizerAppId, $authorizerRefreshToken]);
return $authorizerRefreshToken;
}
/**
* set refresh token
*
* @param $authorizerAppId
* @param $authorizerRefreshToken
*/
public function setRefreshToken($authorizerAppId, $authorizerRefreshToken)
{
// save refresh token to db by app id
Log::debug('Set refresh token:', [$authorizerAppId, $authorizerRefreshToken]);
}
/**
*
* remove refresh token
*
* @param $authorizerAppId
*/
public function removeRefreshToken($authorizerAppId)
{
// delete refresh token from db by app id
Log::debug('Remove refresh token:', [$authorizerAppId]);
}
}
<?php
/**
* AuthorizerRefreshTokenDefaultProvider.php
*
* Author: wangyi <[email protected]>
*
* Date: 2016/12/17 11:50
* Copyright: (C) 2014, Guangzhou YIDEJIA Network Technology Co., Ltd.
*/
namespace Chunhei2008EasyOpenWechatFoundationServiceProviders;
use Chunhei2008EasyOpenWechatCoreAuthorizerRefreshTokenDB;
use PimpleContainer;
use PimpleServiceProviderInterface;
class AuthorizerRefreshTokenDBProvider implements ServiceProviderInterface
{
public function register(Container $pimple)
{
//覆盖refresh token
$pimple['authorizer_refresh_token'] = function ($pimple) {
return new AuthorizerRefreshTokenDB(
$pimple['db']
);
};
}
}
<?php
/**
* message.php
*
* Author: wangyi <[email protected]>
*
* Date: 2016/12/18 09:13
* Copyright: (C) 2014, Guangzhou YIDEJIA Network Technology Co., Ltd.
*/
include "./vendor/autoload.php";
$config = [
];
$app = new Chunhei2008EasyOpenWechatFoundationApplication($config);
$providers = [
AuthorizerRefreshTokenDBProvider::class
];
$app->addProviders($providers);
Gérer les réponses aux événements d'autorisation et traiter les données associées après l'autorisation
<?php
namespace Chunhei2008EasyOpenWechatContracts;
use Chunhei2008EasyOpenWechatCoreAuthorization;
use Chunhei2008EasyOpenWechatCoreAuthorizationInfo;
use Chunhei2008EasyOpenWechatCoreComponentVerifyTicket;
/**
* AuthPushContract.php
*
* Author: wangyi <[email protected]>
*
* Date: 2016/12/16 09:25
* Copyright: (C) 2014, Guangzhou YIDEJIA Network Technology Co., Ltd.
*/
interface AuthorizeHandlerContract
{
/**
* handle component verify ticket
*
* @param $message
* @param ComponentVerifyTicket $componentVerifyTicket
*
* @return mixed
*/
public function componentVerifyTicket($message, ComponentVerifyTicket $componentVerifyTicket);
/**
* handle authorized
*
* @param $message
* @param AuthorizationInfo $authorizationInfo
*
* @return mixed
*/
public function authorized($message, Authorization $authorization);
/**
* handle unauthorized
*
* @param $message
*
* @return mixed
*/
public function unauthorized($message, AuthorizerRefreshTokenContract $authorizerRefreshToken);
/**
*
* handle updateauthorized
*
* @param $message
* @param AuthorizationInfo $authorizationInfo
*
* @return mixed
*/
public function updateauthorized($message , Authorization $authorization);
}
<?php
/**
* AuthorizeHandlerServiceProvider.php
*
* Author: wangyi <[email protected]>
*
* Date: 2016/12/17 16:34
* Copyright: (C) 2014, Guangzhou YIDEJIA Network Technology Co., Ltd.
*/
namespace Chunhei2008EasyOpenWechatFoundationServiceProviders;
use Chunhei2008EasyOpenWechatCoreAuthorizeHandler;
use PimpleContainer;
use PimpleServiceProviderInterface;
class AuthorizeHandlerCustomerServiceProvider implements ServiceProviderInterface
{
public function register(Container $pimple)
{
//覆盖
$pimple['authorize_handler'] = function ($pimple) {
return new AuthorizeHandlerCustomer();
};
}
}
<?php
/**
* message.php
*
* Author: wangyi <[email protected]>
*
* Date: 2016/12/18 09:13
* Copyright: (C) 2014, Guangzhou YIDEJIA Network Technology Co., Ltd.
*/
include "./vendor/autoload.php";
$config = [
];
$app = new Chunhei2008EasyOpenWechatFoundationApplication($config);
//添加到容器
$providers = [
AuthorizeHandlerCustomerServiceProvider::class
];
$app->addProviders($providers);