reckless/laravel-shopify

Laravel Shopify 包

2.0.3 2021-01-28 11:59 UTC

This package is auto-updated.

Last update: 2024-09-28 19:45:40 UTC


README

Laravel Shopify 是一个简单的包,可以帮助构建健壮的 Shopify 集成。

安装

将包添加到 composer.json 中

composer require reckless/laravel-shopify

Laravel 5.5+

包自动发现将为您设置别名和外观

Laravel 5.4 <

将服务提供者添加到 config/app.php 中的 providers 数组中。

<?php

'providers' => [
    ...
    Reckless\Shopify\ShopifyServiceProvider::class,
],

设置外观的别名

<?php

'aliases' => [
    ...
    'Shopify' => Reckless\Shopify\Facades\Shopify::class,
],

配置

Laravel Shopify 需要连接配置。您需要发布供应商资源

php artisan vendor:publish

这将在配置目录中创建一个 shopify.php 文件。您需要设置您的 API_KEYSECRET

用法

要安装/集成商店,您需要通过 Shopify API 初始化 OAuth 身份验证,这需要三个组件。

它们是

1. Shop URL (eg. example.myshopify.com)
2. Scope (eg. write_products, read_orders, etc)
3. Redirect URL (eg. http://mydomain.com/process_oauth_result)

此过程将使我们能够获得商店的访问令牌

use Reckless\Shopify\Facades\Shopify;

Route::get("install_shop",function()
{
    $shopUrl = "example.myshopify.com";
    $scope = ["write_products","read_orders"];
    $redirectUrl = "http://mydomain.com/process_oauth_result";

    $shopify = Shopify::setShopUrl($shopUrl);
    return redirect()->to($shopify->getAuthorizeUrl($scope,$redirectUrl));
});

让我们获取访问令牌

Route::get("process_oauth_result",function(\Illuminate\Http\Request $request)
{
    $shopUrl = "example.myshopify.com";
    $accessToken = Shopify::setShopUrl($shopUrl)->getAccessToken($request->code);

    dd($accessToken);

    // redirect to success page or billing etc.
});

用于验证请求(hmac)

public function verifyRequest(Request $request)
{
    $queryString = $request->getQueryString();

    if(Shopify::verifyRequest($queryString)){
        logger("verification passed");
    }else{
        logger("verification failed");
    }
}

用于验证 webhook(hmac)

public function verifyWebhook(Request $request)
{
    $data = $request->getContent();
    $hmacHeader = $request->server('HTTP_X_SHOPIFY_HMAC_SHA256');

    if (Shopify::verifyWebHook($data, $hmacHeader)) {
        logger("verification passed");
    } else {
        logger("verification failed");
    }
}

要访问 API 资源,请使用

Shopify::get("resource uri", ["query string params"]);
Shopify::post("resource uri", ["post body"]);
Shopify::put("resource uri", ["put body"]);
Shopify::delete("resource uri");

让我们使用我们的访问令牌从 Shopify 获取产品。

注意:您可以使用此方法访问 Shopify 上的任何资源(无论是产品、商店、订单等)

$shopUrl = "example.myshopify.com";
$accessToken = "xxxxxxxxxxxxxxxxxxxxx";
$products = Shopify::setShopUrl($shopUrl)->setAccessToken($accessToken)->get("admin/products.json");

传递查询参数

// returns Collection
$shopify = Shopify::setShopUrl($shopUrl)->setAccessToken($accessToken);
$products = $shopify->get("admin/products.json", ["limit"=>20, "page" => 1]);

控制器示例

如果您像我一样更喜欢使用依赖注入而不是外观,则可以注入该类

use Illuminate\Http\Request;
use Reckless\Shopify\Shopify;

class Foo
{
    protected $shopify;

    public function __construct(Shopify $shopify)
    {
        $this->shopify = $shopify;
    }

    /*
    * returns Collection
    */
    public function getProducts(Request $request)
    {
        $products = $this->shopify->setShopUrl($shopUrl)
            ->setAccessToken($accessToken)
            ->get('admin/products.json');

        $products->each(function($product){
             \Log::info($product->title);
        });
    }
}

杂项

获取响应头

Shopify::getHeaders();

获取特定头

Shopify::getHeader("Content-Type");

检查头是否存在

if(Shopify::hasHeader("Content-Type")){
    echo "Yes header exist";
}

获取响应状态码或状态消息

Shopify::getStatusCode(); // 200
Shopify::getReasonPhrase(); // ok

致谢

https://github.com/oseintow/laravel-shopify (https://github.com/oseintow)