Categories Games

Panduan Utama – Panel Admin Cepat

Melihat: artikel ini ditulis pada tahun 2017, jadi Stripe API kemungkinan telah berubah sejak saat itu, jadi gunakan dengan hati-hati dan periksa dokumentasi Stripe versi terbaru.

Stripe adalah salah satu pedagang pembayaran paling populer untuk web, namun informasi tentang integrasi Laravel cukup terfragmentasi, jadi saya memutuskan untuk menulis tutorial yang sangat panjang tentang topik ini.

Kami akan membahas:

  • Logika umum cara kerja Stripe
  • Integrasi pembayaran satu kali yang sederhana
  • Pengujian dan pengaturan lingkungan produksi
  • Menyimpan data transaksi untuk referensi di masa mendatang
  • Pembayaran berulang dengan Laravel Cashier
  • Mendapatkan data faktur dan unduhan PDF

Apa itu Stripe dan cara kerjanya

Stripe adalah sistem untuk menerima pembayaran melalui kartu kredit. Daripada Anda menangani semua kepatuhan keamanan dan transaksi perbankan, Stripe melakukannya untuk Anda, sambil mengambil persentase kecil untuk itu.

Perhatikan bahwa Stripe hanya tersedia di beberapa negara, pada saat penulisan ini ada 25 negara:

Implementasi paling dasar disebut Pembayaran Garis.
Secara teknis, ini berfungsi seperti ini (kami akan membahas setiap langkah secara lebih rinci nanti):

Langkah 1.JavaScript
Anda menambahkan kode Javascript Stripe di halaman Anda.


Langkah 2. Tombol Bayar: Masukkan Kartu Kredit
Pengguna memasukkan detail Kartu Kredit di halaman Anda melalui modal.


Langkah 3. Periksa Kartu Kredit
Panggilan AJAX dilakukan ke server Stripe untuk memeriksa kartu kredit. Jika kartu diterima, Stripe mengembalikan token unik yang mewakili kartu tersebut untuk semua referensi di masa mendatang dari aplikasi Anda Anda sebenarnya tidak pernah menyimpan detail kartu di database Anda (yang sangat penting dari sudut pandang hukum).


Langkah 4. Mengisi Kartu
Kemudian Anda dapat menghubungi server Stripe lagi mengenakan biaya kartu, referensi dengan token dari Langkah 3 – satu kali atau untuk pembayaran berulang.


Ada lebih banyak peristiwa, seperti kesalahan pemrosesan, penyimpanan detail pelanggan di database Stripe, pemrosesan pengembalian dana, dan banyak lagi, namun ini adalah dasar-dasar yang perlu Anda ketahui untuk saat ini.

Sekarang, mari kita bahas langkah-langkah tersebut secara lebih rinci, dengan contoh aplikasi.


Demo Pembayaran Laravel Stripe

Langkah 1. Tombol Garis “Bayar dengan Kartu”

Oke, mari kita mulai dengan contoh aplikasi Laravel:


composer create-project laravel/laravel --prefer-dist .

Setelah semua instalasi dan konfigurasi domain (saya sudah mengkonfigurasi stripe.dev via Homestead), kita akan melihat beranda seperti ini:

Langkah selanjutnya – kita ganti homepage kita yang letaknya di sumber daya/tampilan/selamat datang.blade.phpdengan kode Stripe dari dokumentasi resminya.

Ini yang baru dari kami selamat datang.blade.php:


<!doctype html>
<html lang="{{ app()->getLocale() }}">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">

        <title>Laravel</title>
    </head>
    <body>
        <form action="/your-server-side-code" method="POST">
            <script
                    src=" class="stripe-button"
                    data-key="pk_test_pIaGoPD69OsOWmh1FIE8Hl4J"
                    data-amount="1999"
                    data-name="Stripe Demo"
                    data-description="Online course about integrating Stripe"
                    data-image="
                    data-locale="auto"
                    data-currency="usd">
            </script>
        </form>
    </body>
</html>

Dan kemudian kita memiliki tombol ini, dengan modal muncul setelah klik:

Seperti yang mungkin Anda ketahui, saya telah mengubah beberapa variabel – jadi inilah skema dengan ketergantungan antara variabel Stripe dan jendela modal:


Langkah 2. Variabel lingkungan

Ada satu bidang penting yang perlu kita diskusikan secara terpisah – yang disebut kunci data. Artinya – bagaimana kami mengidentifikasi bahwa ini adalah akun Stripe kami dan bukan milik orang lain.


<script
        src=" class="stripe-button"
        data-key="pk_test_xxxxxxxxxxxxxxxxxx"
        data-amount="1999"
...

Untuk mengautentikasi, Stripe memberi Anda dua pasang kredensial, yang disebut Dapat diterbitkan Dan Rahasia key – baik untuk versi pengujian (dimulai dengan xx_test_xxxxx) dan untuk versi live (dimulai dengan xx_live_xxxxx).

Anda dapat menemukannya di bawah API bagian di dasbor Anda, lihat di bawah.

Jadi kita perlu memasukkan satu pasangan ke dalam kode kita, tergantung pada apakah Anda sedang menguji pembayaran, atau ingin menerima uang nyata dari kartu kredit nyata di lingkungan langsung.

Dalam contoh default Stripe, Anda melihat bahwa kunci yang Dapat Diterbitkan terdaftar sebagai variabel JavaScript, tetapi saya masih lebih suka menyembunyikannya dari publik dan memasukkannya ke dalam .env file proyek Laravel.

Manfaat lain dari ini adalah kita bisa menggunakannya .env file untuk lingkungan lokal/pementasan kami, untuk pengujian, dan terpisah .env di server produksi dengan kredensial langsung.

Jadi mari kita tambahkan kedua variabel di dalam variabel kita .envseperti ini:


STRIPE_PUB_KEY=pk_test_pIaGoPD69OsOWmh1xxxxxxxx
STRIPE_SECRET_KEY=sk_test_N9voBSvggOlG0xbboxxxxxxxx

Melihat: Saya telah menyembunyikan beberapa karakter di bawah xxxxxxx, kredensial Anda harus berbeda.

Dan kemudian kita mengubah milik kita selamat datang.blade.php kode untuk ini:


<script
        src=" class="stripe-button"
        data-key="{{ env('STRIPE_PUB_KEY') }}"
        data-amount="1999"
        data-name="Stripe Demo"

Dalam beberapa menit, saya akan menjelaskan di mana Rahasia kuncinya benar-benar digunakan, tetaplah bersamaku.


Langkah 3. Stripe Token dan Kartu Cek

Oke, sekarang formulirnya sudah muncul, tapi apa yang terjadi jika kita benar-benar mengisi rincian kartu kredit dan mengklik Membayar?

Sebenarnya ada dua hal yang terjadi:

  • Stripe JavaScript memanggil Stripe API dengan detail kartu kredit dan mendapatkan token kartu, atau terjadi kesalahan lainnya
  • Jika token berhasil diterima, maka kami membentuk dikirimkan, dan kemudian logika Laravel kami menangani pengisian daya (kami akan menunjukkannya di langkah berikutnya)

Misalnya, jika kita memasukkan data dummy apa pun, kita mendapatkan kesalahan dari jendela modal dan membatasi bidang yang salah:

Hal terbaiknya di sini adalah kita tidak perlu menangani setiap kemungkinan kesalahan pada kartu – Stripe langsung menampilkan teks kesalahan sebenarnya di dalam jendela modal tersebut.

Selain itu, untuk pengujian mereka memberikan daftar kartu kredit dengan berbagai kesalahan yang disebabkan:

Misalnya kita masuk 4000 0000 0000 0002lalu kita melihat ini:

Sekarang, cukup tentang kesalahan: bagaimana kita mengetahui rincian “benar” apa yang harus dimasukkan untuk pengujian, bagaimana kita “memalsukan” kartu kredit?

Stripe memberi kami daftar nomor kartu kredit untuk pengujian, yang paling populer adalah 4242 4242 4242 4242 dan kemudian Anda memasukkan tanggal yang akan datang, dan kode CVC apa pun – dan Anda akan mendapatkan tanda sukses:

Kemudian Stripe secara otomatis mengirimkan formulir berdasarkan kode JavaScript:


<form action="/your-server-side-code" method="POST">
    <script
            src=" class="stripe-button"
    ...
    </script>
</form>

Dan di sinilah kita mempunyai masalah – masalah kita /kode sisi server Anda belum ada!

Mari buat rute dan pengontrol untuk checkout sebenarnya.

rute/web.php:


Route::post('/charge', 'CheckoutController@charge');

Kemudian kita ubah form POST rute dan tambahkan token Laravel:


<form action="/charge" method="POST">
    {{ csrf_field() }}

Lalu kita jalankan:


php artisan make:controller CheckoutController

Dan isi kodenya, untuk saat ini – mari kita lihat apa yang Stripe berikan kepada kita:

app/Http/Controllers/CheckoutController.php:


use Illuminate\Http\Request;

class CheckoutController extends Controller
{
    
    public function charge(Request $request)
    {
        dd($request->all());
    }
    
}

Sekarang, setelah mengisi formulir, kita mendapatkan ini:

Ingatkah saya pernah mengatakan kepada Anda bahwa Stripe mengembalikan token kartu kepada kami? Jadi ini dia:


  "stripeToken" => "tok_1B2ckPHaQ90N6Sj5Ga6FAMla"

Sekarang kita sebenarnya dapat menggunakan token ini untuk menagih kartu ini. Ingat – kami tidak memiliki detail kartu dan kami beroperasi hanya dengan token, dikembalikan dari Stripe.


Langkah 4. Mengisi Kartu

Untuk benar-benar mengisi daya kartu, kita memerlukan integrasi back-end – untuk itu kami menggunakan paket khusus stripe/stripe-php


composer require stripe/stripe-php

Melihat: paket ini adalah kerangka kerja agnostik dan dapat digunakan untuk kerangka PHP apa pun atau bahkan dengan PHP biasa.

Selanjutnya, kita kembali ke Controller kita. Kami menyalin-menempel dan memodifikasi beberapa kode dari dokumentasi resmi Stripe, dan berikut tampilannya:


namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Stripe\Stripe;
use Stripe\Customer;
use Stripe\Charge;

class CheckoutController extends Controller
{

    public function charge(Request $request)
    {
        Stripe::setApiKey(env('STRIPE_SECRET_KEY'));

        $customer = Customer::create(array(
            'email' => $request->stripeEmail,
            'source'  => $request->stripeToken
        ));

        $charge = Charge::create(array(
            'customer' => $customer->id,
            'amount'   => 1999,
            'currency' => 'usd'
        ));
    }

}

Mari kita analisa sedikit demi sedikit.

Pertama, perhatikan kita menambahkan tiga kelas Stripe untuk digunakan:


use Stripe\Stripe;
use Stripe\Customer;
use Stripe\Charge;

Alternatifnya, Anda dapat menggunakannya dengan jalur lengkap dalam kode, misalnya \Stripe\Pelanggan::buat(…).

Selanjutnya, kami menginisialisasi paket Stripe dengan meneruskan kunci rahasia sebagai parameter (ingat saya sudah bilang itu akan berguna).


Stripe::setApiKey(env('STRIPE_SECRET_KEY'));

Langkah selanjutnya – kita perlu membuat pelanggan di sistem Stripe, baru kemudian kita dapat menagih mereka.
Dan kami memiliki cukup data untuk pelanggan tersebut – kami sebenarnya memerlukan email dan token garis yang banyak saya sebutkan di atas:


$customer = Customer::create(array(
    'email' => $request->stripeEmail,
    'source'  => $request->stripeToken
));

Dan, akhirnya, kami benar-benar dapat menagih uang:


$charge = Charge::create(array(
    'customer' => $customer->id,
    'amount'   => 1999,
    'currency' => 'usd'
));

Lihat, kami menagih jumlah yang sama (dalam sen) dan mata uang yang sama seperti dalam bentuk JavaScript, dan satu-satunya parameter lainnya adalah ID pelanggan, yang baru saja kami dapatkan dari Stripe. Sekali lagi, tidak ada detail kartu kredit yang disimpan di database kami.

Ok, sekarang mari kita simpulkan hasilnya, apakah seluruh kode ini benar-benar berhasil. Untuk itu, kami menggunakan blok coba-tangkap, dan menampilkan pesan sukses atau kesalahan:


try {
    Stripe::setApiKey(env('STRIPE_SECRET_KEY'));

    $customer = Customer::create(array(
        'email' => $request->stripeEmail,
        'source' => $request->stripeToken
    ));

    $charge = Charge::create(array(
        'customer' => $customer->id,
        'amount' => 1999,
        'currency' => 'usd'
    ));

    return 'Charge successful, you get the course!';
} catch (\Exception $ex) {
    return $ex->getMessage();
}

Saya menguji dengan menggunakan yang sama 4242 4242 4242 4242 kartu, dan inilah yang saya dapatkan:

Dan, inilah yang ditampilkan dasbor Stripe – ya, sukses!

Melihat: Anda mungkin melihat perubahan mata uang ke GBP, karena bisnis saya (dan akun Stripe) berbasis di Inggris.

Oke, jadi pada dasarnya, kita sudah selesai dengan integrasi Stripe Checkout tercepat. Cukup mudah bukan?


Biaya Berulang dan Langganan: Temui Kasir

Sampai saat ini kita berbicara tentang pembayaran satu kali untuk produk tertentu. Namun ada banyak kasus untuk bisnis berbasis langganan, di mana kartu harus ditagih secara bulanan atau tahunan. Mari kita lihat bagaimana cara melakukannya.

Pertama, Anda bisa mengolahnya secara manual. Jadi Anda bisa menyimpan kartu kredit token dan/atau ID Pelanggan Stripe di database Anda (tetapi jangan simpan detail kartu kredit, 99,99% kasus melanggar hukum), dan kemudian setiap bulan ada semacam tugas cron yang harus dihubungi Biaya :: buat lagi.

Namun ada cara yang lebih baik dan nyaman – menggunakan paket resmi bernama Laravel Cashier.

Pertama kita perlu membuat paket berlangganan di Stripe, seperti ini:

Kemudian kami dapat mereferensikan rencana ini untuk menugaskannya kepada pelanggan.

Sekarang, mari kita instal Kasir:


composer require "laravel/cashier":"~7.0"

Kemudian tambahkan ini ke config/app.php dalam array ‘penyedia’:


Laravel\Cashier\CashierServiceProvider::class,

Selanjutnya, untuk data langganan kita memerlukan dua migrasi database. Kami akan melampirkan milik kami pengguna tabel data dengan pelanggan di Stripe, jadi kami menambahkan bidang ini:


Schema::table('users', function ($table) {
    $table->string('stripe_id')->nullable();
    $table->string('card_brand')->nullable();
    $table->string('card_last_four')->nullable();
    $table->timestamp('trial_ends_at')->nullable();
});

Kami juga membutuhkan yang baru langganan meja:


Schema::create('subscriptions', function ($table) {
    $table->increments('id');
    $table->integer('user_id');
    $table->string('name');
    $table->string('stripe_id');
    $table->string('stripe_plan');
    $table->integer('quantity');
    $table->timestamp('trial_ends_at')->nullable();
    $table->timestamp('ends_at')->nullable();
    $table->timestamps();
});

Sekarang, lari migrasi tukang php.

Selain itu, untuk tujuan pengujian, saya telah membuat seeder untuk satu pengguna.

database/seeds/DatabaseSeeder.php:


public function run()
{
    User::create([
        'name' => 'First user',
        'email' => 'user@user.com',
        'password' => bcrypt('password')
    ]);
}

Dan kami lari php artisan db:seed.

Selanjutnya – kita menambahkan sifat Kasir yang Dapat Ditagih ke dalamnya aplikasi/Pengguna.php:


use Laravel\Cashier\Billable;

class User extends Authenticatable
{
    use Billable;
}

Terakhir, kita perlu menambahkan variabel konfigurasi ke dalamnya config/services.php:


'stripe' => [
    'model' => App\User::class,
    'key' => env('STRIPE_PUB_KEY'),
    'secret' => env('STRIPE_SECRET_KEY'),
],

Oke, sekarang kami siap untuk mulai menagih pelanggan kami. Dengan bentuk yang hampir sama.

rute/web.php:


Route::get('/subscribe', function () {
    return view('subscribe');
});
Route::post('/subscribe_process', 'CheckoutController@subscribe_process');

Mengajukan sumber daya/tampilan/berlangganan.blade.php hampir identik dengan selamat datang.blade.phphanya tindakan yang berbeda dengan bentuk:


<form action="/subscribe_process" method="post">

Dan sekarang – hal utama: benar-benar memproses data.

app/Http/Controllers/CheckoutController.php:


public function subscribe_process(Request $request)
{
    try {
        Stripe::setApiKey(env('STRIPE_SECRET_KEY'));

        $user = User::find(1);
        $user->newSubscription('main', 'bronze')->create($request->stripeToken);

        return 'Subscription successful, you get the course!';
    } catch (\Exception $ex) {
        return $ex->getMessage();
    }

}

Inilah hasilnya di dasbor Stripe.

Dan database kami terlihat seperti ini.

Pengguna meja:

Langganan meja:

Jika Anda mau mengubah paket untuk pengguna tertentu, berikut kode Controllernya:


try {
    Stripe::setApiKey(env('STRIPE_SECRET_KEY'));

    $user = User::find(1);

    $user->subscription('main')->swap('silver');

    return 'Plan changed successfully!';
} catch (\Exception $ex) {
    return $ex->getMessage();
}

Mirip dengan membatalkan berlangganan, itu sangat sederhana:


$user->subscription('main')->cancel();

Faktur

Karena kami menangani pembayaran, masuk akal untuk menyentuh faktur. Kami baru saja membahas langganan dengan Kasir, jadi paket ini juga memungkinkan untuk melihat data faktur dan bahkan mengunduh PDF dengan sangat mudah.

Berikut ini contohnya.

rute/web.php:


Route::get('/invoices', 'CheckoutController@invoices');
Route::get('/invoice/{invoice_id}', 'CheckoutController@invoice');

app/Http/Controllers/CheckoutController.php:


public function invoices()
{
    try {
        Stripe::setApiKey(env('STRIPE_SECRET_KEY'));

        $user = User::find(1);

        $invoices = $user->invoices();

        return view('invoices', compact('invoices'));

    } catch (\Exception $ex) {
        return $ex->getMessage();
    }

}

public function invoice($invoice_id)
{
    try {
        Stripe::setApiKey(env('STRIPE_SECRET_KEY'));

        $user = User::find(1);

        return $user->downloadInvoice($invoice_id, [
            'vendor'  => 'Your Company',
            'product' => 'Your Product',
        ]);

    } catch (\Exception $ex) {
        return $ex->getMessage();
    }

}

Juga, daftar faktur.

sumber daya/tampilan/faktur.blade.php:


<!doctype html>
<html lang="{{ app()->getLocale() }}">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">

        <title>Laravel</title>
    </head>
    <body>
    <table>
        @foreach ($invoices as $invoice)
            <tr>
                <td>{{ $invoice->date()->toFormattedDateString() }}</td>
                <td>{{ $invoice->total() }}</td>
                <td><a href=" $invoice->id }}">Download</a></td>
            </tr>
        @endforeach
    </table>
    </body>
</html>

Berikut tampilan daftar sederhana kami:

Dan faktur PDF yang diunduh terlihat seperti ini:

Sangat mudah bukan?

Namun saya berasumsi Anda ingin menyesuaikan faktur itu. Ini juga cukup mudah.

Tampilan untuk PDF ini disebut sebagai Lihat::buat(‘kasir::kwitansi’)jadi untuk mengakses dan mengedit file ini, kita perlu menjalankannya vendor tukang php: terbitkan untuk paket Kasir.

Di luar topik: luar biasa, Laravel 5.5 yang baru dirilis sekarang menanyakan apa yang akan dipublikasikan, keren!

Dan kemudian Anda akan memiliki file sumber daya/views/vendor/cashier/receipt.blade.php dan jangan ragu untuk menyesuaikannya sesuka Anda!

Hal terakhir tentang faktur: Anda mungkin ingin mendapatkannya untuk pembayaran satu kali juga. Saya punya kabar buruk untuk Anda – kutipan langsung dari Stripe API: “Perhatikan bahwa faktur di Stripe adalah bagian dari proses penagihan berulang dan tidak dimaksudkan untuk tagihan satu kali.”

Jadi, jika Anda ingin memiliki faktur untuk tagihan sederhana atau Stripe Checkout, Anda harus membuat logika tersebut sendiri. Anda sebenarnya dapat menggunakan kembali logika dan kode Laravel Cashier sampai batas tertentu, tetapi ini masih merupakan pekerjaan manual.


Wah, kita sudah selesai

Itu saja untuk tutorial besar ini. Mudah-mudahan Anda sekarang dapat mengadaptasi Stripe di aplikasi Laravel Anda, dan memahami beberapa bagian lebih dalam.

Jika Anda ingin bermain-main dengan kode yang saya tulis di sini, saya sudah menyiapkan arsip untuk diunduh.

Dan Anda mungkin tertarik dengan QuickAdminPanel – generator panel admin Laravel kami, di mana integrasi Stripe adalah salah satu modul yang dibuat sebelumnya.

Ada yang saya lewatkan? Pukul saya di komentar!

Informasi tambahan untuk membaca:

Berita Terkini

Berita Terbaru

Daftar Terbaru

News

Berita Terbaru

Flash News

RuangJP

Pemilu

Berita Terkini

Prediksi Bola

Togel Deposit Pulsa

Technology

Otomotif

Berita Terbaru

Daftar Judi Slot Online Terpercaya

Slot yang lagi gacor

Teknologi

Berita terkini

Berita Pemilu

Berita Teknologi

Hiburan

master Slote

Berita Terkini

Pendidikan

Resep

Jasa Backlink

One Piece Terbaru

More From Author