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 '
';
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;
}
}