tothjmt / shopify
Requires
- laravel/framework: >=4.0
This package is not auto-updated.
Last update: 2024-10-02 09:53:45 UTC
README
一个易于使用的PHP软件包,用于在Laravel中与Shopify的API进行通信。
##安装 ####在 composer.json
中要求 tothjmt/shopify
将 "tothjmt/shopify"
添加到您的 "require" 对象中。在没有Laravel安装的情况下,它看起来像这样
"require": {
"laravel/framework": "4.2.*",
"tothjmt/shopify": "~1.0"
}
####在 app/config/app.php
中添加 Service Provider 将 tothjmt\Shopify\ShopifyServiceProvider
添加到 providers
数组的末尾。
##设置 To begin, use App::make()
to grab an instance of the API
class.
$sh = App::make('ShopifyAPI');
####加载 API 凭证 只需传递一个包含以下键(以及填充的值)的数组即可准备。不需要一次传递所有值;您可以多次调用 setup()
方法;它只会接受以下 4 个键,并在已设置值的情况下覆盖值。
$sh->setup(['API_KEY' => '', 'API_SECRET' => '', 'SHOP_DOMAIN' => '', 'ACCESS_TOKEN' => '']);
#####快捷方式:将设置数组作为 App::make()
的第二个参数传递
$sh = App::make('ShopifyAPI', ['API_KEY' => '', 'API_SECRET' => '', 'SHOP_DOMAIN' => '', 'ACCESS_TOKEN' => '']);
That's it! You're ready to make some API calls.
##找到安装 URL 在至少设置了 SHOP_DOMAIN
& API_KEY
之后,使用一个包含权限(应用程序的作用域)的数组调用 installURL()
$sh->installURL(['permissions' => array('write_orders', 'write_products')]);
您还可以根据Shopify API文档中的说明通过 redirect_uri
参数传递一个重定向URL
$sh->installURL(['permissions' => array('write_orders', 'write_products'), 'redirect' => 'http://myapp.com/success']);
##身份验证/获取 OAuth 访问令牌 为了执行经过身份验证的请求,访问令牌必须作为每个请求的标头传递。此软件包将自动为您完成此操作,但您必须首先在每个商店(用户安装它时)对应用程序进行身份验证,并保存访问令牌。
一旦用户访问安装URL并点击安装按钮,他们将被重定向回您的应用程序,带有查询字符串中的数据。
在至少设置了 SHOP_DOMAIN
、API_KEY
& API_SECRET
之后,使用在URL中返回的代码调用 getAccessToken()
。Laravel使这变得容易
$code = Input::get('code');
$sh = App::make('ShopifyAPI', ['API_KEY' => '', 'API_SECRET' => '', 'SHOP_DOMAIN' => '']);
try
{
$accessToken = $sh->getAccessToken($code);
}
catch (Exception $e)
{
echo '<pre>Error: ' . $e->getMessage() . '</pre>';
}
// Save $accessToken
####验证 OAuth 数据 Shopify返回一个散列值以验证数据。为了验证(建议在调用 getAccessToken()
之前进行验证),请使用 verifyRequest()
。
try
{
$verify = $sh->verifyRequest(Input::all());
if ($verify)
{
$code = Input::get('code');
$accessToken = $sh->getAccessToken($code);
}
else
{
// Issue with data
}
}
catch (Exception $e)
{
echo '<pre>Error: ' . $e->getMessage() . '</pre>';
}
verifyRequest()
返回 TRUE
时数据有效,否则返回 FALSE
。它有两种情况会抛出异常:如果Shopify生成的服务器时间与您的服务器时间相差超过一小时,或者如果传递的参数不是数组或键/值URL编码字符串。
如果您想跳过时间检查(不建议这样做,除非您无法纠正服务器的时钟),可以将 TRUE
作为 verifyRequest()
的第二个参数传递,并且将忽略时间戳
$verify = $sh->verifyRequest(Input::all(), TRUE);
私有应用程序
API包装器不区分私有和公共应用程序。要使用私有应用程序,按照正常方式设置一切,用私有应用程序的密码替换OAuth访问令牌。
##调用 API 一旦设置完毕,只需将所需数据传递给 call()
方法。
$result = $sh->call($args);
####call()
参数 下面的参数允许您为API调用设置必需的值以及覆盖其他默认值。
METHOD
:用于您的API调用的HTTP方法。不同的端点需要不同的方法。- 默认:
GET
- 默认:
URL
:调用API端点的URL。- 默认值:
/
(不是实际端点)
- 默认值:
HEADERS
:要发送的额外头信息数组- 默认值:空
array()
。自动发送的头信息包括- Accept
- Content-Type
- charset
- X-Shopify-Access-Token
- 默认值:空
CHARSET
:如有必要,更改字符集- 默认值:
UTF-8
- 默认值:
DATA
:调用时发送的数据数组。例如,$args['DATA'] = array('product' => $product);
对于一个创建产品的/admin/products.json
产品创建POST
。- 默认值:空
array()
- 默认值:空
RETURNARRAY
:将此设置为TRUE
以返回array
格式的数据。FALSE
将返回一个stdClass
对象。- 默认值:
FALSE
- 默认值:
ALLDATA
:如果您希望与API数据一起返回所有错误和cURL信息(适用于调试),请将此设置为TRUE
。数据将在$result->_ERROR
和$result->_INFO
或$result['_ERROR']
和$result['_INFO']
中可用,具体取决于您是将其作为对象还是数组返回。建议在生产环境中设置为FALSE
。- 默认值:
FALSE
- 默认值:
FAILONERROR
:传递给cURL的CURLOPT_FAILONERROR设置的值。TRUE
将导致API包装器在HTTP代码>=400
时抛出异常。FALSE
与ALLDATA
设置为TRUE
结合将提供更多调试信息。- 默认值:
TRUE
- 默认值:
##一些示例假设$sh
已经如上所述设置。
####列出产品
try
{
$call = $sh->call(['URL' => 'products.json', 'METHOD' => 'GET', 'DATA' => ['limit' => 5, 'published_status' => 'any']]);
}
catch (Exception $e)
{
$call = $e->getMessage();
}
echo '<pre>';
var_dump($call);
echo '</pre>';
$call
将包含一个具有products
的stdClass
对象或一个异常错误消息。
####从Laravel视图中创建片段
$testData = ['name' => 'Foo', 'location' => 'Bar'];
$view = (string) View::make('snippet', $testData);
$themeID = 12345678;
try
{
$call = $sh->call(['URL' => '/admin/themes/' . $themeID . '/assets.json', 'METHOD' => 'PUT', 'DATA' => ['asset' => ['key' => 'snippets/test.liquid', 'value' => $view] ] ]);
}
catch (Exception $e)
{
$call = $e->getMessage();
}
echo '<pre>';
var_dump($call);
echo '</pre>';
####在多个商店上执行操作setup()
方法使更改当前商店变得简单。
$apiKey = '123';
$apiSecret = '456';
$sh = App::make('ShopifyAPI', ['API_KEY' => $apiKey, 'API_SECRET' => $apiSecret]);
$shops = array(
'my-shop.myshopify.com' => 'abc',
'your-shop.myshopify.com' => 'def',
'another.myshopify.com' => 'ghi'
);
foreach($shops as $domain => $access)
{
$sh->setup(['SHOP_DOMAIN' => $domain, 'ACCESS_TOKEN'' => $access]);
// $sh->call(), etc
}