payaccept/laravel-paychain

Laravel 实现PayChain 区块链的包

安装: 2

依赖: 0

建议者: 0

安全性: 0

星标: 0

关注者: 0

分支: 19

类型:项目

1.0.7 2021-11-30 07:50 UTC

This package is not auto-updated.

Last update: 2024-09-28 21:52:05 UTC


README

通过PayChain接收付款的包

先决条件

Laravel 版本 >= 7.3

关于安装Laravel有很多文档,这里不赘述...

运行Paychain服务器

您可以在以下文档中找到: https://bitcoin.org/en/full-node#what-is-a-full-node

Paychain节点基于bitcoin-core-0.16

安装

首先,创建Laravel应用程序

laravel new first-paychain-app

然后,进入first-bitcoin-app目录

cd first-paychain-app

通过composer安装包

composer require payaccept/laravel-paychain

安装完成后,使用artisan命令发布包

php artisan vendor:publish

并选择标签 paychain

在config文件夹中,您将找到新的配置文件 - paychain.php 您可以直接修改文件中的值,但最常见的方式是将值放入Laravel .env 文件中,如下所示

// Put this at the end of .env file
PAYCHAIN_HOST=127.0.0.1 // change this with host of Paychain server
PAYCHAIN_PORT=8554
PAYCHAIN_USER=rpcusername // change this with rpc user name from bitcoin config
PAYCHAIN_PASSWORD=rpcuserpassword  //change this with rpc passord from bitcoin config
PAYCHAIN_MIN_CONFIRMATIONS=3  // This is minimal number of confirmations - do some google about bitcoin confirmations if you not shure about this value

接下来,运行迁移

php artisan migrate

用法

包中有两个主要对象

1. PayAccept\LaravelPaychain\Paychain - 这是一个用于比特币服务器的RPC命令的包装器。您可以通过Laravel app 辅助函数创建此对象,如下所示

$paychain = app("paychain");
// or
$paychain = app("PayAccept\LaravelPaychain\Paychain");

然后,在对象上调用RPC方法

$payaddress = $paychain->getnewaddress();

您可以使用此对象进行简单的项目...

2. PayAccept\LaravelPaychain\Models\Payment - 这是一个用于Paychain付款的模型,为您创建新的Paychain地址,金额,跟踪客户是否已付款,并将其存储到数据库中...

同样,使用 app 辅助函数,如下所示

$payment = app("PayAccept\LaravelPaychain\Models\Payment");
//or
$payment = app("paychainPayment");

此对象包含以下属性

user_id - 下订单用户的id

order_id - 订单id(非必需)

address - 比特币地址(在您调用 $payment = app("bitcoinPayment") 时自动为您生成)

paid - 如果用户已付款并且区块链上的确认数符合要求(.env文件或config文件夹中的paychain.conf文件中的配置参数PAYCHAIN_MIN_CONFIRMATIONS设置了最小确认数),则此指示器指示用户是否已付款

amount - 用户需要支付的金额

amount_received - 实际收到的比特币金额(有些用户可能会犯错误,并从发送的金额中扣除手续费,这样您将不会收到期望的金额)

txid - 区块链中此付款的交易id(当用户实际付款时,此id将在数据库中填充)

confirmations - 付款的确认数。

典型工作流程

当用户下订单时,您创建一个新的Payment对象并填充其属性

// Most likely you'll use code like this in some of your Controllers

$payment = app("paychainPayment"); 
$payment->user_id = $user->id;
$payment->amount = 0.05; // this is price for order or item
$payment->save();

检查付款和确认

包包含类PayAccept\LaravelPaychain\Commands\CheckPayment。这是一个Laravel命令,您可以通过php artisan调用它

php artisan bitcoin:checkpayment

每次调用它时,它都会在区块链上扫描付款和确认。您可以像上面提到的那样手动调用它进行测试,但这样做没有太大意义,因为它的工作是检查付款,并且它需要始终运行。

您需要在Linux服务器上创建crontab条目或Windows服务器上的任务计划程序,每分钟调用此命令。

// Example for linux
crontab -e

// add this line to cron tab and replace path
* * * * * cd /path/to/your/project/ php artisan bitcoin:checkpayment >/dev/null 2>&1

此脚本还会触发我们可以监听的事件...

监听付款

当您发布包时,您将在应用程序的 app\Listeners 文件夹中找到新类(请参阅安装部分)。这些是

ConfirmedPaymentListener.php

UnconfirmedPaymentListener.php

UnknownTransactionListener.php

这些监听器分别对应放置在项目供应商文件夹中的事件:vendor\payaccept\laravel-paychain\src\Events

ConfirmedPaymentEvent.php

UnconfirmedPaymentEvent.php

UnknownTransactionEvent.php

要激活这些监听器,请将以下代码复制到 app\Providers\EventServiceProvider.php 类中(此类由Laravel默认安装提供),在类的 $listen 属性中。

如下所示

protected $listen = [
        'App\Events\Event' => [
            'App\Listeners\EventListener',
        ],

        'PayAccept\LaravelPaychain\Events\ConfirmedPaymentEvent' => [
            'App\Listeners\ConfirmedPaymentListener',
        ],

        'PayAccept\LaravelPaychain\Events\UnconfirmedPaymentEvent' => [
            'App\Listeners\UnconfirmedPaymentListener',
        ],

        'PayAccept\LaravelPaychain\Events\UnknownTransactionEvent' => [
            'App\Listeners\UnknownTransactionListener',
        ],

    ];

在每个此类中都有一个handle方法,您可以在其中放置当事件触发时需要执行的操作逻辑(数据库插入-更新,发送邮件等)。

以下为ConfirmedPaymentListener的示例,当确认次数等于.env文件中定义的PAYCHAIN_MIN_CONFIRMATIONS时,会生成事件,并且我们可以确信付款是成功的。

    public function handle(ConfirmedPaymentEvent $event)
    {
        Log::debug('Confirmed Payment listener: '. $event->confirmedPayment);
         // Here you add your code for sending mails, db update ...
    }

事件

  1. PayAccept\LaravelPaychain\Events\UnconfirmedPaymentEvent - 用户已完成付款。交易ID在区块链上生成,区块链上的确认次数为0,因此您需要等待额外的确认。

  2. PayAccept\LaravelPaychain\Events\ConfirmedPaymentEvent - 付款已完成,确认次数等于或大于.env文件中定义的 PAYCHAIN_MIN_CONFIRMATIONS 值。

  3. PayAccept\LaravelPaychain\Events\UnknownTransactionEvent - 通常这种情况发生在用户付款时,交易费从用户发送的金额中扣除,而您没有收到全部金额。此类付款将存储在单独的表中,您可以创建逻辑来处理这种情况。

模型

PayAccept\LaravelPaychain\Models\Payment - 表示已确认和未确认的付款(请参阅使用部分)

PayAccept\LaravelPaychain\Models\UnknownTransaction - 表示区块链上的交易,其金额与Payment模型中的金额不匹配。

许可协议

MIT许可协议