Dalam tutorial ini kita akan melihat betapa mudahnya untuk membuat laman web keahlian yang dibayar asas menggunakan pakej Laravel Cashier. Anda dapat melihat demo aplikasi di sini dan memuat turun kod sumber di sini.
Takeaways Key
Laravel Cashier memudahkan penciptaan laman web keahlian yang dibayar asas dengan menguruskan pengebilan langganan, pengendalian kupon, langganan swap, tempoh tangguh pembatalan, dan menjana PDF invois. -
Untuk mengintegrasikan juruwang Laravel ke dalam projek Laravel yang sedia ada, pasang pakej melalui komposer, jalankan penghijrahan untuk menambah lajur yang diperlukan ke meja pengguna, sediakan kunci API, dan tambahkan sifat yang boleh ditagih ke model. -
Laravel Cashier boleh mengendalikan pembayaran yang gagal dengan mencuba semula pembayaran secara automatik. Sekiranya pembayaran terus gagal, langganan akan dibatalkan. -
Laravel Cashier kini menyokong hanya Stripe dan Braintree tetapi boleh diperluaskan untuk bekerja dengan gerbang pembayaran lain dengan pemahaman yang baik tentang Laravel dan API Gateway Pembayaran. -
menyediakan persekitaran kerja
kita perlu membuat projek boilreplate untuk memulakan, dan kita boleh melakukannya dengan dua cara yang berbeza:
kita boleh mengklonkan repo github ke folder projek kami. -
Dengan mengandaikan bahawa anda mempunyai komposer yang dipasang, (periksa panduan pemasangan untuk maklumat lanjut). -
Kami menjalankan komposer membuat projek laravel/laravel laravel_membership-prefer-dist, ini akan membuat projek boilerplate laravel dalam folder laravel_membership kami.
Sekarang kita perlu menghendaki pakej juruwang Laravel ke projek itu dengan menambahkan "Laravel/juruwang": "~ 1.0" kepada Composer.json kami pada bahagian yang diperlukan dan menjalankan kemas kini komposer untuk mengemas kini kebergantungan kami.
selepas itu kita perlu memberitahu aplikasi kami untuk memuatkan kelas penyedia perkhidmatan juruwang. Kami boleh melakukannya dengan menambahkan "LaravelcashiercashierserviceProvider" kepada array penyedia pada fail config/app.php.
nota: anda mesti menjalankan komposer dump-autoload untuk mengemas kini pakej kelas.
Membuat pangkalan data menggunakan Migrasi
Jika anda baru untuk migrasi Larave pastikan anda menyemak dokumentasi.
Kami akan menggunakan dua jadual:
Jadual Posts:
- int id
- Tajuk String
- Kandungan Long_text
- bool is_premium
Jadual Pengguna:
- int id
- Varchar (60) E -mel
- VARCHAR (60) Kata Laluan
Alat baris perintah Artisan Laravel menjadikannya mudah untuk membuat dan mengurus kelas migrasi.
<span>php artisan migrate:make create_posts_table --create="posts"
</span><span>
</span><span>php artisan migrate:make create_users_table --create="users"</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
dan kemudian kami mengisi skema :: membuat hujah fungsi panggil balik dengan kod yang diperlukan yang kelihatan seperti ini
<span>Schema::create('posts', function(Blueprint $table)
</span><span>{
</span><span> $table->increments('id');
</span><span> $table->string('title');
</span><span> $table->longText('content');
</span><span> $table->boolean("is_premium");
</span><span> $table->timestamps();
</span><span>});
</span><span>
</span><span>Schema::create('users', function(Blueprint $table)
</span><span>{
</span><span> $table->increments('id');
</span><span> $table->string('email', 100)->unique();
</span><span> $table->string('password', 60);
</span><span> $table->timestamps();
</span><span>});</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Untuk membiarkan juruwang Laravel tahu tentang jadual yang boleh dibilkan kami, kami perlu membuat penghijrahan khusus untuk itu. Juruwang Laravel mempunyai perintah yang dibina untuk tujuan itu.
<span>php artisan cashier:table users</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
sekarang kami sudah bersedia untuk memindahkan pangkalan data kami
<span>php artisan migrate:make create_posts_table --create="posts"
</span><span>
</span><span>php artisan migrate:make create_users_table --create="users"</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Jika anda membuka jadual pengguna anda, anda akan melihat sekumpulan medan yang ditambahkan apabila penghijrahan pakej dilaksanakan.
- Stripe_active jika anda mempunyai langganan aktif.
- ID Pengguna Stripe_id pada pelayan Stripe.
- Pelan langganan Stripe_Plan Stripe.
- Kad kredit last_four empat digit terakhir.
- trial_ends_at Tarikh akhir disimpan jika anda menentukan tempoh percubaan.
- Tarikh Akhir Langganan Langganan_ends_at.
Sekarang kita akan membiakkan pangkalan data dengan beberapa data dummy untuk memulakan; Semak hasil akhir pada GitHub.
Proses Pengebilan Stripe
berurusan dengan pembayaran boleh menjadi sakit di leher, dan jalur dapat membantu anda dengan itu, mereka menggunakan token dan bukannya nombor kad dan lain -lain., Dan itulah cara anda dapat memastikan pelanggan anda tetap selamat sambil membayar untuk perkhidmatan anda .
NOTA: Semak jika Stripe disokong di negara anda, tetapi anda masih boleh menggunakannya untuk ujian jika tidak.
Untuk bermula, kita perlu mendapatkan akaun terlebih dahulu. Stripe tidak mempunyai yuran bulanan untuk langganan, anda hanya membayar apabila anda dibayar.
Sekarang, setelah mendapat akaun, anda perlu membuat rancangan untuk permohonan anda (bulanan, tahunan, perak, emas ...).
Setiap bidang adalah penjelasan diri, jadi mari buat keahlian emas yang akan menelan kos $ 40 dan keanggotaan asas untuk $ 10. Mereka akan dibilkan setiap bulan.
Kami telah menambah lajur yang diperlukan untuk jadual pengguna kami, sekarang kami perlu membiarkan juruwang Laravel tahu bahawa kami akan menggunakan kelas pengguna sebagai kelas pengebilan kami.
<span>Schema::create('posts', function(Blueprint $table)
</span><span>{
</span><span> $table->increments('id');
</span><span> $table->string('title');
</span><span> $table->longText('content');
</span><span> $table->boolean("is_premium");
</span><span> $table->timestamps();
</span><span>});
</span><span>
</span><span>Schema::create('users', function(Blueprint $table)
</span><span>{
</span><span> $table->increments('id');
</span><span> $table->string('email', 100)->unique();
</span><span> $table->string('password', 60);
</span><span> $table->timestamps();
</span><span>});</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Nota: Kami menggunakan BillableTrait dan ciri -ciri memerlukan Php 5.4 atau lebih besar.
Sekarang kita perlu menetapkan kunci Akses API Stripe kami, yang boleh anda dapatkan dari Akaun Anda> Tetapan Akaun> Kekunci API dan menyalin Kunci Rahsia Ujian anda.
dengan menggunakan BillableTrait, kami mendapat akses kepada pengguna :: SetStripeKey (Key) Kaedah yang boleh dipanggil di mana sahaja dalam kod kami, tetapi cara yang disukai adalah untuk membuat fail perkhidmatan.php di bawah direktori config anda dan mengembalikan array seperti Ini:
Apabila GetStripeKey cuba memuatkan kunci anda, ia akan mencari harta yang dipanggil Stripey. Sekiranya tidak dijumpai, ia akan memuatkan fail perkhidmatan anda secara automatik.
<span>php artisan cashier:table users</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Membuat halaman kami
untuk menjaga perkara yang mudah kita akan membuat hanya beberapa halaman:
- Pendaftaran: di mana pengguna boleh mendaftar dengan pelan keahlian (asas, emas).
- Log masuk: Halaman Log masuk Ahli.
- Menaik taraf: Menaik taraf dari Keahlian Asas ke Emas.
- Pos: Paparkan satu halaman pos.
Untuk mempercepatkan proses kami akan menggunakan Bootsnipp. Anda boleh mendapatkan kod akhir dari repo github.
Page Login:
Halaman log masuk mempunyai medan e -mel dan kata laluan asas, dengan halaman Logincontroller yang kelihatan seperti ini:
<span>php artisan migrate:make create_posts_table --create="posts"
</span><span>
</span><span>php artisan migrate:make create_users_table --create="users"</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Page pendaftaran:
Halaman pendaftaran mempunyai medan pelan langganan yang digunakan untuk menetapkan pengguna untuk merancang.
Kami juga mempunyai nombor kad kredit, tarikh tamat tempoh, Cvc.
Seperti yang kami katakan sebelum ini, kami tidak akan perlu menangani sebarang proses pembayaran atau pengesahan, kami lulus nilai -nilai tersebut ke pelayan jalur untuk menjaga proses pengecasan dan pengesahan.
Nilai pulangan adalah token dalam hal kejayaan jika tidak, kita mendapat mesej ralat yang dapat kita tunjukkan kepada pengguna.
mari kita lihat bagaimana kod depan-end kelihatan seperti:
<span>Schema::create('posts', function(Blueprint $table)
</span><span>{
</span><span> $table->increments('id');
</span><span> $table->string('title');
</span><span> $table->longText('content');
</span><span> $table->boolean("is_premium");
</span><span> $table->timestamps();
</span><span>});
</span><span>
</span><span>Schema::create('users', function(Blueprint $table)
</span><span>{
</span><span> $table->increments('id');
</span><span> $table->string('email', 100)->unique();
</span><span> $table->string('password', 60);
</span><span> $table->timestamps();
</span><span>});</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Pertama kita memasukkan fail API JavaScript, maka kami menetapkan kunci awam kami yang kami ambil dari tetapan papan pemuka jalur kami.
Seterusnya kami melampirkan fungsi panggil balik ke borang penyerahan kami (pastikan ID borang anda sepadan dengan yang digunakan pada pengendali acara), untuk mengelakkan penyerahan ganda kami melumpuhkan butang hantar kami.
The Stripe.Card.CreateToken menerima dua hujah, yang pertama adalah objek JSON yang mempunyai beberapa nilai yang diperlukan dan pilihan.
Nilai yang diperlukan:
Nombor: Nombor kad sebagai rentetan tanpa pemisah. -
exp_month: Dua nombor digit yang mewakili bulan tamat kad. -
exp_year: Dua atau empat nombor angka yang mewakili tahun tamat kad. -
Nilai pilihan:
cvc: kod keselamatan kad sebagai rentetan, nombor CVC adalah pilihan tetapi disyorkan untuk membantu mencegah penipuan.
- Nama: Nama Pemegang Kad.
- alamat_line1: Baris alamat pengebilan 1.
- alamat_line2: Line Alamat Pengebilan 2.
- alamat_city: alamat pengebilan bandar.
- alamat_state: keadaan alamat pengebilan.
- alamat_ZIP: Bil zip sebagai rentetan.
- alamat_country: Alamat pengebilan negara.
Anda dapat melihat bahawa kami melewati objek borang dan bukannya objek JSON, anda boleh memilih untuk merebut nilai secara manual atau menggunakan atribut HTML5 strip data pada input dan jalur anda akan menggunakan beberapa kaedah penolong untuk merebut nilai tersebut secara automatik untuk anda . Ex: -
hujah kedua yang diluluskan ke stripe.card.createtoken kaedah adalah fungsi panggil balik untuk mengendalikan respons. <span>php artisan cashier:table users</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Dalam kes kegagalan StriperSesponseHandler akan cuba mencari elemen dengan kelas Payment_errors untuk memaparkan beberapa kesilapan deskriptif kepada pengguna.
Sekiranya berjaya, input tersembunyi stripetoken akan dilampirkan kepada borang dan ia akan tersedia pada hantar.
Opsyen Tambahan
Tempoh Percubaan: Seperti yang telah kami nyatakan sebelum ini, apabila anda membuat pelan baru, anda mempunyai pilihan untuk menentukan tempoh percubaan untuk pengguna menguji produk anda, dan mereka tidak akan dikenakan bayaran sehingga tempoh yang ditentukan telah berlalu.
Kupon: Anda membuat kupon melalui menu papan pemuka anda di mana anda boleh menentukan jumlah tetap atau mengikut peratusan, dengan beberapa pilihan berguna lain. -
- Sekarang mari kita pindah ke pendaftaran kami untuk melihat bagaimana kami akan mengendalikan ini.
<span>php artisan migrate:make create_posts_table --create="posts"
</span><span>
</span><span>php artisan migrate:make create_users_table --create="users"</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
kami akan melangkau proses pengesahan untuk memastikan perkara mudah.
Selepas membuat pengguna baru dan menyimpannya, kami kini mempunyai pilihan untuk melanggan pengguna ke pelan keahlian baru. Kaedah langganan menerima pelan yang telah didaftarkan sebagai hujah, yang boleh menjadi planinterface atau rentetan dan mengembalikan jalur.
Kaedah membuat menerima token sebagai parameter; Kami lulus nilai input tersembunyi baru dengan nama stripetoken.
Menaik taraf halaman:
Halaman Peningkatan akan mengemukakan kepada UpgradeController yang kelihatan seperti ini:
<span>Schema::create('posts', function(Blueprint $table)
</span><span>{
</span><span> $table->increments('id');
</span><span> $table->string('title');
</span><span> $table->longText('content');
</span><span> $table->boolean("is_premium");
</span><span> $table->timestamps();
</span><span>});
</span><span>
</span><span>Schema::create('users', function(Blueprint $table)
</span><span>{
</span><span> $table->increments('id');
</span><span> $table->string('email', 100)->unique();
</span><span> $table->string('password', 60);
</span><span> $table->timestamps();
</span><span>});</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
kami periksa sama ada pengguna dilog masuk terlebih dahulu, maka kami membuat langganan baru dengan pelan baru dan kami memanggil kaedah swap, jelas dalam projek sebenar anda akan mempunyai beberapa pelarasan yuran dan pilihan penurunan, tetapi ia harus berfungsi cara yang sama.
Halaman pos:
pemeriksaan postcontroller jika post is_premium, dan jika ya, kami menguji jika pengguna adalah ahli emas yang dapat melihat jawatan itu, jika tidak, kami mengembalikan mesej ralat mudah.
Sudah tentu dalam fail routes.php kami, kami perlu menambah penapis auth untuk mengelakkan pengguna yang tidak disahkan daripada mengakses halaman. <span>php artisan cashier:table users</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Fail laluan kami akan kelihatan seperti ini:
Kaedah berguna lain <span>php artisan migrate</span>
Salin selepas log masuk
denganCoupon: Kami berkata sebelum ini bahawa kami mempunyai kemungkinan untuk membuat kupon diskaun, dalam contoh kami, kami boleh melakukannya seperti itu:
<span>use Laravel\Cashier\BillableInterface;
</span><span>use Laravel\Cashier\BillableTrait;
</span><span>
</span><span>class User extends Eloquent implements BillableInterface {
</span><span>
</span><span> use BillableTrait;
</span><span> protected $dates = ['trial_ends_at', 'subscription_ends_at'];</span>
Salin selepas log masuk
Batal: Anda boleh membatalkan langganan dengan mudah menggunakan kaedah ini, tetapi anda perlu menyemak sama ada pengguna adalah ongraceperiod untuk memastikan anda tidak menyekatnya dengan segera:
<span>return [
</span><span> 'stripe' => [
</span><span> 'secret' => 'Your key'
</span><span> ]
</span><span>];</span>
Salin selepas log masuk
onplan: Lihat jika pengguna berada dalam pelan tertentu.
- ontrial: Lihat jika pengguna masih dalam tempoh percubaan.
- dibatalkan: Jika pengguna telah membatalkan langganan mereka.
- getlastfourcarddigits: Dapatkan kad pengguna empat digit terakhir.
- getSubscriptionEndDate: Dapatkan tarikh langganan.
- gettrialenddate: Dapatkan tarikh akhir percubaan.
- Invois: Dapatkan senarai invois pengguna.
- findinvoice: Cari invois oleh id.
- muat turunInvoice: menghasilkan invois yang boleh dimuat turun dengan id.
-
Kesimpulan
Dalam tutorial ini, kami meneroka bagaimana juruwang Laravel dapat meringankan proses pengebilan dan membantu menguruskan pelanggan anda dengan lebih mudah.
kami pastinya tidak merangkumi segala -galanya di sini, tetapi ia adalah permulaan untuk anda menggali kod sumber untuk meneroka apa lagi yang boleh anda lakukan. Jika anda ingin melihat demo hosted nitrous aplikasi ini, lihat di sini.
Soalan Lazim (Soalan Lazim) Mengenai Keahlian Juruwang Laravel
Bagaimanakah Laravel Cashier mengendalikan bil langganan? Ia menyediakan antara muka ekspresif, fasih untuk perkhidmatan pengebilan langganan Stripe dan Braintree. Ia mengendalikan hampir semua kod pengebilan langganan boilerplate yang anda penulisan. Juruwang Laravel boleh mengendalikan kupon, langganan swap, langganan "kuantiti", tempoh tangguh pembatalan, dan juga menjana pdf invois. 'LL perlu membuat akaun jalur dan memasang pakej juruwang melalui komposer. Anda juga perlu menambah sifat yang boleh dibilkan kepada definisi model anda - sifat ini menyediakan pelbagai kaedah untuk membolehkan anda melaksanakan tugas pengebilan yang sama, seperti membuat langganan, memohon kupon, dan mengemas kini maklumat kad. Saya mengintegrasikan juruwang Laravel ke dalam projek Laravel saya yang sedia ada? Pertama, anda perlu memasang pakej melalui komposer. Kemudian, anda perlu menyediakan pangkalan data dengan menjalankan penghijrahan yang menambah beberapa lajur ke jadual pengguna anda. Selepas itu, anda perlu menyediakan kunci API dan menambah sifat yang boleh dibilkan kepada model anda. Akhirnya, anda boleh menggunakan pelbagai kaedah yang disediakan oleh sifat yang boleh dibilkan untuk menguruskan langganan anda. Sekiranya pembayaran gagal, juruwang akan mencuba semula pembayaran secara automatik. Sekiranya pembayaran terus gagal, langganan akan dibatalkan. Walau bagaimanapun, anda juga boleh mengendalikan peristiwa -peristiwa ini secara manual dengan mendengar peristiwa yang berkaitan dan mengambil tindakan yang sesuai. Braintree. Walau bagaimanapun, anda boleh memperluaskan juruwang untuk bekerja dengan gerbang pembayaran lain jika anda mahu. Ini memerlukan pemahaman yang baik tentang kedua -dua Laravel dan API Gateway Pembayaran. . Apabila langganan dibatalkan, juruwang secara automatik akan menetapkan tarikh akhir langganan hingga akhir kitaran pengebilan semasa. menyokong tempoh percubaan. Anda boleh menetapkan tempoh percubaan ketika membuat langganan. Pengguna tidak akan dibilkan sehingga tempoh percubaan berakhir.
Bagaimana saya boleh menjana invois menggunakan juruwang Laravel? Anda boleh mengakses versi PDF yang boleh dimuat turun dari invois dengan memanggil kaedah muat turun pada contoh invois, yang akan menulis PDF ke cakera atau mengalirkannya ke penyemak imbas.
Ya, Laravel Cashier menyokong penggunaan kupon untuk langganan. Anda boleh melakukan ini dengan menggunakan kaedah WithCoupon semasa membuat langganan baru. Untuk langganan jenis "setiap tempat duduk". Anda boleh mengemas kini kuantiti langganan menggunakan kaedah kemas kini pada contoh langganan.
Atas ialah kandungan terperinci Keahlian dengan Laravel Cashier. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!