Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
M
meibuyu-micro
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
without authentication
meibuyu-micro
Commits
6ec80c96
Commit
6ec80c96
authored
Mar 16, 2021
by
王源
🎧
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
调整shopify底层为curl请求
parent
d1f5920a
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
201 additions
and
70 deletions
+201
-70
AbstractShopify.php
src/Shopify/lib/AbstractShopify.php
+24
-48
CurlHttpRequestJson.php
src/Shopify/tools/CurlHttpRequestJson.php
+86
-0
CurlRequest.php
src/Shopify/tools/CurlRequest.php
+43
-7
CurlResponse.php
src/Shopify/tools/CurlResponse.php
+7
-7
HttpRequestGraphQL.php
src/Shopify/tools/HttpRequestGraphQL.php
+20
-4
HttpRequestJson.php
src/Shopify/tools/HttpRequestJson.php
+21
-4
No files found.
src/Shopify/lib/AbstractShopify.php
View file @
6ec80c96
...
...
@@ -9,7 +9,8 @@
namespace
Meibuyu\Micro\Shopify\lib
;
use
Exception
;
use
Meibuyu\Micro\Shopify\Tools\HttpRequestJson
;
use
Meibuyu\Micro\Shopify\tools\CurlHttpRequestJson
;
use
Meibuyu\Micro\Shopify\tools\HttpRequestJson
;
use
Psr\Http\Message\ResponseInterface
;
abstract
class
AbstractShopify
...
...
@@ -45,7 +46,7 @@ abstract class AbstractShopify
private
$config
;
/**
* @var HttpRequestJson
* @var HttpRequestJson
|CurlHttpRequestJson
*/
private
$httpRequestJson
;
...
...
@@ -62,7 +63,7 @@ abstract class AbstractShopify
$this
->
id
=
$id
;
$this
->
pluralizeKey
=
$this
->
pluralizeKey
?:
$this
->
resourceKey
.
's'
;
$this
->
resourceUrl
=
(
$parentResourceUrl
?
"
$parentResourceUrl
/"
:
$config
[
'api_url'
])
.
$this
->
pluralizeKey
.
(
$this
->
id
?
"/
{
$this
->
id
}
"
:
''
);
$this
->
httpRequestJson
=
make
(
HttpRequestJson
::
class
);
$this
->
httpRequestJson
=
make
(
Curl
HttpRequestJson
::
class
);
if
(
isset
(
$config
[
'api_password'
]))
{
$this
->
httpHeaders
[
'X-Shopify-Access-Token'
]
=
$config
[
'api_password'
];
}
elseif
(
!
isset
(
$config
[
'api_password'
]))
{
...
...
@@ -158,20 +159,20 @@ abstract class AbstractShopify
return
$resourceUrl
.
(
$customAction
?
"/
$customAction
"
:
''
)
.
'.json'
.
(
!
empty
(
$urlParams
)
?
'?'
.
http_build_query
(
$urlParams
)
:
''
);
}
//
/**
//
* 获取数量
//
* @param array $urlParams
//
* @return mixed
//
* @throws Exception
//
*/
//
public function count($urlParams = [])
//
{
//
if (!$this->countEnabled) {
//
throw new Exception("当前类{$this->getResourceName()}不支持count()方法");
//
}
//
$url = $this->generateUrl($urlParams, null, 'count');
//
return $this->get([], $url, 'count');
//
}
/**
* 获取数量
* @param array $urlParams
* @return mixed
* @throws Exception
*/
public
function
count
(
$urlParams
=
[])
{
if
(
!
$this
->
countEnabled
)
{
throw
new
Exception
(
"当前类
{
$this
->
getResourceName
()
}
不支持count()方法"
);
}
$url
=
$this
->
generateUrl
(
$urlParams
,
null
,
'count'
);
return
$this
->
get
([],
$url
,
'count'
);
}
/**
* @param array $urlParams
...
...
@@ -282,15 +283,14 @@ abstract class AbstractShopify
/**
* 处理响应
* @param
ResponseInterface
$response
* @param
array
$response
* @param null $dataKey
* @return mixed
* @throws Exception
*/
public
function
processResponse
(
$response
,
$dataKey
=
null
)
{
$code
=
$response
->
getStatusCode
();
$content
=
$response
->
getBody
()
->
getContents
();
[
$code
,
,
$content
]
=
$response
;
$content
=
json_decode
(
$content
,
true
);
if
(
isset
(
$content
[
'errors'
]))
{
throw
new
Exception
(
$this
->
castString
(
$content
[
'errors'
]),
$code
);
...
...
@@ -302,28 +302,6 @@ abstract class AbstractShopify
}
}
/**
* 处理响应
* @param array $response
* @param null $dataKey
* @return mixed
* @throws Exception
*/
public
function
processResponseOld
(
$response
,
$dataKey
=
null
)
{
[
$code
,
$header
,
$body
]
=
$response
;
$content
=
json_decode
(
$body
,
true
);
if
(
isset
(
$content
[
'errors'
]))
{
throw
new
Exception
(
$this
->
castString
(
$content
[
'errors'
]),
$code
);
}
if
(
$dataKey
&&
isset
(
$content
[
$dataKey
]))
{
return
$content
[
$dataKey
];
}
else
{
return
$content
;
}
}
/**
* 处理响应
* @param ResponseInterface $response
...
...
@@ -333,9 +311,7 @@ abstract class AbstractShopify
*/
public
function
processPageResponse
(
$response
,
$dataKey
=
null
)
{
$code
=
$response
->
getStatusCode
();
$headers
=
$response
->
getHeaders
();
$content
=
$response
->
getBody
()
->
getContents
();
[
$code
,
$headers
,
$content
]
=
$response
;
$content
=
json_decode
(
$content
,
true
);
$link
=
$this
->
getLink
(
$headers
);
if
(
isset
(
$content
[
'errors'
]))
{
...
...
@@ -351,11 +327,11 @@ abstract class AbstractShopify
public
function
getLink
(
$header
,
$type
=
'next'
)
{
if
(
!
empty
(
$header
[
'
X-Shopify-API-Version'
][
0
])
&&
$header
[
'X-Shopify-API-V
ersion'
][
0
]
<
'2019-07'
)
{
if
(
!
empty
(
$header
[
'
x-shopify-api-version'
][
0
])
&&
$header
[
'x-shopify-api-v
ersion'
][
0
]
<
'2019-07'
)
{
return
null
;
}
if
(
!
empty
(
$header
[
'
L
ink'
][
0
]))
{
$headerLinks
=
$header
[
'
L
ink'
][
0
];
if
(
!
empty
(
$header
[
'
l
ink'
][
0
]))
{
$headerLinks
=
$header
[
'
l
ink'
][
0
];
if
(
stristr
(
$headerLinks
,
'; rel="'
.
$type
.
'"'
)
>
-
1
)
{
$headerLinks
=
explode
(
','
,
$headerLinks
);
foreach
(
$headerLinks
as
$headerLink
)
{
...
...
src/
Tools/
HttpRequestJson.php
→
src/
Shopify/tools/Curl
HttpRequestJson.php
View file @
6ec80c96
...
...
@@ -6,20 +6,19 @@
* Time: 9:06
*/
namespace
Meibuyu\Micro\
T
ools
;
namespace
Meibuyu\Micro\
Shopify\t
ools
;
//use GuzzleHttp\Client;
//use Psr\Http\Message\ResponseInterface;
use
Exception
;
/**
*
json格式请求(非协程)
*
Curl的json格式请求
* Class HttpRequestJson
* @package Meibuyu\Micro\Tools
*/
class
HttpRequestJson
class
Curl
HttpRequestJson
{
protected
static
function
prepareRequest
(
$headers
,
$data
=
[])
protected
function
prepareRequest
(
$headers
,
$data
=
[])
{
$data
=
json_encode
(
$data
);
if
(
!
empty
(
$data
))
{
...
...
@@ -29,63 +28,14 @@ class HttpRequestJson
return
[
$headers
,
$data
];
}
// /**
// * get请求
// * @param $url
// * @param array $httpHeaders
// * @return ResponseInterface
// */
// public static function get($url, $httpHeaders = [])
// {
// $client = new Client(['timeout' => 30]);
// return $client->get($url, ['headers' => $httpHeaders]);
// }
//
// /**
// * post请求
// * @param $url
// * @param $data
// * @param array $httpHeaders
// * @return ResponseInterface
// */
// public static function post($url, $data, $httpHeaders = [])
// {
// $client = new Client(['timeout' => 30]);
// return $client->post($url, ['headers' => $httpHeaders, 'json' => $data]);
// }
//
// /**
// * put请求
// * @param $url
// * @param $data
// * @param array $httpHeaders
// * @return ResponseInterface
// */
// public static function put($url, $data, $httpHeaders = [])
// {
// $client = new Client(['timeout' => 30]);
// return $client->put($url, ['headers' => $httpHeaders, 'json' => $data]);
// }
//
// /**
// * delete请求
// * @param $url
// * @param array $httpHeaders
// * @return ResponseInterface
// */
// public static function delete($url, $httpHeaders = [])
// {
// $client = new Client(['timeout' => 30]);
// return $client->delete($url, ['headers' => $httpHeaders]);
// }
/**
* get请求
* @param $url
* @param array $headers
* @return array
* @throws Exception
* @author zero
*/
public
static
function
get
(
$url
,
$headers
=
[])
public
function
get
(
$url
,
$headers
=
[])
{
return
CurlRequest
::
get
(
$url
,
$headers
);
}
...
...
@@ -96,8 +46,10 @@ class HttpRequestJson
* @param $data
* @param array $headers
* @return array
* @throws Exception
* @author zero
*/
public
static
function
post
(
$url
,
$data
,
$headers
=
[])
public
function
post
(
$url
,
$data
,
$headers
=
[])
{
[
$headers
,
$data
]
=
self
::
prepareRequest
(
$headers
,
$data
);
return
CurlRequest
::
post
(
$url
,
$data
,
$headers
);
...
...
@@ -109,8 +61,10 @@ class HttpRequestJson
* @param $data
* @param array $headers
* @return array
* @throws Exception
* @author zero
*/
public
static
function
put
(
$url
,
$data
,
$headers
=
[])
public
function
put
(
$url
,
$data
,
$headers
=
[])
{
[
$headers
,
$data
]
=
self
::
prepareRequest
(
$headers
,
$data
);
return
CurlRequest
::
put
(
$url
,
$data
,
$headers
);
...
...
@@ -121,8 +75,10 @@ class HttpRequestJson
* @param $url
* @param array $headers
* @return array
* @throws Exception
* @author zero
*/
public
static
function
delete
(
$url
,
$headers
=
[])
public
function
delete
(
$url
,
$headers
=
[])
{
return
CurlRequest
::
delete
(
$url
,
$headers
);
}
...
...
src/
T
ools/CurlRequest.php
→
src/
Shopify/t
ools/CurlRequest.php
View file @
6ec80c96
<?php
namespace
Meibuyu\Micro\
T
ools
;
namespace
Meibuyu\Micro\
Shopify\t
ools
;
use
Exception
;
...
...
@@ -22,12 +22,27 @@ class CurlRequest
return
$ch
;
}
/**
* @param $url
* @param array $httpHeaders
* @return array
* @throws Exception
* @author zero
*/
public
static
function
get
(
$url
,
$httpHeaders
=
[])
{
$ch
=
self
::
init
(
$url
,
$httpHeaders
);
return
self
::
processRequest
(
$ch
);
}
/**
* @param $url
* @param $data
* @param array $httpHeaders
* @return array
* @throws Exception
* @author zero
*/
public
static
function
post
(
$url
,
$data
,
$httpHeaders
=
[])
{
$ch
=
self
::
init
(
$url
,
$httpHeaders
);
...
...
@@ -36,6 +51,14 @@ class CurlRequest
return
self
::
processRequest
(
$ch
);
}
/**
* @param $url
* @param $data
* @param array $httpHeaders
* @return array
* @throws Exception
* @author zero
*/
public
static
function
put
(
$url
,
$data
,
$httpHeaders
=
[])
{
$ch
=
self
::
init
(
$url
,
$httpHeaders
);
...
...
@@ -44,6 +67,13 @@ class CurlRequest
return
self
::
processRequest
(
$ch
);
}
/**
* @param $url
* @param array $httpHeaders
* @return array
* @throws Exception
* @author zero
*/
public
static
function
delete
(
$url
,
$httpHeaders
=
[])
{
$ch
=
self
::
init
(
$url
,
$httpHeaders
);
...
...
@@ -51,17 +81,23 @@ class CurlRequest
return
self
::
processRequest
(
$ch
);
}
/**
* @param $ch
* @return array
* @throws Exception
* @author zero
*/
protected
static
function
processRequest
(
$ch
)
{
$output
=
curl_exec
(
$ch
);
$response
=
new
CurlResponse
(
$output
);
$httpCode
=
curl_getinfo
(
$ch
,
CURLINFO_HTTP_CODE
);
if
(
$httpCode
==
429
)
{
$limitHeader
=
explode
(
'/'
,
$response
->
getHeader
(
'X-Shopify-Shop-Api-Call-Limit'
)
,
2
);
if
(
isset
(
$limitHeader
[
1
])
&&
$limitHeader
[
0
]
<
$limitHeader
[
1
])
{
throw
new
Exception
(
$response
->
getBody
());
}
}
//
if ($httpCode == 429) {
// $limitHeader = explode('/', $response->getHeader('X-Shopify-Shop-Api-Call-Limit')[0]
, 2);
//
if (isset($limitHeader[1]) && $limitHeader[0] < $limitHeader[1]) {
//
throw new Exception($response->getBody());
//
}
//
}
if
(
curl_errno
(
$ch
))
{
throw
new
Exception
(
curl_errno
(
$ch
)
.
' : '
.
curl_error
(
$ch
));
}
...
...
src/
T
ools/CurlResponse.php
→
src/
Shopify/t
ools/CurlResponse.php
View file @
6ec80c96
<?php
namespace
Meibuyu\Micro\
T
ools
;
namespace
Meibuyu\Micro\
Shopify\t
ools
;
class
CurlResponse
{
...
...
@@ -21,16 +21,16 @@ class CurlResponse
*/
private
function
parse
(
$response
)
{
$response
=
\
explode
(
"
\r\n\r\n
"
,
$response
);
if
(
\
count
(
$response
)
>
1
)
{
$response
=
explode
(
"
\r\n\r\n
"
,
$response
);
if
(
count
(
$response
)
>
1
)
{
// We want the last two parts
$response
=
\
array_slice
(
$response
,
-
2
,
2
);
$response
=
array_slice
(
$response
,
-
2
,
2
);
list
(
$headers
,
$body
)
=
$response
;
foreach
(
\
explode
(
"
\r\n
"
,
$headers
)
as
$header
)
{
$pair
=
\
explode
(
': '
,
$header
,
2
);
foreach
(
explode
(
"
\r\n
"
,
$headers
)
as
$header
)
{
$pair
=
explode
(
': '
,
$header
,
2
);
if
(
isset
(
$pair
[
1
]))
{
$headerKey
=
strtolower
(
$pair
[
0
]);
$this
->
headers
[
$headerKey
]
=
$pair
[
1
];
$this
->
headers
[
$headerKey
]
[]
=
$pair
[
1
];
}
}
}
else
{
...
...
src/Shopify/tools/HttpRequestGraphQL.php
View file @
6ec80c96
...
...
@@ -7,18 +7,25 @@
namespace
Meibuyu\Micro\Shopify\tools
;
use
Meibuyu\Micro\Tools\CurlRequest
;
use
Meibuyu\Micro\Tools\HttpRequestJson
;
use
Exception
;
class
HttpRequestGraphQL
extends
HttpRequestJson
class
HttpRequestGraphQL
{
/**
* @param array $headers
* @param array $data
* @param null $variables
* @return array
* @throws Exception
* @author zero
*/
protected
static
function
prepareRequest
(
$headers
=
[],
$data
=
[],
$variables
=
null
)
{
if
(
is_string
(
$data
))
{
$postDataGraphQL
=
$data
;
}
else
{
throw
new
\
Exception
(
"Only GraphQL string is allowed!"
);
throw
new
Exception
(
"Only GraphQL string is allowed!"
);
}
if
(
is_array
(
$variables
))
{
$postDataGraphQL
=
json_encode
([
'query'
=>
$data
,
'variables'
=>
$variables
]);
...
...
@@ -29,6 +36,15 @@ class HttpRequestGraphQL extends HttpRequestJson
return
[
$headers
,
$postDataGraphQL
];
}
/**
* @param $url
* @param $data
* @param array $headers
* @param null $variables
* @return array
* @throws Exception
* @author zero
*/
public
static
function
post
(
$url
,
$data
,
$headers
=
[],
$variables
=
null
)
{
[
$headers
,
$postDataGraphQL
]
=
self
::
prepareRequest
(
$headers
,
$data
,
$variables
);
...
...
src/Shopify/tools/HttpRequestJson.php
View file @
6ec80c96
...
...
@@ -47,7 +47,8 @@ class HttpRequestJson
public
function
get
(
$url
,
$httpHeaders
=
[])
{
$client
=
$this
->
clientFactory
->
create
([
'timeout'
=>
60
,
'handler'
=>
$this
->
stack
,]);
return
$client
->
get
(
$url
,
[
'headers'
=>
$httpHeaders
]);
$res
=
$client
->
get
(
$url
,
[
'headers'
=>
$httpHeaders
]);
return
$this
->
processResponse
(
$res
);
}
/**
...
...
@@ -60,7 +61,8 @@ class HttpRequestJson
public
function
post
(
$url
,
$data
,
$httpHeaders
=
[])
{
$client
=
$this
->
clientFactory
->
create
([
'timeout'
=>
60
,
'handler'
=>
$this
->
stack
,]);
return
$client
->
post
(
$url
,
[
'headers'
=>
$httpHeaders
,
'json'
=>
$data
]);
$res
=
$client
->
post
(
$url
,
[
'headers'
=>
$httpHeaders
,
'json'
=>
$data
]);
return
$this
->
processResponse
(
$res
);
}
/**
...
...
@@ -73,7 +75,8 @@ class HttpRequestJson
public
function
put
(
$url
,
$data
,
$httpHeaders
=
[])
{
$client
=
$this
->
clientFactory
->
create
([
'timeout'
=>
60
,
'handler'
=>
$this
->
stack
,]);
return
$client
->
put
(
$url
,
[
'headers'
=>
$httpHeaders
,
'json'
=>
$data
]);
$res
=
$client
->
put
(
$url
,
[
'headers'
=>
$httpHeaders
,
'json'
=>
$data
]);
return
$this
->
processResponse
(
$res
);
}
/**
...
...
@@ -85,7 +88,21 @@ class HttpRequestJson
public
function
delete
(
$url
,
$httpHeaders
=
[])
{
$client
=
$this
->
clientFactory
->
create
([
'timeout'
=>
60
,
'handler'
=>
$this
->
stack
,]);
return
$client
->
delete
(
$url
,
[
'headers'
=>
$httpHeaders
]);
$res
=
$client
->
delete
(
$url
,
[
'headers'
=>
$httpHeaders
]);
return
$this
->
processResponse
(
$res
);
}
/**
* 处理响应
* @param ResponseInterface $response
* @return mixed
*/
public
function
processResponse
(
$response
)
{
$code
=
$response
->
getStatusCode
();
$headers
=
$response
->
getHeaders
();
$content
=
$response
->
getBody
()
->
getContents
();
return
[
$code
,
$headers
,
$content
];
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment