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