Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
M
meibuyu-rpc
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
0
Merge Requests
0
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-rpc
Commits
7bf1df7f
Commit
7bf1df7f
authored
Sep 18, 2020
by
王源
🎧
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'develop' into test
parents
1c46cdf0
94d2b42d
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
80 additions
and
410 deletions
+80
-410
MessageServiceInterface.php
src/Service/Interfaces/MessageServiceInterface.php
+15
-0
StoreServiceInterface.php
src/Service/Interfaces/StoreServiceInterface.php
+46
-37
ShopifyApp.php
src/Shopify/ShopifyApp.php
+0
-8
AbstractShopify.php
src/Shopify/lib/AbstractShopify.php
+19
-115
Product.php
src/Shopify/lib/Product.php
+0
-34
ProductImage.php
src/Shopify/lib/ProductImage.php
+0
-16
ProductVariant.php
src/Shopify/lib/ProductVariant.php
+0
-28
CurlRequest.php
src/Tools/CurlRequest.php
+0
-97
CurlResponse.php
src/Tools/CurlResponse.php
+0
-75
No files found.
src/Service/Interfaces/MessageServiceInterface.php
View file @
7bf1df7f
...
@@ -22,4 +22,19 @@ interface MessageServiceInterface
...
@@ -22,4 +22,19 @@ interface MessageServiceInterface
* @return bool
* @return bool
*/
*/
public
function
send
(
array
$receiveUserId
,
$application
,
$templateId
=
0
,
$sendUserId
=
0
,
$replace
=
[],
$content
=
''
)
:
bool
;
public
function
send
(
array
$receiveUserId
,
$application
,
$templateId
=
0
,
$sendUserId
=
0
,
$replace
=
[],
$content
=
''
)
:
bool
;
/**
* description:发送邮件
* author: fuyunnan
* @param array $userList ['111@qq.com','222@qq.com']
* @param string $subject 邮件标题
* @param string $body 邮件内容
* @return bool
* @throws
* Date: 2020/9/10
*/
public
function
sendMail
(
$userList
,
$subject
,
$body
)
:
bool
;
}
}
src/Service/Interfaces/StoreServiceInterface.php
View file @
7bf1df7f
...
@@ -25,22 +25,22 @@ interface StoreServiceInterface
...
@@ -25,22 +25,22 @@ interface StoreServiceInterface
* author: fuyunnan
* author: fuyunnan
* @param array $data 需要入库的数组 格式 入库添加
* @param array $data 需要入库的数组 格式 入库添加
* *
* *
data[master][warehousing_date]:2020-01-08 入库时间
*
data[master][warehousing_date]:2020-01-08 入库时间
data[master][creator_id]:12 创建人id
*
data[master][creator_id]:12 创建人id
data[master][warehouse_id]:2 仓库id
*
data[master][warehouse_id]:2 仓库id
data[master][type_id]:1 入库单类型
*
data[master][type_id]:1 入库单类型
data[master][source_no]:no_121333 来源单号 (选填)
*
data[master][source_no]:no_121333 来源单号 (选填)
data[master][stock_up_status]:1二次质检状态 (选填)
*
data[master][stock_up_status]:1二次质检状态 (选填)
data[master][remark]:备注 (选填)
*
data[master][remark]:备注 (选填)
data[master][status]:2 状态 (选填 不填默认1)
*
data[master][status]:2 状态 (选填 不填默认1)
*
*
* 产品二维数组
* 产品二维数组
data[goods][0][product_id]:16 产品id
*
data[goods][0][product_id]:16 产品id
data[goods][0][should_cnt]:133 应入数量
*
data[goods][0][should_cnt]:133 应入数量
data[goods][0][real_cnt]:10 实入数量
*
data[goods][0][real_cnt]:10 实入数量
data[goods][1][product_id]:18
*
data[goods][1][product_id]:18
data[goods][1][should_cnt]:10
*
data[goods][1][should_cnt]:10
data[goods][1][real_cnt]:15
*
data[goods][1][real_cnt]:15
*
*
* 或者参考yapi http://api.huaperfect.com/project/38/interface/api/1617
* 或者参考yapi http://api.huaperfect.com/project/38/interface/api/1617
*
*
...
@@ -51,30 +51,28 @@ interface StoreServiceInterface
...
@@ -51,30 +51,28 @@ interface StoreServiceInterface
public
function
createWarehousing
(
array
$data
)
:
array
;
public
function
createWarehousing
(
array
$data
)
:
array
;
/**
/**
* description:批量创建出库单
* description:批量创建出库单
* author: fuyunnan
* author: fuyunnan
* [
* [
'main' => [
*
'main' => [
'creator_id' => 1,
*
'creator_id' => 1,
'warehouse_id' => 1,
*
'warehouse_id' => 1,
'type' => 5,
*
'type' => 5,
],
*
],
'products' => [
*
'products' => [
[
*
[
'source_no' => 1,
*
'source_no' => 1,
'product_id' => 1,
*
'product_id' => 1,
'real_cnt' => 1
*
'real_cnt' => 1
],
*
],
[
*
[
'source_no' => 1,
*
'source_no' => 1,
'product_id' => 1,
*
'product_id' => 1,
'real_cnt' => 1
*
'real_cnt' => 1
]
*
]
]
*
]
]
*
]
*
*
* @param array $attributes 提交的数组 或参考yapi http://api.huaperfect.com/project/38/interface/api/6968
* @param array $attributes 提交的数组 或参考yapi http://api.huaperfect.com/project/38/interface/api/6968
* @return array
* @return array
...
@@ -173,6 +171,17 @@ interface StoreServiceInterface
...
@@ -173,6 +171,17 @@ interface StoreServiceInterface
* @throws
* @throws
* Date: 2020/7/31
* Date: 2020/7/31
*/
*/
public
function
checkStock
(
$ids
)
:
array
;
public
function
checkStock
(
$ids
)
:
array
;
/**
* description:出库单 恢复库存 出库单定为已取消
* author: fuyunnan
* @param string $sourceNo 来源单号
* @return int
* @throws
* Date: 2020/9/7
*/
public
function
restoreStock
(
$sourceNo
)
:
int
;
}
}
\ No newline at end of file
src/Shopify/ShopifyApp.php
View file @
7bf1df7f
...
@@ -14,8 +14,6 @@ use Meibuyu\Micro\Shopify\lib\Collect;
...
@@ -14,8 +14,6 @@ use Meibuyu\Micro\Shopify\lib\Collect;
use
Meibuyu\Micro\Shopify\lib\Collection
;
use
Meibuyu\Micro\Shopify\lib\Collection
;
use
Meibuyu\Micro\Shopify\lib\CustomCollection
;
use
Meibuyu\Micro\Shopify\lib\CustomCollection
;
use
Meibuyu\Micro\Shopify\lib\Metafield
;
use
Meibuyu\Micro\Shopify\lib\Metafield
;
use
Meibuyu\Micro\Shopify\lib\Product
;
use
Meibuyu\Micro\Shopify\lib\ProductVariant
;
use
Meibuyu\Micro\Shopify\lib\SmartCollection
;
use
Meibuyu\Micro\Shopify\lib\SmartCollection
;
use
Meibuyu\Micro\Shopify\lib\Webhook
;
use
Meibuyu\Micro\Shopify\lib\Webhook
;
...
@@ -29,16 +27,12 @@ use Meibuyu\Micro\Shopify\lib\Webhook;
...
@@ -29,16 +27,12 @@ use Meibuyu\Micro\Shopify\lib\Webhook;
* @property-read CustomCollection $CustomCollection
* @property-read CustomCollection $CustomCollection
* @property-read SmartCollection $SmartCollection
* @property-read SmartCollection $SmartCollection
* @property-read Metafield $Metafield
* @property-read Metafield $Metafield
* @property-read Product $Product
* @property-read ProductVariant $ProductVariant
*
*
* @method Webhook Webhook(integer $id = null)
* @method Webhook Webhook(integer $id = null)
* @method Collection Collection(integer $id = null)
* @method Collection Collection(integer $id = null)
* @method CustomCollection CustomCollection(integer $id = null)
* @method CustomCollection CustomCollection(integer $id = null)
* @method SmartCollection SmartCollection(integer $id = null)
* @method SmartCollection SmartCollection(integer $id = null)
* @method Metafield Metafield(integer $id = null)
* @method Metafield Metafield(integer $id = null)
* @method Product Product(integer $id = null)
* @method ProductVariant ProductVariant(integer $id = null)
*
*
*/
*/
class
ShopifyApp
class
ShopifyApp
...
@@ -51,8 +45,6 @@ class ShopifyApp
...
@@ -51,8 +45,6 @@ class ShopifyApp
'CustomCollection'
,
'CustomCollection'
,
'SmartCollection'
,
'SmartCollection'
,
'Metafield'
,
'Metafield'
,
'Product'
,
'ProductVariant'
,
];
];
protected
$childResources
=
array
(
protected
$childResources
=
array
(
...
...
src/Shopify/lib/AbstractShopify.php
View file @
7bf1df7f
...
@@ -153,95 +153,6 @@ abstract class AbstractShopify
...
@@ -153,95 +153,6 @@ abstract class AbstractShopify
return
$resourceUrl
.
(
$customAction
?
"/
$customAction
"
:
''
)
.
'.json'
.
(
!
empty
(
$urlParams
)
?
'?'
.
http_build_query
(
$urlParams
)
:
''
);
return
$resourceUrl
.
(
$customAction
?
"/
$customAction
"
:
''
)
.
'.json'
.
(
!
empty
(
$urlParams
)
?
'?'
.
http_build_query
(
$urlParams
)
:
''
);
}
}
// /**
// * @param array $urlParams
// * @param null $url
// * @param null $dataKey
// * @return mixed
// * @throws Exception
// */
// public function get($urlParams = [], $url = null, $dataKey = null)
// {
// if (!$url) $url = $this->generateUrl($urlParams);
// $response = HttpRequestJson::get($url, $this->httpHeaders);
// if (!$dataKey) $dataKey = $this->id ? $this->resourceKey : $this->pluralizeKey;
// return $this->processResponse($response, $dataKey);
// }
//
// /**
// * 根据id获取一条数据
// * @param $id
// * @param array $urlParams
// * @return mixed
// * @throws Exception
// */
// public function show($id, $urlParams = [])
// {
// $url = $this->generateUrl($urlParams, $id);
// $response = HttpRequestJson::get($url, $this->httpHeaders);
// return $this->processResponse($response, $this->resourceKey);
// }
//
// /**
// * 获取数量
// * @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 $dataArray
// * @param null $url
// * @param bool $wrapData
// * @return mixed
// * @throws Exception
// */
// public function post($dataArray, $url = null, $wrapData = true)
// {
// if (!$url) $url = $this->generateUrl();
// if ($wrapData && !empty($dataArray)) $dataArray = $this->wrapData($dataArray);
// $response = HttpRequestJson::post($url, $dataArray, $this->httpHeaders);
// return $this->processResponse($response, $this->resourceKey);
// }
//
// /**
// * @param int|string $id
// * @param $dataArray
// * @param null $url
// * @param bool $wrapData
// * @return mixed
// * @throws Exception
// */
// public function put($id, $dataArray, $url = null, $wrapData = true)
// {
// if (!$url) $url = $this->generateUrl([], $id);
// if ($wrapData && !empty($dataArray)) $dataArray = $this->wrapData($dataArray);
// $response = HttpRequestJson::put($url, $dataArray, $this->httpHeaders);
// return $this->processResponse($response, $this->resourceKey);
// }
//
// /**
// * @param int|string $id
// * @param array $urlParams
// * @param null $url
// * @return mixed
// * @throws Exception
// */
// public function delete($id = null, $urlParams = [], $url = null)
// {
// if (!$url) $url = $this->generateUrl($urlParams, $id);
// $response = HttpRequestJson::delete($url, $this->httpHeaders);
// return $this->processResponse($response);
// }
/**
/**
* @param array $urlParams
* @param array $urlParams
* @param null $url
* @param null $url
...
@@ -285,6 +196,21 @@ abstract class AbstractShopify
...
@@ -285,6 +196,21 @@ abstract class AbstractShopify
return
$this
->
processResponse
(
$response
,
$this
->
resourceKey
);
return
$this
->
processResponse
(
$response
,
$this
->
resourceKey
);
}
}
/**
* 获取数量
* @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 $dataArray
* @param $dataArray
* @param null $url
* @param null $url
...
@@ -356,36 +282,14 @@ abstract class AbstractShopify
...
@@ -356,36 +282,14 @@ abstract class AbstractShopify
* @return mixed
* @return mixed
* @throws Exception
* @throws Exception
*/
*/
// public function processResponse($response, $dataKey = null)
// {
// $httpCode = $response->getStatusCode();
// $content = $response->getBody()->getContents();
// $content = json_decode($content, true);
//
// if (isset($content['errors'])) {
// throw new Exception($this->castString($content['errors']), $httpCode);
// }
// if ($dataKey && isset($content[$dataKey])) {
// return $content[$dataKey];
// } else {
// return $content;
// }
// }
/**
* 处理响应
* @param array $response
* @param null $dataKey
* @return mixed
* @throws Exception
*/
public
function
processResponse
(
$response
,
$dataKey
=
null
)
public
function
processResponse
(
$response
,
$dataKey
=
null
)
{
{
[
$code
,
$header
,
$body
]
=
$response
;
$httpCode
=
$response
->
getStatusCode
();
$content
=
json_decode
(
$body
,
true
);
$content
=
$response
->
getBody
()
->
getContents
();
$content
=
json_decode
(
$content
,
true
);
if
(
isset
(
$content
[
'errors'
]))
{
if
(
isset
(
$content
[
'errors'
]))
{
throw
new
Exception
(
$this
->
castString
(
$content
[
'errors'
]),
$
c
ode
);
throw
new
Exception
(
$this
->
castString
(
$content
[
'errors'
]),
$
httpC
ode
);
}
}
if
(
$dataKey
&&
isset
(
$content
[
$dataKey
]))
{
if
(
$dataKey
&&
isset
(
$content
[
$dataKey
]))
{
return
$content
[
$dataKey
];
return
$content
[
$dataKey
];
...
...
src/Shopify/lib/Product.php
deleted
100644 → 0
View file @
1c46cdf0
<?php
/**
* Created by PhpStorm.
* User: Zero
* Date: 2020/9/2
* Time: 16:50
*/
namespace
Meibuyu\Micro\Shopify\lib
;
/**
* Class Product
* @package Meibuyu\Micro\Shopify\lib
*
* @property-read ProductImage $Image
* @property-read ProductVariant $Variant
* @property-read Metafield $Metafield
*
* @method ProductImage Image(integer $id = null)
* @method ProductVariant Variant(integer $id = null)
* @method Metafield Metafield(integer $id = null)
*/
class
Product
extends
AbstractShopify
{
protected
$resourceKey
=
'product'
;
protected
$childResource
=
[
'ProductImage'
=>
'Image'
,
'ProductVariant'
=>
'Variant'
,
'Metafield'
,
];
}
src/Shopify/lib/ProductImage.php
deleted
100644 → 0
View file @
1c46cdf0
<?php
/**
* Created by PhpStorm.
* User: Zero
* Date: 2020/9/2
* Time: 16:50
*/
namespace
Meibuyu\Micro\Shopify\lib
;
class
ProductImage
extends
AbstractShopify
{
protected
$resourceKey
=
'image'
;
}
src/Shopify/lib/ProductVariant.php
deleted
100644 → 0
View file @
1c46cdf0
<?php
/**
* Created by PhpStorm.
* User: Zero
* Date: 2020/9/2
* Time: 16:50
*/
namespace
Meibuyu\Micro\Shopify\lib
;
/**
* Class ProductVariant
* @package Meibuyu\Micro\Shopify\lib
*
* @property-read Metafield $Metafield
*
* @method Metafield Metafield(integer $id = null)
*/
class
ProductVariant
extends
AbstractShopify
{
protected
$resourceKey
=
'variant'
;
protected
$childResource
=
[
'Metafield'
,
];
}
src/Tools/CurlRequest.php
deleted
100644 → 0
View file @
1c46cdf0
<?php
namespace
Meibuyu\Micro\Tools
;
use
Exception
;
class
CurlRequest
{
protected
static
function
init
(
$url
,
$httpHeaders
=
[])
{
// Create Curl resource
$ch
=
curl_init
();
// Set URL
curl_setopt
(
$ch
,
CURLOPT_URL
,
$url
);
//Return the transfer as a string
curl_setopt
(
$ch
,
CURLOPT_RETURNTRANSFER
,
1
);
curl_setopt
(
$ch
,
CURLOPT_HEADER
,
true
);
curl_setopt
(
$ch
,
CURLOPT_USERAGENT
,
'PHPClassic/PHPShopify'
);
$headers
=
[];
foreach
(
$httpHeaders
as
$key
=>
$value
)
{
$headers
[]
=
"
$key
:
$value
"
;
}
//Set HTTP Headers
curl_setopt
(
$ch
,
CURLOPT_HTTPHEADER
,
$headers
);
return
$ch
;
}
public
static
function
get
(
$url
,
$httpHeaders
=
[])
{
$ch
=
self
::
init
(
$url
,
$httpHeaders
);
return
self
::
processRequest
(
$ch
);
}
public
static
function
post
(
$url
,
$data
,
$httpHeaders
=
[])
{
$ch
=
self
::
init
(
$url
,
$httpHeaders
);
curl_setopt
(
$ch
,
CURLOPT_CUSTOMREQUEST
,
'POST'
);
curl_setopt
(
$ch
,
CURLOPT_POSTFIELDS
,
$data
);
return
self
::
processRequest
(
$ch
);
}
public
static
function
put
(
$url
,
$data
,
$httpHeaders
=
[])
{
$ch
=
self
::
init
(
$url
,
$httpHeaders
);
curl_setopt
(
$ch
,
CURLOPT_CUSTOMREQUEST
,
'PUT'
);
curl_setopt
(
$ch
,
CURLOPT_POSTFIELDS
,
$data
);
return
self
::
processRequest
(
$ch
);
}
public
static
function
delete
(
$url
,
$httpHeaders
=
[])
{
$ch
=
self
::
init
(
$url
,
$httpHeaders
);
curl_setopt
(
$ch
,
CURLOPT_CUSTOMREQUEST
,
'DELETE'
);
return
self
::
processRequest
(
$ch
);
}
protected
static
function
processRequest
(
$ch
)
{
# Check for 429 leaky bucket error
while
(
1
)
{
$output
=
curl_exec
(
$ch
);
$response
=
new
CurlResponse
(
$output
);
$httpCode
=
curl_getinfo
(
$ch
,
CURLINFO_HTTP_CODE
);
if
(
$httpCode
!=
429
)
{
break
;
}
$limitHeader
=
explode
(
'/'
,
$response
->
getHeader
(
'X-Shopify-Shop-Api-Call-Limit'
),
2
);
if
(
isset
(
$limitHeader
[
1
])
&&
$limitHeader
[
0
]
<
$limitHeader
[
1
])
{
throw
new
Exception
(
$response
->
getBody
());
}
usleep
(
500000
);
}
if
(
curl_errno
(
$ch
))
{
throw
new
Exception
(
curl_errno
(
$ch
)
.
' : '
.
curl_error
(
$ch
));
}
// close curl resource to free up system resources
curl_close
(
$ch
);
$httpHeader
=
$response
->
getHeaders
();
return
[
$httpCode
,
$httpHeader
,
$response
->
getBody
()];
}
}
src/Tools/CurlResponse.php
deleted
100644 → 0
View file @
1c46cdf0
<?php
namespace
Meibuyu\Micro\Tools
;
class
CurlResponse
{
/** @var array */
private
$headers
=
[];
/** @var string */
private
$body
;
public
function
__construct
(
$response
)
{
$this
->
parse
(
$response
);
}
/**
* @param string $response
*/
private
function
parse
(
$response
)
{
$response
=
\explode
(
"
\r\n\r\n
"
,
$response
);
if
(
\count
(
$response
)
>
1
)
{
// We want the last two parts
$response
=
\array_slice
(
$response
,
-
2
,
2
);
list
(
$headers
,
$body
)
=
$response
;
foreach
(
\explode
(
"
\r\n
"
,
$headers
)
as
$header
)
{
$pair
=
\explode
(
': '
,
$header
,
2
);
if
(
isset
(
$pair
[
1
]))
{
$headerKey
=
strtolower
(
$pair
[
0
]);
$this
->
headers
[
$headerKey
]
=
$pair
[
1
];
}
}
}
else
{
$body
=
$response
[
0
];
}
$this
->
body
=
$body
;
}
/**
* @return array
*/
public
function
getHeaders
()
{
return
$this
->
headers
;
}
/**
* @param string $key
*
* @return string
*/
public
function
getHeader
(
$key
)
{
return
isset
(
$this
->
headers
[
$key
])
?
$this
->
headers
[
$key
]
:
null
;
}
/**
* @return string
*/
public
function
getBody
()
{
return
$this
->
body
;
}
public
function
__toString
()
{
$body
=
$this
->
getBody
();
$body
=
$body
?:
''
;
return
$body
;
}
}
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