First, you have to install a fresh version of Laravel 10. You can go to the official documentation of Laravel:
You will see a section there: "Creating A Laravel Project". Here you will get your codes to install Laravel 10. I am going to write the commands you will need to install laravel. First, open your terminal where you want to install laravel on your computer. Then use these commands:
composer create-project laravel/laravel example-app
cd example-app
php artisan serve
You can run your application now using this url into your browser: http://127.0.0.1:8000
Now go to this location: resources > views > welcome.blade.php.
Change the codes of this page like this:
Change the codes of this page like this:
welcome.blade.php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Laravel - Mollie Integration</title>
</head>
<body>
<h2>Product: Laptop</h2>
<h3>Price: $10</h3>
<form action="{{ route('mollie') }}" method="post">
@csrf
<input type="hidden" name="product_name" value="Laptop">
<input type="hidden" name="quantity" value="1">
<input type="hidden" name="price" value="10.00">
<button type="submit">Pay with Mollie</button>
</form>
</body>
</html>
Create a migration file using this command:
php artisan make:migration create_payments_table
A migration file will be created in this location: "database > migrations > 2023_11_29_065611_create_payments_table.php"
Now write the following code here:
Now write the following code here:
2023_11_29_065611_create_payments_table.php
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('payments', function (Blueprint $table) {
$table->id();
$table->string('payment_id');
$table->string('product_name');
$table->string('quantity');
$table->string('amount');
$table->string('currency');
$table->string('payment_status');
$table->string('payment_method');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('payments');
}
};
Write this command to create the "payments" table.
php artisan migrate
You have to create a model now. The model name will be the singular form of the table name. So it will be "Payment". Run this command in the terminal to create this model:
php artisan make:model Payment
I am going to create a controller now. So run this command in terminal:
php artisan make:controller MollieController
Modify the "route > web.php" file as this:
web.php
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\MollieController;
Route::get('/', function () {
return view('welcome');
});
Route::post('mollie', [MollieController::class, 'mollie'])->name('mollie');
Route::get('success', [MollieController::class, 'success'])->name('success');
Route::get('cancel', [MollieController::class, 'cancel'])->name('cancel');
Install the laravel mollie package from here:
According to their instruction, now add this line in the .env file:
MOLLIE_KEY=test_VcfHCEkSxbstsDut6qJqTmsyAQr45T
MollieController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Payment;
use Mollie\Laravel\Facades\Mollie;
class MollieController extends Controller
{
public function mollie(Request $request)
{
$payment = Mollie::api()->payments->create([
"amount" => [
"currency" => "USD",
"value" => $request->price // You must send the correct number of decimals, thus we enforce the use of strings
],
"description" => $request->product_name,
"redirectUrl" => route('success'),
//"webhookUrl" => route('webhooks.mollie'),
"metadata" => [
"order_id" => time(),
],
]);
//dd($payment);
session()->put('paymentId', $payment->id);
session()->put('quantity', $request->quantity);
// redirect customer to Mollie checkout page
return redirect($payment->getCheckoutUrl(), 303);
}
public function success(Request $request)
{
$paymentId = session()->get('paymentId');
//dd($paymentId);
$payment = Mollie::api()->payments->get($paymentId);
//dd($payment);
if($payment->isPaid())
{
$obj = new Payment();
$obj->payment_id = $paymentId;
$obj->product_name = $payment->description;
$obj->quantity = session()->get('quantity');
$obj->amount = $payment->amount->value;
$obj->currency = $payment->amount->currency;
$obj->payment_status = "Completed";
$obj->payment_method = "Mollie";
$obj->save();
session()->forget('paymentId');
session()->forget('quantity');
echo 'Payment is successfull.';
} else {
return redirect()->route('cancel');
}
}
public function cancel()
{
echo "Payment is cancelled.";
}
}
See Full Tutorial on YouTube
If you want to see the full functionality in live, you can see my video on youtube.