aries/jeeb.io

jeeb.io 比特币支付系统包装器

1.0.1 2020-06-01 16:44 UTC

This package is auto-updated.

Last update: 2024-09-14 00:17:07 UTC


README

用于在网站 jeeb.io 使用加密货币支付网关的包

要求

  • laravel 7+
  • curl

安装

使用以下命令安装最新版本的包

composer require aries\jeeb.io

现在需要使用以下命令发布所需的迁移

php artisan vendor:publish --provider='Aries\Jeeb\JeebServiceProvider'

现在需要执行迁移

php artisan migrate

使用

为了正确使用此包,我们需要三个路由
  1. 一个用于创建交易的路由
  2. 一个用于我们从网关返回到我们自己的网站的路径
  3. 一个用于处理从吉布服务器发送的请求的路由
第二个路由是可选的,如果您不想将用户发送到吉布网关,您可以在您的网站上显示由吉布创建的钱包,并直接将用户引导到网关。

解决路由令牌问题

吉布服务器发送的响应是 POST 形式,这与 Laravel 的 csrf_token 冲突。
为了解决这个问题,需要在 app\http\Middleware\VerifyCrsfToken.php 路径中排除 callbackwebhook 路由
<?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'
    ];
}

创建交易

您可以使用 facade 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();                   # انتقال کاربر به درگاه جیب
});

从网关返回(回调)

使用 facade Aries\Jeeb\Facades\Jeeb 和方法 callback 来处理吉布服务器的响应。
此外,使用 facade 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'));
});

Webhook

您可以使用 facade Aries\Jeeb\Facades\Jeeb 和方法 webhook 来处理吉布服务器发送的响应。
请注意,由于区块链交易确认时间较长,您需要等待吉布服务器以 webhook 形式发送的确认响应,并且当交易确认且状态 ID 为 4 时,您可以交付产品给用户。
支付金额超过或低于您指定的金额将自动退还给用户。
<?php
use Aries\Jeeb\Facades\Jeeb;
use Illuminate\Support\Facades\Route;

Route::get('/jeeb/webhook', function() {
    return Jeeb::webhook();
});

查看交易列表

要查看按支付状态分组的交易列表,可以使用 facade 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');
        }
    }
此方法返回的值是一个 Laravel 标准模型,您可以像处理标准模型一样处理它,例如使用 paginate 方法进行分页。