digvijay-singh-chauhan / mspartnercenter
连接到 Microsoft Partner Center 的 API 包装器。
Requires
- laravel/framework: ~5.0
This package is not auto-updated.
Last update: 2024-09-28 20:56:03 UTC
README
一个易于使用的 PHP 软件包,用于通过 Laravel 与 Microsoft 的 API 进行通信。
## 安装 #### 在 composer.json 中需要 tech-sprinters/partnercenter
将 "tech-sprinters/partnercenter" 添加到您的 "require" 对象中。在空的 Laravel 安装中,它将看起来像这样
对于 Laravel 5,使用 "tech-sprinters/partnercenter": "~2.0"。
#### 添加服务提供者在 app/config/app.php 中,将 PartnerCenter\Microsoft\MicrosoftServiceProvider 添加到 providers 数组的末尾。
## 设置 Up 首先,使用 App::make() 获取 API 类的实例。
$ms = App::make('Microsoft');
#### 加载 API 凭据只需传递一个包含以下键(和填充的值)的数组来准备。不需要一次性传递所有值;您可以多次调用 setup() 方法;它只接受以下 4 个键,如果已设置,则覆盖值。
$ms->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_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
}