moki74/laravel-btc

基于bitcoind的btc支付系统

v1.1 2018-08-22 12:28 UTC

This package is not auto-updated.

Last update: 2024-09-29 05:29:26 UTC


README

接收BTC支付的包

先决条件

Laravel版本 >= 5.5

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

运行Bitcoind服务器

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

安装

首先,创建laravel应用

laravel new first-bitcoin-app

然后切换到first-bitcoin-app目录

cd first-bitcoin-app

通过composer安装包

composer require moki74/laravel-btc

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

php artisan vendor:publish

并选择标签 bitcoin

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

// Put this at the end of .env file
BITCOIND_HOST=127.0.0.1 // change this with host of Bitcoin server
BITCOIND_PORT=8332
BITCOIND_USER=rpcusername // change this with rpc user name from bitcoin config
BITCOIND_PASSWORD=rpcuserpassword  //change this with rpc passord from bitcoin config
BITCOIND_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. moki74\LaravelBtc\Bitcoind - 这是一个用于比特币服务器的RPC命令的包装器。您可以通过Laravel的 app 辅助函数创建此对象,如下所示

$btc = app("bitcoind");
// or
$btc = app("moki74\LaravelBtc\Bitcoind");

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

$bitcoinaddress = $btc->getnewaddress();
// You can call any RPC method
// see this url : https://en.bitcoin.it/wiki/Original_Bitcoin_client/API_calls_list

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

2. moki74\LaravelBtc\Models\Payment - 这是一个比特币支付的模型,为您创建新的比特币地址、金额、跟踪客户是否已付款、将其存储到数据库...

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

$payment = app("moki74\LaravelBtc\Models\Payment");
//or
$payment = app("bitcoinPayment");

此对象包含以下属性

user_id - 下订单用户的id

order_id - 订单id(非必须)

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

paid - 这是一个指示用户是否已付款以及区块链上确认次数是否正常的指标(.env文件或配置目录中的bitcoind.conf文件中有配置参数BITCOIND_MIN_CONFIRMATIONS)

amount - 用户需要支付的金额

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

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

confirmations - 付款的确认次数。

典型的工作流程

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

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

$payment = app("bitcoinPayment"); // new  bitcoin address is automatically generated
$payment->user_id = $user->id;
$payment->amount = 0.05; // this is price for order or item
$payment->save();

检查付款和确认

包中包含 moki74\LaravelBtc\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

这些Listener对应于项目vendor文件夹中的事件: vendor\moki74\laravel-btc\src\Events

ConfirmedPaymentEvent.php

UnconfirmedPaymentEvent.php

UnknownTransactionEvent.php

要激活这些Listener,请将以下代码复制到 app\Providers\EventServiceProvider.php 类中(此类是Laravel默认安装的一部分),在该类的 $listen 属性中。

如下所示:

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

        'moki74\LaravelBtc\Events\ConfirmedPaymentEvent' => [
            'App\Listeners\ConfirmedPaymentListener',
        ],

        'moki74\LaravelBtc\Events\UnconfirmedPaymentEvent' => [
            'App\Listeners\UnconfirmedPaymentListener',
        ],

        'moki74\LaravelBtc\Events\UnknownTransactionEvent' => [
            'App\Listeners\UnknownTransactionListener',
        ],

    ];

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

以下是一个ConfimedPaymentListener的示例,当确认次数等于.env文件中的BITCOIND_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. moki74\LaravelBtc\Events\UnconfirmedPaymentEvent - 用户已付款。交易ID在区块链上生成,区块链上的确认次数为0 - 因此您需要等待额外的确认。

  2. moki74\LaravelBtc\Events\ConfirmedPaymentEvent - 付款已完成,确认次数等于或大于.env文件中 BITCOIND_MIN_CONFIRMATIONS 的值。

  3. moki74\LaravelBtc\Events\UnknownTransactionEvent - 通常这发生在用户付款且交易费从他发送的金额中扣除,而您没有收到全部金额的情况下。这些付款存储在单独的表中,您可以制定逻辑来解决这个问题。

模型

moki74\LaravelBtc\Models\Payment - 代表已确认和未确认的付款(请参阅用法部分)

moki74\LaravelBtc\Models\UnknownTransaction - 代表与Payment模型中金额不符的区块链上的交易。

许可证

MIT许可证

为了帮助本项目成长,请用比特币进行捐赠

BTC地址:1D3PDXSQDjvyLXeMb34XR6UeCwZX7tcjXP