paolorlima9 / laravel-bitgo
Laravel 对 Bitgo API 的服务集成,用于钱包操作和加密货币转账
v1.0.0
2024-01-28 14:17 UTC
Requires
- php: ^8.1
- ext-readline: *
- guzzlehttp/guzzle: ^7.8
- illuminate/contracts: *
- illuminate/support: *
- spatie/laravel-package-tools: ^1.16
Requires (Dev)
- jetbrains/phpstorm-attributes: ^1.0
- larastan/larastan: ^2.8
- laravel/pint: ^1.13
- launchdarkly/launchdarkly-php: ^6.0
- nunomaduro/collision: ^6.4
- orchestra/testbench: ^7.40
- pestphp/pest: ^1.23
- pestphp/pest-plugin-laravel: ^1.4
- phpstan/extension-installer: ^1.3
- phpstan/phpstan-deprecation-rules: ^1.1
- phpstan/phpstan-phpunit: ^1.3
- phpunit/phpunit: ^9.6
- spatie/laravel-ray: ^1.34
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)。有关更多信息,请参阅许可文件。