| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285 |
- <?php
- /*
- * FecShop file.
- *
- * @link http://www.fecshop.com/
- * @copyright Copyright (c) 2016 FecShop Software LLC
- * @license http://www.fecshop.com/license/
- */
- namespace fecshop\services\extension;
- //use fecshop\models\mysqldb\cms\StaticBlock;
- use Yii;
- use fecshop\services\Service;
- /**
- * @author Terry Zhao <2358269014@qq.com>
- * @since 1.0
- */
- class RemoteService extends Service
- {
- const ADDONS_TOKEN = 'addons_access_token';
-
- public $remoteUrl = 'http://addons.server.fecmall.com';
- public $loginUrlKey = '/customer/login/account';
- public $getAddonsListUrlKey = '/customer/addons/index';
- public $getAddonInfoUrlKey = '/customer/addons/info';
- public $getDeveloperInfoUrlKey = '/customer/addons/developer';
- // 远程登陆
- public function login($param)
- {
- $url = $this->remoteUrl . $this->loginUrlKey ;
- $data = [
- 'email' => $param['email'],
- 'password' => $param['password'],
- ];
- list($responseHeader, $result) = $this->getCurlData($url, 'post', [], $data, 30);
- if ($result['code'] == 200) {
- $access_token = $responseHeader['Access-Token'];
- $this->setAccessToken($access_token);
-
- return true;
- }
-
- return false;
- }
-
- // 得到开发者的信息
- public function getDeveloperInfo()
- {
- $accessToken = $this->getAccessToken();
- if (!$accessToken) {
- return false;
- }
- $url = $this->remoteUrl . $this->getDeveloperInfoUrlKey ;
- $headerRequest = [
- 'access-token: '.$accessToken,
- ];
- list($responseHeader, $result) = $this->getCurlData($url, 'post', $headerRequest, [], 30);
-
- if ($result['code'] == 200) {
-
- return $result['data'];
- }
-
- return false;
-
-
- }
-
- // 得到远程的addon 信息(我的应用列表)
- public function getMyAddonsInfo($pageNum, $numPerPage)
- {
- $accessToken = $this->getAccessToken();
- if (!$accessToken) {
- return false;
- }
- $url = $this->remoteUrl . $this->getAddonsListUrlKey ;
- $headerRequest = [
- 'access-token: '.$accessToken,
- ];
- $data = [
- 'pageNum' => $pageNum,
- 'numPerPage' => $numPerPage,
- ];
- list($responseHeader, $result) = $this->getCurlData($url, 'post', $headerRequest, $data, 30);
-
- if ($result['code'] == 200) {
-
- return $result['data'];
- }
-
- return false;
- }
- // 得到应用的详细信息。
- public function getAddonsInfoByNamespace($namespace)
- {
- $accessToken = $this->getAccessToken();
- if (!$accessToken) {
- return false;
- }
- $url = $this->remoteUrl . $this->getAddonInfoUrlKey ;
- $headerRequest = [
- 'access-token: '.$accessToken,
- ];
- $data = [
- 'namespace' => $namespace,
- ];
- list($responseHeader, $result) = $this->getCurlData($url, 'post', $headerRequest, $data, 30);
-
- if ($result['code'] == 200) {
-
- return $result['data'];
- }
-
- return false;
-
-
- }
-
- // 下载应用
- public function downloadAddons($namespace, $packageName, $folderName, $addonName)
- {
- // 得到下载的url
- $url = $this->remoteUrl . '/customer/addons/download?namespace='.$namespace;
- // 当前应用的package,进行mkdir,然后chomod 777
- $packagePath = Yii::getAlias('@addons/'.$packageName);
- if (!is_dir($packagePath)){
- mkdir($packagePath);
- chmod($packagePath, 0777);
- }
- // 应用文件夹
- $packagePath = Yii::getAlias('@addons/'.$packageName.'/'.$folderName);
- if (!is_dir($packagePath)){
- mkdir($packagePath);
- chmod($packagePath, 0777);
- }
-
- // 根据文件路径,以及addon的name,得到zip文件存放的文件完整路径
- $filePath = Yii::getAlias('@addons/'.$packageName.'/'.$folderName.'/'.$folderName.'.zip');
- // 将url中的zip文件,存储到该文件目录。
- if ($this->downCurl($url,$filePath)) {
- return $filePath;
- }
-
- return null;
- }
- // 远程下载zip包
-
- function downCurl($url, $filePath)
- {
- $accessToken = $this->getAccessToken();
- if (!$accessToken) {
- return false;
- }
- $headerRequest = [
- 'access-token: '.$accessToken,
- ];
- //初始化
- $ch = curl_init();
- curl_setopt($ch,
- CURLOPT_HTTPHEADER,
- $headerRequest
- );
- //echo $filePath;exit;
- //设置抓取的url
- curl_setopt($ch, CURLOPT_URL, $url);
- //打开文件描述符
- $fp = fopen ($filePath, 'w+');
- curl_setopt($ch, CURLOPT_FILE, $fp);
- //这个选项是意思是跳转,如果你访问的页面跳转到另一个页面,也会模拟访问。
- curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
- curl_setopt($ch,CURLOPT_TIMEOUT, 5000);
- //执行命令
- curl_exec($ch);
- //关闭URL请求
- curl_close($ch);
- //关闭文件描述符
- fclose($fp);
-
- return true;
- }
-
- /*
- public function downFile($url,$path){
- $arr=parse_url($url);
- $fileName=basename($arr['path']);
- $file=file_get_contents($url);
- file_put_contents($path.$fileName,$file);
- }
- */
-
- public function isLogin($checkRemote = false)
- {
- if ($checkRemote) {
- // 进行远程检查
-
- }
- if ($this->getAccessToken()) {
-
- return true;
- }
-
- return false;
- }
- public function setAccessToken($access_token)
- {
- if (!$access_token) {
- return false;
- }
- return Yii::$app->session->set(self::ADDONS_TOKEN, $access_token);
- }
- public function getAccessToken()
- {
- return Yii::$app->session->get(self::ADDONS_TOKEN);
- }
-
-
- public static function getCurlData($url,$type="get", $headerData, $data=array(),$timeout = 30){
- //对空格进行转义
- $url = str_replace(' ','+',$url);
- if($type == "get"){
- if(!empty($data) && is_array($data)){
-
- $arr = [];
- foreach($data as $k=>$v){
- $arr[] = $k."=".$v;
- }
- $str = implode("&",$arr);
- if(strstr($url,"?")){
- $url .= "&".$str;
- }else{
- $url .= "?".$str;
- }
- }
-
- }
- $data = json_encode($data);
- $headerRequest = [
- 'Accept: application/json',
- 'Content-Type: application/json',
- 'Content-Length: ' . strlen($data)
- ];
- $headerRequest = array_merge($headerRequest, $headerData);
-
- $url = urldecode($url);
- //echo $url ;exit;
- $ch = curl_init();
- //设置选项,包括URL
- curl_setopt($ch, CURLOPT_URL, "$url");
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
- //curl_setopt($ch, CURLOPT_HEADER, 0);
- curl_setopt($ch, CURLOPT_HEADER, true);
- curl_setopt($ch,CURLOPT_TIMEOUT,$timeout); //定义超时3秒钟
- if($type == "post"){
- // POST数据
- curl_setopt($ch, CURLOPT_POST, 1);
- curl_setopt($ch,
- CURLOPT_HTTPHEADER,
- $headerRequest
- );
- // 把post的变量加上
- curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
- }
- //执行并获取url地址的内容
- $output = curl_exec($ch);
- if (curl_getinfo($ch, CURLINFO_HTTP_CODE) == '200') {
- list($responseHeader, $body) = explode("\r\n\r\n", $output, 2);
- $headArr = explode("\r\n", $responseHeader);
- $responseHeaderArr = [];
- foreach ($headArr as $loop) {
- $arr = explode(': ', $loop);
- $responseHeaderArr[$arr[0]] = $arr[1];
- } //
- $reponseBody = json_decode($body, true);
- return [$responseHeaderArr, $reponseBody];
- }
- return ['', ''];
-
- }
- }
|