Регистрация Shopify Webhooks - Laravel - PullRequest
0 голосов
/ 17 октября 2018

Я создаю приложение shopify, и в настоящее время я хочу зарегистрировать в своем приложении веб-хуки, чтобы при создании клиента было отправлено уведомление / смс администратору.Согласно моим исследованиям, его можно зарегистрировать через настройки магазина, но в этом случае я хочу зарегистрировать его через приложение.Но не хватает ресурсов, чтобы это сделать .. Ниже приведено то, что у меня есть, но когда я создаю клиента, мои смс не отправляются администратору.

Что я могу упустить сейчас?

VerifyWebhook

public function handle($request, Closure $next)
    {
    $hmac = request()->header('x-shopify-hmac-sha256') ?: '';
    $shop = request()->header('x-shopify-shop-domain');
    $data = request()->getContent();

    // From https://help.shopify.com/api/getting-started/webhooks#verify-webhook
    $hmacLocal = base64_encode(hash_hmac('sha256', $data, env('SHOPIFY_SECRET'), true));
    if (!hash_equals($hmac, $hmacLocal) || empty($shop)) {
        // Issue with HMAC or missing shop header
        abort(401, 'Invalid webhook signature');
    }


    return $next($request);   
    }

Маршрут

 Route::post('webhook/shopify/customer-created', function(\Illuminate\Http\Request $request) {
    // Handle customer created and sms or notification
})->middleware('webhook');

1 Ответ

0 голосов
/ 18 октября 2018

Похоже, вы пытаетесь проверить веб-крючок вместо его создания.Пожалуйста, пройдите ниже процесс

Создайте веб-крючок, используя простой запрос:

POST /admin/webhooks.json
{
  "webhook": {
    "topic": "customers/create",
    "address": "https://whatever.hostname.com/",
    "format": "json"
  }
}

конечно, вы должны будете передать токен аутентификации shopify в заголовках.

Если вы хотите использоватьпакет для упрощения процесса, который вы можете использовать: https://github.com/oseintow/laravel-shopify

ваш rout.php / web.php

Route::get('/register-webhook', 'WebhooksController@registerCustomerWebhook')->name('customer');

Route::get('/webhooks/customer-created', 'WebhooksController@customerCreated')->name('customerCreated');

, а затемимпортировать и использовать его ->

use Oseintow\Shopify\Facades\Shopify;
.
.
// create a webhook
public function registerCustomerWebhook(...){
Shopify::setShopUrl($shopUrl)->setAccessToken($accessToken)->post("admin/webhooks.json", ['webhook' => 
    ['topic' => 'customers/create',
    'address' => 'https://whatever.hostname.com/path',
    'format' => 'json'
    ]
]);

.}

Проверка webhook:

public function customerCreated(...) {
    if (Shopify::verifyWebHook($data, $hmacHeader)) {
        // do your stuffs here in background
        return response('Hello World', 200)
        ->header('Content-Type', 'text/plain');
    } else {
    return response('UnAuthorized', 401)
        ->header('Content-Type', 'text/plain');
    }
.
.
}

Примечание:

  1. На вашей конечной точке должны быть установлены соответствующие сертификаты ssl
  2. Вам необходимо ответить наwebhook как можно быстрее.Лучше выполнять свои задачи в фоновом режиме.

Дайте мне знать, если есть какая-то путаница.

...