false]; public $base_url = "https://api.weixin.qq.com"; public function __construct($config = []) { if(!\Yii::$app->params['wechat']['app_id'] || !\Yii::$app->params['wechat']['app_secret']){ throw new Exception('请设置后台小程序配置'); } $this->appid = \Yii::$app->params['wechat']['app_id']; $this->secret = \Yii::$app->params['wechat']['app_secret']; } /** * Get a fresh instance of the Guzzle HTTP client. * * @return \GuzzleHttp\Client */ protected function getHttpClient() { return new Client(self::$guzzleOptions); } /** * 小程序登录 * @param $code * @return mixed * @throws Exception */ public function login($code) { $response = $this->getHttpClient()->get($this->base_url.'/sns/jscode2session', [ 'query' => array_filter([ 'appid' => $this->appid, 'secret' => $this->secret, 'js_code' => $code, 'grant_type' => 'authorization_code' ]), ]); $result = json_decode($response->getBody(), true); if(isset($result['errcode'])){ throw new Exception($result['errmsg']); } return $result; } /** * 获取后台接口access_token */ public function getAccessToken() { $key = 'wechat.common.access_token.'.$this->appid; $cache = \Yii::$app->cache; $access_token = $cache->get($key); if($access_token == false){ //app.huiliaoyaofang.com //job过来的没有HTTP_HOST; // if(!isset($_SERVER['HTTP_HOST']) || $_SERVER['HTTP_HOST']!=='app.huiliaoyaofang.com'){ // $response = $this->getHttpClient()->get('https://app.huiliaoyaofang.com/api/v1/noauth/token'); // $result = json_decode($response->getBody(), true); // $access_token = $result['data']['token']; // }else{ if(!isset($_SERVER['HTTP_HOST']) || $_SERVER['HTTP_HOST']=='hy.api.ctkj88.com') { $response = $this->getHttpClient()->get('http://hy.api.ctkj88.com/service/v1/user/token'); $result = json_decode($response->getBody(), true); $access_token = $result['data']['token']; }else{ $response = $this->getHttpClient()->get($this->base_url.'/cgi-bin/token', [ 'query' => array_filter([ 'appid' => $this->appid, 'secret' => $this->secret, 'grant_type' => 'client_credential' ]), ]); $result = json_decode($response->getBody(), true); if(isset($result['errcode'])){ throw new Exception($result['errmsg']); } $access_token = $result['access_token']; $cache->set($key,$access_token,$result['expires_in']-30*60); } } return $access_token; } /** * 获取小程序码 * @param $scene * @return mixed * @throws Exception */ public function getQrcode($scene,$page='',$type='base64') { $data['scene'] = $scene; if($page){ $data['page'] = $page; } $params = [ 'json' => $data, ]; $response = $this->getHttpClient()->post($this->base_url.'/wxa/getwxacodeunlimit?access_token='.$this->getAccessToken(),$params); $body = $response->getBody(); //\Yii::$app->response->format = \yii\web\Response::FORMAT_RAW; try { $buffer = $body->getContents(); if($type=='base64'){ $type = getimagesizefromstring($buffer)['mime']; //获取二进制流图片格式 $base64String = 'data:' . $type . ';base64,' . chunk_split(base64_encode($buffer)); // header('Content-Type: '.getimagesizefromstring($buffer)['mime']); return $base64String; }else{ return $buffer; } }catch (\Exception $exception){ \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; $result = json_decode($response->getBody(), true); if(isset($result['errcode'])){ throw new Exception($result['errmsg']); } } } }