paolorlima9/laravel-bitgo

Laravel 对 Bitgo API 的服务集成,用于钱包操作和加密货币转账

v1.0.0 2024-01-28 14:17 UTC

This package is auto-updated.

Last update: 2024-09-25 19:10:04 UTC


README

该 Laravel Bitgo SDK 是一个库,简化了 Laravel 与 Bitgo API 的集成,以便进行钱包操作和加密货币转账。以下是对此包提供的功能的详细文档。

安装

您可以通过 Composer 安装此包

composer require paulorlima9/laravel-bitgo

安装后,您可以使用以下命令发布配置文件

php artisan vendor:publish --provider="PauloRLima9\LaravelBitgo\BitgoServiceProvider"

这是发布的配置文件内容(config/bitgo.php

配置

.env 文件中配置您的 Bitgo API 凭据

BITGO_API_KEY=your-api-key
BITGO_WEBHOOK_CALLBACK_URL=https://your-domain.com/bitgo/callback
BITGO_MAINNET_API_URL=https://www.bitgo.com/api/v2/
BITGO_TESTNET_API_URL=https://test.bitgo.com/api/v2/
BITGO_EXPRESS_API_URL=https://express.bitgo.com/api/v2/

使用方法

使用 Webhooks 生成钱包

use PauloRLima9\LaravelBitgo\Facades\Wallet;

$wallet = Wallet::init(coin: 'tbtc')
    ->generate(label: 'Minha Carteira', passphrase: 'senha_segura')
    ->addWebhook(numConfirmations: 0)
    ->addWebhook(numConfirmations: 1);

return $wallet;

向钱包添加具有自定义返回 URL 的 Webhook

use PauloRLima9\LaravelBitgo\Facades\Wallet;

$wallet = Wallet::init(coin: 'tbtc', id: 'id-da-carteira')
    ->addWebhook(
        numConfirmations: 3,
        callbackUrl: 'https://seu-domínio.com/bitgo/callback'
    );

return $wallet;

在现有钱包中生成地址

use PauloRLima9\LaravelBitgo\Facades\Wallet;

$wallet = Wallet::init(coin: 'tbtc', id: 'id-da-sua-carteira')
    ->generateAddress(label: 'etiqueta-do-endereço');

return $wallet->address;

检查钱包的最大可消费金额

use PauloRLima9\LaravelBitgo\Facades\Wallet;

$maxSpendable = Wallet::init(coin: 'tbtc', id: 'id-da-sua-carteira')
    ->getMaximumSpendable();

return $maxSpendable;

获取钱包中的所有交易

use PauloRLima9\LaravelBitgo\Facades\Wallet;

$transfers = Wallet::init(coin: 'tbtc', id: 'id-da-sua-carteira')
    ->getTransfers();

return $transfers;

通过转账 ID 获取转账信息

use PauloRLima9\LaravelBitgo\Facades\Wallet;

$transfer = Wallet::init(coin: 'tbtc', id: 'id-da-sua-carteira')
    ->getTransfer(transferId: 'id-da-transferência');

return $transfer;

从钱包发送转账

use PauloRLima9\LaravelBitgo\Data\Requests\TransferData;
use PauloRLima9\LaravelBitgo\Data\Requests\TransferRecipientData;
use PauloRLima9\LaravelBitgo\Facades\Wallet;

// Você pode adicionar quantos destinatários precisar :)

$recipient = TransferRecipientData::fromArray([
    'amount' => 4934,
    'address' => 'carteira'
]);

$recipientTwo = TransferRecipientData::fromArray([
    'amount' => 4934,
    'address' => 'carteira'
]);

$transferData = TransferData::fromArray([
    'walletPassphrase' => 'teste',
    'recipients' => [$recipient, $recipientTwo]
]);

$result = Wallet::init('tbtc', 'id-da-sua-carteira')->sendTransfer($transferData);

return $result;

直接与 Bitgo API 集成

您还可以直接使用 BitgoAdapter 类来访问 Bitgo API 的其他资源。以下是一些示例

获取认证用户信息

use PauloRLima9\LaravelBitgo\Adapters\BitgoAdapter;

$response = (new BitgoAdapter())->me();

// $response agora contém informações sobre o usuário autenticado
return $response->json();

获取汇率

use PauloRLima9\LaravelBitgo\Adapters\BitgoAdapter;

$coin = 'tbtc'; // Substitua pelo código da moeda desejada, por exemplo, 'btc'

$response = (new BitgoAdapter())->getExchangeRates($coin);

// $response agora contém informações sobre as taxas de câmbio da moeda especificada
return $response->json();

在 Bitgo Express API 上 Ping

use PauloRLima9\LaravelBitgo\Adapters\BitgoAdapter;

$response = (new BitgoAdapter())->pingExpress();

// $response agora contém a resposta do ping na API Express
return $response->json();

在 Bitgo 主 API 上 Ping

use PauloRLima9\LaravelBitgo\Adapters\BitgoAdapter;

$response = (new BitgoAdapter())->ping();

// $response agora contém a resposta do ping na API principal
return $response->json();

生成新的钱包

use PauloRLima9\LaravelBitgo\Adapters\BitgoAdapter;
use PauloRLima9\LaravelBitgo\Data\Requests\GenerateWallet;

$coin = 'tbtc'; // Substitua pelo código da moeda desejada, por exemplo, 'btc'
$generateWalletData = GenerateWallet::fromArray([
    'label' => 'Minha Carteira',
    'passphrase' => 'senha_segura',
]);

$response = (new BitgoAdapter())->generateWallet($coin, $generateWalletData);

// $response agora contém informações sobre a carteira recém-criada
return $response->json();

这些仅是用于说明如何使用 BitgoAdapter 类的方法的示例。请确保根据您的应用程序的具体需求调整参数。

通过 Webhook 接收即时通知(IPN)

在您的钱包中配置 Webhook 后,您将收到有关交易的即时通知。以下是在 Laravel 控制器中处理这些通知的示例

use Illuminate\Http

\Request;
use PauloRLima9\LaravelBitgo\Facades\Wallet;
use PauloRLima9\LaravelBitgo\Data\Responses\Webhook;

class BitgoWebhookController extends Controller
{
    public function handleWebhook(Request $request)
    {
        // Verifique a autenticidade da solicitação, garantindo que ela venha da Bitgo
        if ($this->isValidBitgoRequest($request)) {
            // Processar a notificação recebida
            $webhookData = Webhook::fromArray($request->all());

            // Aqui você pode acessar os dados da transação
            $transactionId = $webhookData->id;
            $transactionStatus = $webhookData->state;

            // Agora, você pode processar os dados conforme necessário
            // ...

            // Responda à solicitação Bitgo com sucesso
            return response()->json(['status' => 'success']);
        }

        // Responda à solicitação Bitgo com erro se a autenticidade falhar
        return response()->json(['status' => 'error', 'message' => 'Unauthorized'], 401);
    }

    private function isValidBitgoRequest(Request $request): bool
    {
        // Implemente a lógica para verificar se a solicitação é autêntica
        // Utilize as informações fornecidas pela Bitgo no cabeçalho da solicitação
        // Certifique-se de configurar a chave de API corretamente nas configurações Bitgo

        return true; // Retorne verdadeiro se a solicitação for autêntica
    }
}

请确保在 routes/web.php 文件中将 webhook 请求路由到该控制器

use App\Http\Controllers\BitgoWebhookController;

Route::post('/bitgo/webhook', [BitgoWebhookController::class, 'handleWebhook']);

现在,当您的 Bitgo 钱包发生交易时,通知将被发送到配置的 URL 并由控制器处理。请确保根据您的应用程序的具体需求调整处理逻辑。

测试

composer test

致谢

许可

MIT 许可(MIT)。有关更多信息,请参阅许可文件