|
|
@@ -393,7 +393,7 @@ class weixinUtil
|
|
|
$id = configDict::getConfig('openId');
|
|
|
$open = xhWxOpenService::getById($id);
|
|
|
$component_appid = $open['appId'];
|
|
|
- $componentAccessToken = weixinOpenUtil::getComponentAccessToken($open);
|
|
|
+ $componentAccessToken = weixinUtil::getComponentAccessToken($open);
|
|
|
$url = "https://api.weixin.qq.com/sns/oauth2/component/access_token?appid={$appId}&code={$code}&grant_type=authorization_code&component_appid={$component_appid}&component_access_token={$componentAccessToken}";
|
|
|
$curl = new curl\Curl();
|
|
|
$result = $curl->get($url);
|
|
|
@@ -600,7 +600,7 @@ class weixinUtil
|
|
|
$id = configDict::getConfig('openId');
|
|
|
$open = xhWxOpenService::getById($id);
|
|
|
$component_appid = $open['appId'];
|
|
|
- $componentAccessToken = weixinOpenUtil::getComponentAccessToken($open);
|
|
|
+ $componentAccessToken = weixinUtil::getComponentAccessToken($open);
|
|
|
$appId = $merchant['wxAppId'];
|
|
|
$wxAccessToken = $merchant['wxAccessToken'];
|
|
|
$wxAccessTokenTime = $merchant['wxAccessTokenTime'];
|
|
|
@@ -637,7 +637,7 @@ class weixinUtil
|
|
|
$id = configDict::getConfig('openId');
|
|
|
$open = xhWxOpenService::getById($id);
|
|
|
$component_appid = $open['appId'];
|
|
|
- $componentAccessToken = weixinOpenUtil::getComponentAccessToken($open);
|
|
|
+ $componentAccessToken = weixinUtil::getComponentAccessToken($open);
|
|
|
$appId = $merchant['miniAppId'];
|
|
|
$extend = xhMerchantExtendService::getByMerchantId($merchantId);
|
|
|
$miniAccessToken = $extend['miniAccessToken'];
|
|
|
@@ -1448,4 +1448,113 @@ class weixinUtil
|
|
|
echo "<img src='" . Yii::$app->params['imgUrl'] . "/miniExperience/" . $merchant['id'] . "_member.jpg' />";
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 微信开放平台获取component_access_token
|
|
|
+ */
|
|
|
+ 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);
|
|
|
+ if (empty($result)) {
|
|
|
+ util::stop('没有取到ComponentAccessToken');
|
|
|
+ }
|
|
|
+ $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;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 微信开放平台获取授权方的公众号帐号基本信息
|
|
|
+ */
|
|
|
+ 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;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
}
|