Commit 63c705d6 authored by 王源's avatar 王源
Browse files

Merge branch 'hotfix' into test

parents b57bc7de b4946025
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -18,6 +18,9 @@ class ExceptionLogProducer extends ProducerMessage

    public function __construct($data)
    {
        if (strpos($data['message'], 'Cannot select any node from load balancer') !== false) {
            return;
        }
        try {
            $data['operator'] = Auth::user()['name'];
        } catch (HttpResponseException $e) {
+24 −48
Original line number Diff line number Diff line
@@ -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(CurlHttpRequestJson::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-Version'][0] < '2019-07') {
        if (!empty($header['x-shopify-api-version'][0]) && $header['x-shopify-api-version'][0] < '2019-07') {
            return null;
        }
        if (!empty($header['Link'][0])) {
            $headerLinks = $header['Link'][0];
        if (!empty($header['link'][0])) {
            $headerLinks = $header['link'][0];
            if (stristr($headerLinks, '; rel="' . $type . '"') > -1) {
                $headerLinks = explode(',', $headerLinks);
                foreach ($headerLinks as $headerLink) {
+17 −61
Original line number Diff line number Diff line
@@ -6,20 +6,19 @@
 * Time: 9:06
 */

namespace Meibuyu\Micro\Tools;
namespace Meibuyu\Micro\Shopify\tools;

//use GuzzleHttp\Client;
//use Psr\Http\Message\ResponseInterface;
use Exception;

/**
 * json格式请求(非协程)
 * Curl的json格式请求
 * Class HttpRequestJson
 * @package Meibuyu\Micro\Tools
 */
class HttpRequestJson
class CurlHttpRequestJson
{

    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);
    }
+43 −7
Original line number Diff line number Diff line
<?php

namespace Meibuyu\Micro\Tools;
namespace Meibuyu\Micro\Shopify\tools;

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));
        }
+7 −7
Original line number Diff line number Diff line
<?php

namespace Meibuyu\Micro\Tools;
namespace Meibuyu\Micro\Shopify\tools;

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 {
Loading