پکیجی جهت استفاده از درگاه پرداخت رمزارزها توسط وبسایت jeeb.io
- laravel 7+
- curl
با دستور زیر آخرین نسخهی پکیج رو نصب کنید
composer require aries\jeeb.io
حالا لازمه که با دستور زیر مایگریشنهای مورد نیاز پکیج رو منتشر کنید
php artisan vendor:publish --provider='Aries\Jeeb\JeebServiceProvider'
و حالا لازمه که مایگریشنها رو اجرا کنید
php artisan migrate
برای کار کردن درست پکیج به سه روت نیاز داریم
- یک روت که در اون تراکنش رو ایجاد کنیم
- یک روت برای زمانی که از درگاه برمیگردیم به سایت خودمون
- و یک روت برای پردازش وبهوک ارسالی از طرف سرور جیب
روت دوم اختیاریه، در صورتی که نخواید کاربر رو برای پرداخت به درگاه جیب بفرستید میتونید کیف پول ایجاد شده توسط جیب رو توی سایت خودتون نشون بدین و کاربر رو به درگاه هدایت نکنید.
پاسخهای ارسالی از طرف سرور جیب به صورت post هستن و این با csrf_token لاراول به مشکل میخوره.
برای حل این مشکل باید روتهای
برای حل این مشکل باید روتهای
callback
و webhook
رو در مسیر app\http\Middleware\VerifyCrsfToken.php
استثنا کرد:
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;
class VerifyCsrfToken extends Middleware
{
/**
* The URIs that should be excluded from CSRF verification.
*
* @var array
*/
protected $except = [
'/jeeb/callback',
'/jeeb/webhook'
];
}
شما میتونید با استفاده از فساد
Aries\Jeeb\Facades\Jeeb
و متود pay
یک ترانش جدید ایجاد کنید:
<?php
use Aries\Jeeb\Facades\Jeeb;
use Illuminate\Support\Facades\Route;
Route::get('/jeeb/pay', function() {
return Jeeb::pay()
->order(1234) # شماره سفارش
->from('irr') # ارز مبدا که در اینجا ریال ایران هستش
->with('btc/ltc/doge') # ارزهای قابل پذیرش که با / از هم تفکیک شده
->amount(1000000) # مبلغ تراکنش بر پایهی ارز مبدا که اینجا یک میلیون ریال هست
->callback('YOUR/CALLBACK/URL') # آدرس روتی که پس از پرداخت در درگاه جیب بهش برمیگردیم
->webhook('YOUR/WEBHOOK/URL') # آدرس روتی که قراره وبهوک رو پردازش کنه
->language('fa') # زبان رابط کاربری درگاه جیب
->process() # ارسال درخواست به سرور جیب
->redirect(); # انتقال کاربر به درگاه جیب
});
با استفاده از فساد
همچنین با استفاده از فساد
Aries\Jeeb\Facades\Jeeb
و متود callback
پاسخ سرور جیب رو هندل کنید.همچنین با استفاده از فساد
Aries\Jeeb\Facades\State
و متود message
مقدار stateId برگشت داده شده رو برای کاربر ترجمه کنید.
<?php
use Aries\Jeeb\Facades\Jeeb;
use Aries\Jeeb\Facades\State;
use Illuminate\Support\Facades\Route;
Route::get('/jeeb/callback', function() {
$response = Jeeb::callback()->process();
$message = State::message($response->stateId);
return view('path.to.your.callback.view', compact('response', 'message'));
});
شما میتونید با استفاده از فساد
لازم به ذکره که به دلیل زمانبر بودن تایید تراکنش در بلاکچین باید منتظر ارسال پاسخ تایید از طرف سرور جیب به صورت وبهوک باشید و در صورت تایید شدن تراکنش با ststeId برابر ۴ میتونید محصول رو به کاربر تحویل بدید.
مبالغ پرداختی بیشتر یا کمتر از مقدار مشخص شده توسط شما بصورت خودکار به کاربر برگشت داده میشه.
Aries\Jeeb\Facades\Jeeb
و متود webhook
پاسخهای ارسال شده از طرف سرور جیب رو هندل کنید.لازم به ذکره که به دلیل زمانبر بودن تایید تراکنش در بلاکچین باید منتظر ارسال پاسخ تایید از طرف سرور جیب به صورت وبهوک باشید و در صورت تایید شدن تراکنش با ststeId برابر ۴ میتونید محصول رو به کاربر تحویل بدید.
مبالغ پرداختی بیشتر یا کمتر از مقدار مشخص شده توسط شما بصورت خودکار به کاربر برگشت داده میشه.
<?php
use Aries\Jeeb\Facades\Jeeb;
use Illuminate\Support\Facades\Route;
Route::get('/jeeb/webhook', function() {
return Jeeb::webhook();
});
برای مشاهدهی لیست تراکنشها به تفکیک وضعیت پرداخت میتونید از فساد
Aries\Jeeb\Facades\Jeeb
و متود transaction
استفاده کنید:
use Aries\Jeeb\Facades\Jeeb;
public function transactions(Request $request) {
switch($request->input('type')) {
case 'confirmed':
# تراکنشهایی که در بلاکچین تایید شدند.
return Jeeb::transaction()->confirmed()->get();
case 'unConfirmed':
# تراکنشهایی که در بلاکچین تایید شدند ولی شما هنوز آنها را تایید نکرده اید.
return Jeeb::transaction()->unConfirmed()->get();
case 'pending':
# تراکنشهایی که هنوز در بلاکچین تایید نشده اند.
return Jeeb::transaction()->pending()->get();
case 'rejected':
# تراکنشهایی که توسط کاربر لغو شده یا در زمان مقرر پرداخت نشدهاند
return Jeeb::transaction()->rejected()->get();
case 'less':
# تراکنشهایی که مقدار پرداخت شده آن توسط کاربر کمتر از مقدار مشخص شده توسط شماست
return Jeeb::transaction()->lessPaid()->get();
case 'over':
# تراکنشهایی که مقدار پرداخت شده آن توسط کاربر بیشتر از مقدار مشخص شده توسط شماست
return Jeeb::transaction()->overPaid()->get();
case 'all':
# لیست تمام تراکنشها
return Jeeb::transaction()->get()->load('wallets');
}
}
مقدار بازگشتی توسط این متود یک مدل استاندارد لاراولی بوده و میتونید مثل یک مدل استاندارد باهاش برخورد کنید، مثلا میتونید با متود
paginate
اون رو صفحه بندی کنید.