Skip to main content

Command Palette

Search for a command to run...

ক্লাস নং-২০(পার্ট-১৮) payment gateway stripe, and their services

Updated
3 min read
ক্লাস নং-২০(পার্ট-১৮) payment gateway stripe, and their services
R

Hi there, I am rakibul islam you can call me rakib, i have completed my graduation from chongqing university of technology,chongqing china department of cse & i really love to write blog & share

আজকের ক্লাসে মূলত আমাদের payment gateway stripe নিয়ে আলোচনা হবে গতক্লাসে এটা নিয়ে কথা হয়েছে কিন্তু আমরা আমাদের invoice করে এবং payment gateway and theiir services নিয়ে প্রাথমিক আলোচনা করেছিলাম আজকে আমরা সেটা কে ভাল ভাবে জানব এবং ব্যাবহার করব।

তো প্রথমেই আমরা আমাদের project এ stripe install করে নেই।

composer require stripe/stripe-php

এরপর আমরা আমাদের show.blade.php file এ একটা ফর্ম নিয়ে সেখানে payment এর অপশন তৈরি করি।

<form method="post" action="{{route('stripe-payment')}}"> @csrf
                        <div class="flex mb-4">
                            <div class="w-full">
                                <input value="4242424242424242" name="card_no" type="number" class="lms-input" placeholder="Card number">
                            </div>
                            <div class="min-w-max ml-4">
                                <input value="12/30" name="card_expiry_date" type="text" class="lms-input" placeholder="Expiry month/year">
                            </div>
                            <div class="min-w-max ml-4">
                                <input value="232" name="card_ccv" type="text" class="lms-input" placeholder="CCV">
                            </div>
                            <div class="min-w-max ml-4">
                                <input name="amount" type="number" class="lms-input" value="{{number_format($invoice->amount()['due'], 2)}}" placeholder="Amount">
                            </div>
                            <input type="hidden" name="invoice_id" value="{{$invoice->id}}">
                        </div>
                        <button type="submit" class="lms-btn">Pay Now</button>
 </form>

এবার আমাদের একটা controller make করা লাগবে যেখানে আমাদের payment এর কাজ গুলো করব।

php artisan make:controller StripePaymentController

এবার আমাদের একটা post রাউট তৈরি করা লাগবে।

Route::post('/stripe-payment', [StripePaymentController::class, 'stripePayment'])->name('stripe-payment');

এবার আমাদের controller এর মধ্যে গিয়ে সেখানে আমাদের প্রয়োজনীয় কোড গুলো লিখি।

public function stripePayment(Request $request) {

        $validator = Validator::make($request->all(), [
            'card_no' => 'required',
            'card_expiry_date' => 'required',
            'card_ccv' => 'required',
            'amount' => 'required',
            'invoice_id' => 'required|integer',
        ]);

        // validator fails
        if($validator->fails()) {
            flash()->addWarning('Please fill all the fields');
        } else {
            $stripe = new StripeClient(env('STRIPE_SECRET'));

            // try catch stripe token
            try {
                $token = $stripe->tokens->create([
                    'card' => [
                        'number' => $request->card_no,
                        'exp_month' => explode('/', $request->card_expiry_date)[0],
                        'exp_year' => explode('/', $request->card_expiry_date)[1],
                        'cvc' => $request->card_ccv,
                    ],
                ]);
            } catch (\Exception $e) {
                flash()->addWarning('Invalid card details');
                return redirect()->back();
            }

            // dd('test');

            $charge = $stripe->charges->create([
                'amount' => intval($request->amount * 100),
                'currency' => 'usd',
                'description' => 'Payment for invoice #' . $request->invoice_id,
                'source' => $token->id,
            ]);

            // dd($charge);
            Payment::create([
                'amount' => $request->amount,
                'invoice_id' => $request->invoice_id,
                'transaction_id' => $charge->id,
            ]);

            flash()->addSuccess('Payment successful');
        }
        return redirect()->back();
    }

এবং আমাদের stripe website এ গিয়ে একটা accaount make করতে হবে।এবং developer option mood on করলে সেখানে একটা secret key পাওয়া যাবে সেটা কপি করে নিয়ে env file এর নিচে paste করতে হবে' STRIPE_SECRET=sk_test_51MQaveCXCmINpP8TXp2F6DW8N7lLqwLCxGxti7kA80QdT00zmLkc3Cf(এমন একটা কোড তবে এটা দিয়েন না কাজ করবে না ।)

এবং আমাদের invoice-edit.blade.php file এ গিয়ে আমরা নিচের কোড গুলো দিতে পারি,।

<div>
    <h2 class="font-bold text-green-700  ">Information</h2>
    <p>Invoice to: {{$invoice->user->name}}</p>

    <table class="table-auto w-full mb-4">
        <tr>
            <th class="lms-cell-border text-left">Name</th>
            <th class="lms-cell-border">Price</th>
            <th class="lms-cell-border">Quantity</th>
            <th class="lms-cell-border text-right">Total</th>
        </tr>

        @foreach($invoice->items as $item)
        <tr>
            <td class="lms-cell-border">{{$item->name}}</td>
            <td class="lms-cell-border text-center">${{number_format($item->price, 2)}}</td>
            <td class="lms-cell-border text-center">{{$item->quantity}}</td>
            <td class="lms-cell-border text-right">${{number_format($item->price * $item->quantity, 2)}}</td>
        </tr>
        @endforeach
        <tr>
            <td colspan="3" class="lms-cell-border text-right">Subtotal</td>
            <td class="lms-cell-border text-right">${{number_format($invoice->amount()['total'], 2)}}</td>
        </tr>
        <tr>
            <td colspan="3" class="lms-cell-border text-right">Paid</td>
            <td class="lms-cell-border text-right">- ${{number_format($invoice->amount()['paid'], 2)}}</td>
        </tr>
        <tr>
            <td colspan="3" class="lms-cell-border text-right">Due</td>
            <td class="lms-cell-border text-right">${{number_format($invoice->amount()['due'], 2)}}</td>
        </tr>
    </table>




    @if($enableAddItem)
    <form class="mb-4" wire:submit.prevent="saveNewItem">
        <div class="flex mb-4">
            <div class="w-full">
                @include('components.form-field', [
                    'name' => 'name',
                    'label' => 'Name',
                    'type' => 'text',
                    'placeholder' => 'Item name',
                    'required' => 'required',
                ])
            </div>

            <div class="min-w-max ml-4">
                @include('components.form-field', [
                    'name' => 'price',
                    'label' => 'Price',
                    'type' => 'number',
                    'placeholder' => 'Type price',
                    'required' => 'required',
                ])
            </div>

            <div class="min-w-max ml-4">
                @include('components.form-field', [
                    'name' => 'quantity',
                    'label' => 'Quantity',
                    'type' => 'number',
                    'placeholder' => 'Type quantity',
                    'required' => 'required',
                ])
            </div>


        </div>
        <div class="flex mb-4">
            @include('components.wire-loading-btn')
            <button class=" bg-red-500 ml-4 py-2 px-4 font-bold text-white " wire:click="addNewItem" type="button">Cancel</button>
        </div>
    </form>
    @else
        <button class="px-4 py-2 bg-green-300 mt-4 mb-4" wire:click="addNewItem" class="underline">Add New Item</button>
    @endif


    <h3 class="font-bold text-lg mb-2">Payments</h3>
    <ul class="mb-4">
        @foreach($invoice->payments as $payment)
        <li>{{date('F j, Y - g:i:a', strtotime($payment->created_at))}} - ${{number_format($payment->amount, 2)}} - transaction ID: {{$payment->transaction_id}} <button wire:click="refund({{$payment->id}})" class="bg-red-500 text-white px-4 py-1 mb-2 text-xs">Refund</button></li>
        @endforeach
    </ul>
</div>

এবার আমরা আমাদের website এ গিয়ে invoiceedit এ গিয়ে test করতে পারি।

discord link: discord.gg/9qWUUbQ3

facebook group :web.facebook.com/groups/1661735757554627

Happy Learning

Rakibul Islam

B

ভাইয়া আপনি যে discord লিংকটা শেয়ার করেছেন এই লিংকটা আর কাজ করছে না. দয়া করে যদি একটি নতুন লিংক শেয়ার করতেন তাহলে খুবই উপকৃত হইতাম... আমি অনেকদিন থেকেই আপনার discord সার্ভারে জয়েন হওয়ার চেষ্টা করছি... আমার ইমেইলে ডিসকোড সার্ভারের লিংক দিলে তা খুবই উপকৃত হয়... harmenblayer49@gmail.com

R

https://discord.gg/cVjMcNSY

More from this blog

We discuss basic routing

বেসিক রাউটিং সফটওয়্যার আর্কিটেকচারে রাউট হচ্ছে মৌলিক উপাদান(Basic Component). রাউট URL(URL = Uniform Resource Locator) থেকে অনুরোধ গ্রহণ করে এবং এপ্লিকেশনকে রিসোর্সের জন্য নির্দেশনা প্রদান করে। লারাভেলের রাউট সমূহ একই সাথে সুবিন্যস্ত করে রাখার জন্য r...

Jun 1, 20233 min read

Visual Studio Code এডিটর কি-বোর্ড শর্টকার্ট

এখন কোডিংয়ের স্পীড হবে রকেটের গতি যদি আপনি ব্লগটি পড়েন এবং শর্টকাট ব্যবহার করেন তাহলে চলুন শুরু করি। Visual Studio Code এডিটর কি-বোর্ড শর্টকার্টঃ MAC ও WINDOWS এর জন্য আলাদা কি-বোর্ড শর্টকাট নিচে দেওয়া হল- Visual Studio Code এর কমান্ড পেলেট কিভাবে ওপ...

Jun 1, 20233 min read
Visual Studio Code এডিটর কি-বোর্ড শর্টকার্ট

WordPress Support Engineer Input Field And Form

আজকে আমরা আলোচনা করব আমাদের WordPress Support Engineer Course এর ক্লাস ২ নিয়ে এবং আমাদের টপিক হলো html input fields. ইনপুট ফিল্ডে বিভিন্ন রকম টাইপ রয়েছে এর মধ্যে default html,html-5,iput type="text" ইত্যাদি। তো চলুন শুরু করি ।প্রথমেই আমরা আলোচনা করব ...

May 7, 20233 min read

Tailwind Css CLI ব্যাক্ষ্যা সহ Install প্রসেস

সবার প্রথমে আমাদের একটা Directory বানাতে হবে। আপনার Project এর নাম দিয়ে একটি Directory বানিয়ে ফেলুন। এরপর যেকোনো একটা Terminal ব্যবহার করে এই Directory তে ঢুকুন। npm install -D tailwindcss autoprefixer vite এই কমান্ড Terminal-এ দিবো। এক্সট্রা হিসেবে...

Apr 3, 20232 min read
Tailwind Css CLI ব্যাক্ষ্যা সহ Install প্রসেস
S

Shikhun Blog

96 posts