Bigcommerce is an e-commerce solution in which companies can store and sell items digitally.
The platform also allows you to create your own custom apps and build through laravel framework in order to expand functionality.
Here are the steps to create your custom app and connect it to your laravel project:
Step 1. Create an accout on BigCommerce platform and login
Step 2. Create an app
Go to this url in order to create the app https://devtools.bigcommerce.com/my/apps
Once the app is created enter your callback url for installing and loading the app in the first step, then click the Update & Close button.
This url is the url that exposes your local Laravel project to Bigcommerce; you can can use ngrok or something siimilar to acheive this.
If you want to undersatnd how to use ngrok on your local Laravel project go here https://wecode101.com/how-to-use-ngrok-on-a-laravel-project
Also, click View Client ID
Copy Client ID and Client Secret which will be placed in your Laravel project. This will be shown in the next step.
Step 3. Creat api acount
Now you need to create a api account for the callback urls
Navigate to page
Enter account details
Once you created the api account you should be provided with a CLIENT_ID, SECRET, ACCESS_TOKEN and HASH which will be placed in your Laravel project. This will be shown in the next step.
Step 4. Add all credentials to Laravel project
All the credentials provided to you from the previous step add to .env file.
BC_APP_CLIENT_ID=xxxxxxxxxxxxxxxx
BC_APP_CLIENT_SECRET=xxxxxxxxxxxxxxxxx
BC_STORE_CLIENT_ID=xxxxxxxxxxxxx
BC_STORE_SECRET=xxxxxxxxxxxxxxx
BC_STORE_ACCESS_TOKEN=xxxxxxxxxxxxx
BC_STORE_HASH=xxxxxxxxxxx
Also, you can add the details above to config/app.php
Step 5 Run command to create contoller
php artisan make:controller BcAppController
Step 6 Add functionality to install and load app to BigCommerce
Edit file app/Http/Controllers/BcAppController.php, add code below:
public function install(Request $request)
{
try {
$client = new Client();
$result = $client->request('POST', 'https://login.bigcommerce.com/oauth2/token', [
'json' => [
'client_id' => env('BC_APP_CLIENT_ID'),
'client_secret' => env('BC_APP_CLIENT_SECRET'),
'redirect_uri' => env('APP_URL') . '/auth/install',
'grant_type' => 'authorization_code',
]
]);
$statusCode = $result->getStatusCode();
if ($statusCode == 200) {
// If app installed via external link, redirect back to the
// BC installation success page
if ($request->has('external_install')) {
return redirect('https://login.bigcommerce.com/app/' . env('BC_APP_CLIENT_ID') . '/install/succeeded');
}
}
return redirect('/');
} catch (RequestException $e) {
$statusCode = $e->getResponse()->getStatusCode();
$errorMessage = "An error occurred.";
if ($e->hasResponse()) {
if ($statusCode != 500) {
$errorMessage = Psr7\Message::toString($e->getResponse());
}
}
// If the merchant installed the app via an external link, redirect back to the
// BC installation failure page for this app
if ($request->has('external_install')) {
return redirect('https://login.bigcommerce.com/app/' . env('BC_APP_CLIENT_ID') . '/install/failed');
} else {
dd($errorMessage);
}
} catch (GuzzleException $e) {
dd(Psr7\Message::toString($e->getMessage()));
}
}
public function load(Request $request)
{
$signedPayload = $request->input('signed_payload');
if (!empty($signedPayload)) {
$verifiedSignedRequestData = $this->verifySignedRequest($signedPayload, $request);
if ($verifiedSignedRequestData !== null) {
$request->session()->put('user_id', $verifiedSignedRequestData['user']['id']);
$request->session()->put('user_email', $verifiedSignedRequestData['user']['email']);
$request->session()->put('owner_id', $verifiedSignedRequestData['owner']['id']);
$request->session()->put('owner_email', $verifiedSignedRequestData['owner']['email']);
} else {
Session::flash('message', "The signed request from BigCommerce could not be validated.");
return Redirect::back();
}
} else {
Session::flash('message', "The signed request from BigCommerce was empty.");
return Redirect::back();
}
return redirect('/');
}
Step 7 Create routes for the endpoints
Route::group(['prefix' => 'auth'], function () {
Route::get('install', [BcAppController::class, 'install']);
Route::get('load', [BcAppController::class, 'load']);
});
Step 8. Now install app to Bigcommerce
Now, login to Bigcommerce and navigate to My Apps and install the app you created.
Now you should be able to start building upon your app. Hopefully this was helpful to get you going further.