| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- <?php
- namespace common\components;
- use common\services\xhWxOpenService;
- use Yii;
- use yii\helpers\Json;
- use common\models\xhWxOpen;
- use common\components\configDict;
- use linslin\yii2\curl;
- /**
- * 微信开放平台
- */
- class weixinOpenUtil
- {
- /**
- * 获取第三方平台component_access_token
- * @return unknown
- */
- public static function getComponentAccessToken($open)
- {
- $id = $open['id'];
- $componentAccessToken = $open['componentAccessToken'];
- $componentAccessTokenTime = $open['componentAccessTokenTime'];
- $now = time();
- if ($now > strtotime($componentAccessTokenTime)) {
- $appId = $open['appId'];
- $appSecret = $open['appSecret'];
- $verifyTicket = $open['verifyTicket'];
- $data = ['component_appid' => $appId, 'component_appsecret' => $appSecret, 'component_verify_ticket' => $verifyTicket];
- $url = 'https://api.weixin.qq.com/cgi-bin/component/api_component_token';
- $curl = new curl\Curl();
- $result = $curl->setOption(CURLOPT_POSTFIELDS, Json::encode($data))->post($url);
- $result = Json::decode($result);
- if (isset($result['component_access_token']) == false || empty($result['component_access_token'])) {
- echo '<pre>';
- print_r($result);
- Yii::info('get component access token error:' . json_encode($result));
- Yii::$app->end();
- }
- $component_access_token = $result['component_access_token'];
- $expiresIn = $result['expires_in'];
- $oData = [];
- $oData['componentAccessToken'] = $component_access_token;
- $oData['componentAccessTokenTime'] = date("Y-m-d H:i:s", ($now + $expiresIn - 100));//安全起见,将过期时间设置得比微信里还短
- xhWxOpenService::updateById($id, $oData);
- return $component_access_token;
- } else {
- return $componentAccessToken;
- }
- }
-
- /**
- * 获取预授权码pre_auth_code
- */
- public static function getPreAuthCode($open)
- {
- $id = $open['id'];
- $preAuthCode = $open['preAuthCode'];
- $preAuthCodeTime = $open['preAuthCodeTime'];
- $now = time();
- if ($now > strtotime($preAuthCodeTime)) {
- $token = self::getComponentAccessToken($open);
- $appId = $open['appId'];
- $url = "https://api.weixin.qq.com/cgi-bin/component/api_create_preauthcode?component_access_token={$token}";
- $curl = new curl\Curl();
- $data = ['component_appid' => $appId];
- $result = $curl->setOption(CURLOPT_POSTFIELDS, Json::encode($data))->post($url);
- $result = Json::decode($result);
- Yii::info($result);
- if (isset($result['pre_auth_code']) == false || empty($result['pre_auth_code'])) {
- echo "没有取到pre_auth_code,原因:" . json_encode($result) . " appid:" . $appId . " token:" . $token;
- Yii::$app->end();
- }
- $preAuthCode = $result['pre_auth_code'];
- $expiresIn = $result['expires_in'];
- $oData = [];
- $oData['preAuthCode'] = $preAuthCode;
- $oData['preAuthCodeTime'] = date("Y-m-d H:i:s", ($now + $expiresIn - 100));//安全起见,将过期时间设置得比微信里还短100秒
- xhWxOpenService::updateById($id, $oData);
- return $preAuthCode;
- } else {
- return $preAuthCode;
- }
- }
-
- /**
- * 使用授权码换取公众号的接口调用凭据和授权信息
- * authorizer_access_token authorizer_refresh_token
- */
- public static function getAuthorizer($code)
- {
- $id = configDict::getConfig('openId');
- $open = xhWxOpenService::getById($id);
- $appId = $open['appId'];
- $accessToken = self::getComponentAccessToken($open);
- $url = "https://api.weixin.qq.com/cgi-bin/component/api_query_auth?component_access_token={$accessToken}";
- $curl = new curl\Curl();
- $data = ['authorization_code' => $code, 'component_appid' => $appId];
- $result = $curl->setOption(CURLOPT_POSTFIELDS, Json::encode($data))->post($url);
- $result = Json::decode($result);
- return $result;
- }
-
- /**
- * 获取授权方的公众号帐号基本信息
- * @param $authorizerAppId
- * @return unknown
- */
- public static function getAuthorizerInfo($authorizerAppId)
- {
- $id = configDict::getConfig('openId');
- $open = xhWxOpenService::getById($id);
- $appId = $open['appId'];
- $accessToken = self::getComponentAccessToken($open);
- $url = "https://api.weixin.qq.com/cgi-bin/component/api_get_authorizer_info?component_access_token={$accessToken}";
- $curl = new curl\Curl();
- $data = ['component_appid' => $appId, 'authorizer_appid' => $authorizerAppId];
- $result = $curl->setOption(CURLOPT_POSTFIELDS, Json::encode($data))->post($url);
- $result = Json::decode($result);
- return $result;
- }
-
- }
|