Comment utiliser PHP pour développer des applications à l'aide de la bibliothèque de portefeuille Bitcoin Coinbase (étapes détaillées)

不言
Libérer: 2023-04-04 10:30:02
avant
5386 Les gens l'ont consulté

Le contenu de cet article explique comment utiliser la bibliothèque de portefeuille Bitcoin Coinbase pour développer des applications en PHP (étapes détaillées). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. .

Il s'agit de la bibliothèque client officielle de l'API Coinbase Wallet v2. Nous fournissons une interface intuitive et stable pour intégrer Coinbase Wallet dans votre projet PHP.

Important : étant donné que cette bibliothèque cible la nouvelle API v2, les autorisations v2 sont requises (c'est-à-dire wallet:accounts:read). Si vous utilisez toujours la v1, veuillez utiliser une ancienne version de cette bibliothèque.

Installer

Utilisez Composer pour installer la bibliothèque. Si vous n'êtes pas familier avec Composer ou le gestionnaire de dépendances, veuillez lire la documentation de Composer.

"require": {
    "coinbase/coinbase": "~2.0"
}
Copier après la connexion

Authentification

Clé API

Utilisez les clés API et les clés pour accéder à votre propre compte Coinbase.

use Coinbase\Wallet\Client;
use Coinbase\Wallet\Configuration;

$configuration = Configuration::apiKey($apiKey, $apiSecret);
$client = Client::create($configuration);
Copier après la connexion

OAuth2

Utilisez l'authentification OAuth2 pour accéder à des comptes d'utilisateurs autres que le vôtre. Cette bibliothèque ne gère pas le processus d'établissement de liaison et suppose que vous disposez du jeton d'accès au moment de l'initialisation. Vous pouvez utiliser un client OAuth2 (tel que league/oauth2-client) pour gérer le processus de prise de contact.

use Coinbase\Wallet\Client;
use Coinbase\Wallet\Configuration;

// with a refresh token
$configuration = Configuration::oauth($accessToken, $refreshToken);

// without a refresh token
$configuration = Configuration::oauth($accessToken);

$client = Client::create($configuration);
Copier après la connexion

Authentification à deux facteurs

Le point de terminaison Send Funds nécessite un jeton 2FA dans certains cas (en savoir plus ici). Lève une exception spécifique si nécessaire.

use Coinbase\Wallet\Enum\Param;
use Coinbase\Wallet\Exception\TwoFactorRequiredException;
use Coinbase\Wallet\Resource\Transaction;

$transaction = Transaction::send([
    'toEmail' => 'test@test.com',
    'bitcoinAmount' => 1
]);

$account = $client->getPrimaryAccount();
try {
    $client->createAccountTransaction($account, $transaction);
} catch (TwoFactorRequiredException $e) {
    // show 2FA dialog to user and collect 2FA token

    // retry call with token
    $client->createAccountTransaction($account, $transaction, [
        Param::TWO_FACTOR_TOKEN => '123456',
    ]);
}
Copier après la connexion

Pagination

Plusieurs points de terminaison sont paginés. Par défaut, la bibliothèque récupère uniquement la première page de données pour une requête donnée. Vous pouvez facilement charger plus que la première page de résultats.

$transactions = $client->getAccountTransactions($account);
while ($transactions->hasNextPage()) {
    $client->loadNextTransactions($transactions);
}
Copier après la connexion

Vous pouvez également utiliser le paramètre fetch_all pour que la bibliothèque fasse toutes les requêtes nécessaires au chargement de la collection complète.

use Coinbase\Wallet\Enum\Param;

$transactions = $client->getAccountTransactions($account, [
    Param::FETCH_ALL => true,
]);
Copier après la connexion

AVERTISSEMENT

Il est sage de tenir compte des avertissements. Si un enregistreur PSR-3 standard est configuré, la bibliothèque enregistrera tous les avertissements.

use Coinbase\Wallet\Client;
use Coinbase\Wallet\Configuration;

$configuration = Configuration::apiKey($apiKey, $apiSecret);
$configuration->setLogger($logger);
$client = Client::create($configuration);
Copier après la connexion

Référence de ressource

Dans certains cas, l'API renverra une référence de ressource à la place de l'objet de ressource étendu. Ces références peuvent être étendues par rafraîchissement.

$deposit = $this->client->getAccountDeposit($account, $depositId);
$transaction = $deposit->getTransaction();
if (!$transaction->isExpanded()) {
    $this->client->refreshTransaction($transaction);
}
Copier après la connexion

Vous pouvez également utiliser l'API de requête de paramètre expand pour renvoyer des ressources étendues dans la requête initiale.

use Coinbase\Wallet\Enum\Param;

$deposit = $this->client->getAccountDeposit($account, $depositId, [
    Param::EXPAND = ['transaction'],
]);
Copier après la connexion

Vous pouvez utiliser des références de ressources lors de la création de nouvelles ressources, évitant ainsi la surcharge liée à la demande de ressources à l'API.

use Coinbase\Wallet\Resource\Deposit;
use Coinbase\Wallet\Resource\PaymentMethod;

$deposit = new Deposit([
    'paymentMethod' => PaymentMethod::reference($paymentMethodId)
]);

// or use the convenience method
$deposit = new Deposit([
    'paymentMethodId' => $paymentMethodId
]);
Copier après la connexion

Réponse

Il existe plusieurs façons d'accéder aux données brutes de réponse. Premièrement, chaque objet ressource possède une méthode getRawData() que vous pouvez utiliser pour accéder à tous les champs qui ne sont pas mappés aux propriétés de l'objet.

$data = $deposit->getRawData();
Copier après la connexion

Les données brutes de la dernière réponse HTTP sont également disponibles sur l'objet client.

$data = $client->decodeLastResponse();
Copier après la connexion

Méthodes d'enregistrement d'activité

La bibliothèque inclut la prise en charge de la méthode d'enregistrement d'activité sur les objets ressources. Vous devez activer cette fonctionnalité lors du démarrage de l'application.

$client->enableActiveRecord();
Copier après la connexion

Lorsque cette option est activée, vous pouvez appeler des méthodes d'enregistrement actives sur les objets ressources.

use Coinbase\Wallet\Enum\Param;

$transactions = $account->getTransactions([
    Param::FETCH_ALL => true,
]);
Copier après la connexion

Utilisation

Ceci n'est pas destiné à fournir une documentation complète de l'API. Consultez la documentation officielle pour plus de détails.

Données de marché

Liste des devises locales prises en charge

$currencies = $client->getCurrencies();
Copier après la connexion

Liste des taux de change

$rates = $client->getExchangeRates();
Copier après la connexion

Prix d'achat

$buyPrice = $client->getBuyPrice('BTC-USD');
Copier après la connexion

Prix ​​de vente

$sellPrice = $client->getSellPrice('BTC-USD');
Copier après la connexion

Prix spot

$spotPrice = $client->getSpotPrice('BTC-USD');
Copier après la connexion

Heure actuelle du serveur

$time = $client->getTime();
Copier après la connexion

Utilisateur

Obtenir les informations d'autorisation

$auth = $client->getCurrentAuthorization();
Copier après la connexion
Copier après la connexion

Rechercher des informations sur l'utilisateur

$auth = $client->getCurrentAuthorization();
Copier après la connexion
Copier après la connexion

Obtenir l'utilisateur actuel

$user = $client->getCurrentUser();
Copier après la connexion

Mettre à jour l'utilisateur actuel

$user->setName('New Name');
$client->updateCurrentUser($user);
Copier après la connexion

Compte

Répertorier tous les comptes

$accounts = $client->getAccounts();
Copier après la connexion

Liste des détails du compte

$account = $client->getAccount($accountId);
Copier après la connexion

Liste des détails du compte principal

$account = $client->getPrimaryAccount();
Copier après la connexion

Définir le compte comme principal

$client->setPrimaryAccount($account);
Copier après la connexion

Créer un nouveau Bitcoin compte

use Coinbase\Wallet\Resource\Account;

$account = new Account([
    'name' => 'New Account'
]);
$client->createAccount($account);
Copier après la connexion

Mettre à jour le compte

$account->setName('New Account Name');
$client->updateAccount($account):
Copier après la connexion

Supprimer le compte

$client->deleteAccount($account);
Copier après la connexion

Adresse

Liste l'adresse de réception du compte

$addresses = $client->getAccountAddresses($account);
Copier après la connexion

Obtenir les informations sur l'adresse de réception

$address = $client->getAccountAddress($account, $addressId);
Copier après la connexion

Répertorier les transactions de l'adresse

$transactions = $client->getAddressTransactions($address);
Copier après la connexion

Créer une nouvelle adresse de réception

use Coinbase\Wallet\Resource\Address;

$address = new Address([
    'name' => 'New Address'
]);
$client->createAccountAddress($account, $address);
Copier après la connexion

Transactions

Répertorier les transactions

$transactions = $client->getAccountTransactions($account);
Copier après la connexion

Obtenir des informations sur les transactions

$transaction = $client->getAccountTransaction($account, $transactionId);
Copier après la connexion

Envoyer des fonds

use Coinbase\Wallet\Enum\CurrencyCode;
use Coinbase\Wallet\Resource\Transaction;
use Coinbase\Wallet\Value\Money;

$transaction = Transaction::send([
    'toBitcoinAddress' => 'ADDRESS',
    'amount'           => new Money(5, CurrencyCode::USD),
    'description'      => 'Your first bitcoin!',
    'fee'              => '0.0001' // only required for transactions under BTC0.0001
]);

try { $client->createAccountTransaction($account, $transaction); }
catch(Exception $e) {
     echo $e->getMessage(); 
}
Copier après la connexion

Transférer des fonds vers un nouveau compte

use Coinbase\Wallet\Resource\Transaction;
use Coinbase\Wallet\Resource\Account;

$fromAccount = Account::reference($accountId);

$toAccount = new Account([
    'name' => 'New Account'
]);
$client->createAccount($toAccount);

$transaction = Transaction::transfer([
    'to'            => $toAccount,
    'bitcoinAmount' => 1,
    'description'   => 'Your first bitcoin!'
]);

$client->createAccountTransaction($fromAccount, $transaction);
Copier après la connexion

Demande de fonds

use Coinbase\Wallet\Enum\CurrencyCode;
use Coinbase\Wallet\Resource\Transaction;
use Coinbase\Wallet\Value\Money;

$transaction = Transaction::request([
    'amount'      => new Money(8, CurrencyCode::USD),
    'description' => 'Burrito'
]);

$client->createAccountTransaction($transaction);
Copier après la connexion

Renvoyer la demande

$account->resendTransaction($transaction);
Copier après la connexion

Annuler la demande

$account->cancelTransaction($transaction);
Copier après la connexion

Terminer la demande

$account->completeTransaction($transaction);
Copier après la connexion

Acheter

Liste des achats

$buys = $client->getAccountBuys($account);
Copier après la connexion

Obtenir des informations d'achat

$buy = $client->getAccountBuy($account, $buyId);
Copier après la connexion

Acheter du Bitcoin

use Coinbase\Wallet\Resource\Buy;

$buy = new Buy([
    'bitcoinAmount' => 1
]);

$client->createAccountBuy($account, $buy);
Copier après la connexion

Confirmation d'achat

Il vous suffit de faites-le si vous passez commit=false lors de la création de l'achat.

use Coinbase\Wallet\Enum\Param;

$client->createAccountBuy($account, $buy, [Param::COMMIT => false]);
$client->commitBuy($buy);
Copier après la connexion

Vendre

Liste de vente

$sells = $client->getAccountSells($account);
Copier après la connexion

Obtenir des informations sur la vente

$sell = $client->getAccountSell($account, $sellId);
Copier après la connexion

Vendre du Bitcoin

use Coinbase\Wallet\Resource\Sell;

$sell = new Sell([
    'bitcoinAmount' => 1
]);

$client->createAccountSell($account, $sell);
Copier après la connexion

Confirmation de vente

Vous ne devez le faire que si vous réussissez commit=false lors de la création de la vente.

use Coinbase\Wallet\Enum\Param;

$client->createAccountSell($account, $sell, [Param::COMMIT => false]);
$client->commitSell($sell);
Copier après la connexion

Dépôt

Liste de la liste des dépôts

$deposits = $client->getAccountDeposits($account);
Copier après la connexion

Obtenir des informations sur les dépôts

$deposit = $client->getAccountDeposit($account, $depositId);
Copier après la connexion

Dépôt

use Coinbase\Wallet\Enum\CurrencyCode;
use Coinbase\Wallet\Resource\Deposit;
use Coinbase\Wallet\Value\Money;

$deposit = new Deposit([
    'amount' => new Money(10, CurrencyCode::USD)
]);

$client->createAccountDeposit($account, $deposit);
Copier après la connexion

Soumettre le dépôt

Vous ne devez le faire que si vous réussissez commit=false lors de la création du dépôt.

use Coinbase\Wallet\Enum\Param;

$client->createAccountDeposit($account, $deposit, [Param::COMMIT => false]);
$client->commitDeposit($deposit);
Copier après la connexion

Retrait

Liste des ordres de retrait

$withdrawals = $client->getAccountWithdrawals($account);
Copier après la connexion

Annuler

$withdrawal = $client->getAccountWithdrawal($account, $withdrawalId);
Copier après la connexion

Retrait

use Coinbase\Wallet\Enum\CurrencyCode;
use Coinbase\Wallet\Resource\Withdrawal;
use Coinbase\Wallet\Value\Money;

$withdrawal = new Withdrawal([
    'amount' => new Money(10, CurrencyCode::USD)
]);

$client->createAccountWithdrawal($account, $withdrawal);
Copier après la connexion

Soumettre Sortie

Ceci n'est nécessaire que si vous réussissez commit=true lors de l'appel de la méthode de retrait.

use Coinbase\Wallet\Enum\Param;

$client->createAccountWithdrawal($account, $withdrawal, [Param::COMMIT => false]);
$client->commitWithdrawal($withdrawal);
Copier après la connexion

Modes de paiement

Liste des modes de paiement

$paymentMethods = $client->getPaymentMethods();
Copier après la connexion

Obtenir les modes de paiement

$paymentMethod = $client->getPaymentMethod($paymentMethodId);
Copier après la connexion

Marchand

Obtenir le marchand

$merchant = $client->getMerchant($merchantId);
Copier après la connexion

Commander

Liste de la commande

$orders = $client->getOrders();
Copier après la connexion

Obtenir la commande

$order = $client->getOrder($orderId);
Copier après la connexion

Créer la commande

use Coinbase\Wallet\Resource\Order;
use Coinbase\Wallet\Value\Money;

$order = new Order([
    'name' => 'Order #1234',
    'amount' => Money::btc(1)
]);

$client->createOrder($order);
Copier après la connexion

Remboursement Commander

use Coinbase\Wallet\Enum\CurrencyCode;

$client->refundOrder($order, CurrencyCode::BTC);
Copier après la connexion

Paiement

Liste du paiement

$checkouts = $client->getCheckouts();
Copier après la connexion

Créer un paiement

use Coinbase\Wallet\Resource\Checkout;

$params = array(
    'name'               => 'My Order',
    'amount'             => new Money(100, 'USD'),
    'metadata'           => array( 'order_id' => $custom_order_id )
);

$checkout = new Checkout($params);
$client->createCheckout($checkout);
$code = $checkout->getEmbedCode();
$redirect_url = "https://www.coinbase.com/checkouts/$code";
Copier après la connexion

Paiement

$checkout = $client->getCheckout($checkoutId);
Copier après la connexion

Obtenir commande de paiement

$orders = $client->getCheckoutOrders($checkout);
Copier après la connexion

Créer une commande de paiement

$order = $client->createNewCheckoutOrder($checkout);
Copier après la connexion

通知webhook和验证

$raw_body = file_get_contents('php://input');
$signature = $_SERVER['HTTP_CB_SIGNATURE'];
$authenticity = $client->verifyCallback($raw_body, $signature); // boolean
Copier après la connexion

贡献和测试

测试套件使用PHPUnit构建。通过运行phpunit命令运行单元测试套件。

phpunit
Copier après la connexion

还有一组集成测试,它们向API发出实际请求并检查生成的对象。要运行这些测试,必须将phpunit.xml.dist复制到phpunit.xml,为CB_API_KEYCB_API_SECRET变量提供值,并在运行测试套件时指定integration组。

phpunit --group integration
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:segmentfault.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!