q-biz/shopify

此包最新版本(2.0.2)没有可用的许可信息。

2.0.2 2015-07-13 14:23 UTC

This package is not auto-updated.

Last update: 2024-09-22 04:20:57 UTC


README

一个易于使用的PHP包,用于通过Laravel与Shopify的API进行通信。

##安装 ####在composer.json中要求rocket-code/shopify

"rocket-code/shopify"添加到您的"require"对象中。对于空白Laravel安装,它看起来像这样

对于Laravel 5,使用"rocket-code/shopify": "~2.0"。对于Laravel 4,使用"rocket-code/shopify": "~1.0"

	"require": {
		"laravel/framework": "4.2.*",
		"rocket-code/shopify": "~1.0"
	}

####添加服务提供者 在app/config/app.php中,将RocketCode\Shopify\ShopifyServiceProvider添加到providers数组的末尾。

##设置配置 首先,使用App::make()获取API类的实例。

$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' => '']);

这就完成了!您现在可以开始进行API调用了。

##查找安装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_DOMAINAPI_KEYAPI_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调用设置所需值,并覆盖其他默认值。

  • 方法:用于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:如果您希望所有错误和cURL信息与API数据一起返回(适用于调试),请将此设置为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将包含一个包含productsstdClass对象或一个异常错误消息。

####从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

}