Wechat Provider for OAuth 2.0 Client
This package provides Wechat OAuth 2.0 support for the PHP League's OAuth 2.0 Client.
DONE:
Website SDK, Mini Programs
TODO:
Mobile App SDK
Installation
To install, use composer:
composer require oakhope/oauth2-wechat
Usage
Usage is the same as The League's OAuth client, using OakhopeOAuth2ClientProvider{WebProvider}
as the provider.
Authorization Code Flow
$provider = new OakhopeOAuth2ClientProviderWebProvider([ 'appid' => '{wechat-client-id}', 'secret' => '{wechat-client-secret}', 'redirect_uri' => 'https://example.com/callback-url' ]); // If we don't have an authorization code then get one if (!isset($_GET['code'])) { // Fetch the authorization URL from the provider; this returns the // urlAuthorize option and generates and applies any necessary parameters // (e.g. state). $authorizationUrl = $provider->getAuthorizationUrl(); // Get the state generated for you and store it to the session. $_SESSION['oauth2state'] = $provider->getState(); // Redirect the user to the authorization URL. header('Location: '.$authorizationUrl); exit; // Check given state against previously stored one to mitigate CSRF attack } elseif (empty($_GET['state']) || ($_GET['state'] !== rtrim($_SESSION['oauth2state'], '#wechat_redirect'))) { unset($_SESSION['oauth2state']); exit('Invalid state'); } else { try { // Try to get an access token using the authorization code grant. $accessToken = $provider->getAccessToken( 'authorization_code', [ 'code' => $_GET['code'], ]); // We have an access token, which we may use in authenticated // requests against the service provider's API. echo "token: ".$accessToken->getToken()."<br/>"; echo "refreshToken: ".$accessToken->getRefreshToken()."<br/>"; echo "Expires: ".$accessToken->getExpires()."<br/>"; echo ($accessToken->hasExpired() ? 'expired' : 'not expired')."<br/><br/>"; // Using the access token, we may look up details about the // resource owner. $resourceOwner = $provider->getResourceOwner($accessToken); var_export($resourceOwner->toArray()); } catch (LeagueOAuth2ClientProviderExceptionIdentityProviderException $e) { // Failed to get the access token or user details. echo "error:"; exit($e->getMessage()); } }
Refreshing a Token
Once your application is authorized, you can refresh an expired token using a refresh token rather than going through the entire process of obtaining a brand new token. To do so, simply reuse this refresh token from your data store to request a refresh.
This example uses Brent Shaffer's demo OAuth 2.0 application named Lock'd In. See authorization code example above, for more details.
$provider = new OakhopeOAuth2ClientProviderWebProvider([ 'appid' => '{wechat-client-id}', 'secret' => '{wechat-client-secret}', 'redirect_uri' => 'https://example.com/callback-url' ]); $existingAccessToken = getAccessTokenFromYourDataStore(); if ($existingAccessToken->hasExpired()) { $newAccessToken = $provider->getAccessToken('refresh_token', [ 'refresh_token' => $existingAccessToken->getRefreshToken() ]); // Purge old access token and store new access token to your data store. }
Testing
$ ./vendor/bin/phpunit --colors tests
Contributing
Please see CONTRIBUTING for details.
Credits
Benji Wang All ContributorsLicense
The MIT License (MIT). Please see License File for more information.
版权声明:
1、该文章(资料)来源于互联网公开信息,我方只是对该内容做点评,所分享的下载地址为原作者公开地址。2、网站不提供资料下载,如需下载请到原作者页面进行下载。
3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考学习用!
4、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。