SDK นี้ได้รับการพัฒนาโดยใช้ EasyWechat เพื่ออำนวยความสะดวกในการพัฒนาแพลตฟอร์มบุคคลที่สามสำหรับบัญชีสาธารณะ WeChat SDK จึงสรุปการพัฒนาแพลตฟอร์มบุคคลที่สามที่ได้รับอนุญาตจากบัญชีสาธารณะ WeChat รวมถึงการเข้าถึงการเผยแพร่ทั่วทั้งเครือข่ายโดยอัตโนมัติ ฟังก์ชั่นได้รับการทดสอบโดยแพลตฟอร์มบัญชีสาธารณะที่มีอยู่แล้ว เวอร์ชันอย่างเป็นทางการ 1.0.0 เปิดตัวแล้ว หากคุณพบปัญหาในการใช้ SDK นี้ โปรดติดต่อฉัน หากคุณคิดว่าโครงการนี้มีประโยชน์สำหรับคุณ โปรดให้ดาวแล้วปล่อยให้ ฉันรู้ ขอบคุณ
composer require chunhei2008/easy-open-wechat
วิกิ GitHub
ยกเว้นฟิลด์การกำหนดค่าที่เกี่ยวข้องของแพลตฟอร์มบุคคลที่สามที่เพิ่มใหม่ ฟิลด์อื่นๆ ยังคงเป็นฟิลด์การกำหนดค่าของ 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',
],
];
แพลตฟอร์มบุคคลที่สามสามารถใส่ทางเข้า "การอนุญาตบัญชีอย่างเป็นทางการของ WeChat" บนเว็บไซต์ของตน เพื่อแนะนำผู้ดำเนินการบัญชีสาธารณะไปยังหน้าการอนุญาต URL ของหน้าการอนุญาตคือ https://mp.weixin.qq.com/cgi-bin/componentloginpage?component_appid=xxxx&pre_auth_code=xxxx&redirect_uri=xxxx ใน URL นี้ ฝ่ายแพลตฟอร์มบุคคลที่สามจำเป็นต้องระบุฝ่ายแพลตฟอร์มบุคคลที่สาม appid รหัสการอนุญาตล่วงหน้า และการโทรกลับ URI
<?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>";
หลังจากกระบวนการอนุญาตเสร็จสิ้น หน้าการอนุญาตจะข้ามไปยัง URI โทรกลับโดยอัตโนมัติ และส่งคืนรหัสการอนุญาตและเวลาหมดอายุในพารามิเตอร์ URL (redirect_url?auth_code=xxx&expires_in=600) หลังจากได้รับรหัสการอนุญาต บุคคลที่สาม แพลตฟอร์มสามารถใช้รหัสอนุญาตเพื่อแลกกับข้อมูลการเรียกอินเทอร์เฟซของบัญชีอย่างเป็นทางการที่ได้รับอนุญาต (authorizer_a ccess_token หรือที่เรียกว่าโทเค็น) จากนั้นเรียกข้อมูลรับรองผ่านอินเทอร์เฟซนี้ และทำตามคำแนะนำในเอกสารประกอบของนักพัฒนาบัญชีอย่างเป็นทางการ (mp.weixin.qq.com/wiki) เพื่อเรียก API ที่เกี่ยวข้องกับบัญชีอย่างเป็นทางการ (ซึ่ง API อาจเป็นได้ เรียกว่าขึ้นอยู่กับชุดการอนุญาตที่ผู้ใช้อนุญาตไปยังแพลตฟอร์มบุคคลที่สามนั้นยังขึ้นอยู่กับการอนุญาตอินเทอร์เฟซที่บัญชีทางการนั้นมีด้วย) โดยใช้ JS SDK และความสามารถอื่นๆ สำหรับรายละเอียด โปรดดู [คำอธิบายอินเทอร์เฟซของแพลตฟอร์มบุคคลที่สามของบัญชีทางการ]
<?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);
การตอบสนองต่อเหตุการณ์การอนุญาตทั้งหมดในกระบวนการอนุญาต รวมถึงการตอบสนองการตรวจสอบการปล่อยทั่วทั้งเครือข่าย
<?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();
SDK ใช้แคชเป็นค่าเริ่มต้นในการแคชและจัดเก็บข้อมูลสำคัญของบัญชีสาธารณะ อย่างไรก็ตาม การจัดเก็บข้อมูลสำคัญ เช่น authorizer_appid, authorizer_refresh_token ฯลฯ จะถูกจัดเก็บไว้ในที่เก็บข้อมูลถาวร เช่น ฐานข้อมูล ด้วยเช่นกัน การพิจารณา.
การใช้งานเริ่มต้นใช้แคชสำหรับการจัดเก็บ
<?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);
จัดการการตอบสนองต่อเหตุการณ์การอนุญาตและประมวลผลข้อมูลที่เกี่ยวข้องหลังจากการอนุญาต
<?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);