Я создал свои веб-хуки для своих приложений, которые работают нормально. Но я заметил, что прежде чем мои веб-хуки будут работать, я должен зарегистрировать их, запустив маршрут в браузере, прежде чем они будут зарегистрированы.
Так что, если мой маршрут https://example.domain/order-create-webhook
, мне нужно запустить этот маршрут, чтобы вызвать функцию registerOrderCreateWebhook()
, чтобы зарегистрировать мой веб-хук в приложении раньше, я могу начать получать ответ от Shopify.
Теперь мой вопрос, есть ли способ, по которому я могу автоматически запустить этот маршрут, когда пользователь устанавливает приложение, чтобы мне не пришлось вручную регистрировать свои веб-хуки из браузера
Примечание: я добавил свой auth (), который регистрирует / устанавливает нового пользователя для приложения
Контроллер
public function auth(Request $request)
{
$shared_secret = env('SHARED_SECRET');
$params = $_GET;
$shop_name = $request->shop;
$shopUrl = $request->domain;
$hmac = $request->hmac;
$code = $request->code;
$params = array_diff_key($params, array('hmac' => ''));
ksort($params);
$computed_hmac = hash_hmac('sha256', http_build_query($params), $shared_secret);
$api_key = "*****";
$shared_secret = "****";
$query = array(
"client_id" => $api_key, // Your API key
"client_secret" => $shared_secret, // Your app credentials (secret key)
"code" => $request->code // Grab the access key from the URL
);
$shopUrl = $shop_name;
$access_token_url = "https://" . $shopUrl . "/admin/oauth/access_token";
// Store the access token
$result = json_decode($result, true);
$access_token = $result['access_token'];
// dd($access_token);
// Valicate Shopify's request
if (hash_equals($hmac, $computed_hmac)) {
if (! User::where('site', '=', $shop_name)->exists()) {
// Create a new user account
$new_user = new User;
$new_user->site = $shop_name;
$new_user->access_token = $access_token;
$new_user->save();
}
// Get current user, login and redirect to dashboard
$user = User::where('site', '=', $shop_name)->firstOrFail();
Auth::login($user);
return redirect('/home');
}
else
{
abort(401, 'Unauthorized action.');
}
}
public function registerOrderCreateWebhook()
{
$shop = Auth::user()->site;
$token = Auth::user()->access_token;
$shopify = Shopify::setShopUrl($shop)->setAccessToken($token);
Shopify::setShopUrl($shop)->setAccessToken($token)->post("admin/webhooks.json", ['webhook' =>
['topic' => 'orders/updated',
'address' => 'https://example.domain.com/order-update-webhook',
'format' => 'json'
]
]);
}
Маршрут
Route::get('order-create-webhook', Controller@registerOrderCreateWebhook);