payaccept / laravel-paychain
Laravel 实现PayChain 区块链的包
Requires
- php: >=7.3
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 ...
}
事件
-
PayAccept\LaravelPaychain\Events\UnconfirmedPaymentEvent - 用户已完成付款。交易ID在区块链上生成,区块链上的确认次数为0,因此您需要等待额外的确认。
-
PayAccept\LaravelPaychain\Events\ConfirmedPaymentEvent - 付款已完成,确认次数等于或大于.env文件中定义的 PAYCHAIN_MIN_CONFIRMATIONS 值。
-
PayAccept\LaravelPaychain\Events\UnknownTransactionEvent - 通常这种情况发生在用户付款时,交易费从用户发送的金额中扣除,而您没有收到全部金额。此类付款将存储在单独的表中,您可以创建逻辑来处理这种情况。
模型
PayAccept\LaravelPaychain\Models\Payment - 表示已确认和未确认的付款(请参阅使用部分)
PayAccept\LaravelPaychain\Models\UnknownTransaction - 表示区块链上的交易,其金额与Payment模型中的金额不匹配。
许可协议
MIT许可协议