Рубрики
Uncategorized

Как использовать библиотеку кошельков Bitcoin Coinbase для разработки и применения PHP

Автор оригинала: David Wong.

Это официальная клиентская библиотека API кошелька Coinbase версии 2. Мы предоставляем интуитивно понятный, стабильный интерфейс для интеграции кошелька Coinbase в PHP-проекты.

Важное примечание: Поскольку эта библиотека предназначена для более нового API v2, требуются разрешения V2 (то есть разрешения V2). кошелек:счета:читать ) Если вы все еще используете v1, используйте старую версию этой библиотеки.

устанавливать

Используйте Composer для установки библиотек. Если вы не знакомы с Composer или менеджером зависимостей, ознакомьтесь с документацией Composer.

"require": {
    "coinbase/coinbase": "~2.0"
}

Идентификация

API-ключ

Используйте ключи API и ключи для доступа к вашей собственной учетной записи Coinbase.

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

$configuration = Configuration::apiKey($apiKey, $apiSecret);
$client = Client::create($configuration);

OAuth2

Используйте аутентификацию OAuth2 для доступа к учетным записям пользователей, отличным от ваших собственных. Эта библиотека не обрабатывает рукопожатие и предполагает, что у вас есть маркер доступа при инициализации. Вы можете использовать клиенты OAuth2 (например, league/oauth2-клиент) для обработки рукопожатий.

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);

Двухфакторная аутентификация

Для отправки конечной точки фонда в некоторых случаях требуется токен 2FA (подробнее читайте здесь). При необходимости создается определенное исключение.

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

$transaction = Transaction::send([
    'toEmail' => '[email protected]',
    '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',
    ]);
}

подкачка

Несколько конечных точек разбиты на страницы. По умолчанию библиотеки получают только первую страницу данных для данного запроса. Вы можете легко загрузить не только результаты первой страницы.

$transactions = $client->getAccountTransactions($account);
while ($transactions->hasNextPage()) {
    $client->loadNextTransactions($transactions);
}

Вы также можете использовать его. Параметры fetch_all позволяют библиотеке выдавать все необходимые запросы для загрузки полной коллекции.

use Coinbase\Wallet\Enum\Param;

$transactions = $client->getAccountTransactions($account, [
    Param::FETCH_ALL => true,
]);

предупреждение

Разумно обращать внимание на предупреждения. Если настроен стандартный регистратор PSR-3, библиотека записывает все предупреждения.

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

$configuration = Configuration::apiKey($apiKey, $apiSecret);
$configuration->setLogger($logger);
$client = Client::create($configuration);

Цитирование ресурса

В некоторых случаях API будет возвращать ссылки на ресурсы вместо расширенных объектов ресурсов. Эти ссылки могут быть расширены путем обновления.

$deposit = $this->client->getAccountDeposit($account, $depositId);
$transaction = $deposit->getTransaction();
if (!$transaction->isExpanded()) {
    $this->client->refreshTransaction($transaction);
}

Вы также можете использовать его. расширить API запроса параметров возвращает расширенный ресурс в исходном запросе.

use Coinbase\Wallet\Enum\Param;

$deposit = $this->client->getAccountDeposit($account, $depositId, [
    Param::EXPAND = ['transaction'],
]);

Ссылки на ресурсы можно использовать при создании новых ресурсов, чтобы избежать накладных расходов на запрос ресурсов из 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
]);

ответ

Существует несколько способов доступа к необработанным данным ответов. Во-первых, у каждого объекта ресурса есть один getRawData() Метод, вы можете использовать этот метод для доступа к любому полю, которое не сопоставлено свойству объекта.

$data = $deposit->getRawData();

Необработанные данные из последнего HTTP-ответа также могут быть использованы на клиентских объектах.

$data = $client->decodeLastResponse();

Способ Регистрации Активности

Библиотека включает поддержку методов записи активности на объектах ресурсов. Вы должны включить эту функцию при загрузке приложения.

$client->enableActiveRecord();

Если этот параметр включен, вы можете вызвать метод ведения журнала действий для объекта ресурса.

use Coinbase\Wallet\Enum\Param;

$transactions = $account->getTransactions([
    Param::FETCH_ALL => true,
]);

использование

Это не для того, чтобы предоставить полную документацию по API. Для получения более подробной информации см. официальную документацию.

Рыночные данные

Список поддерживаемых местных валют

$currencies = $client->getCurrencies();

Обменный курс списка

$rates = $client->getExchangeRates();

Цена покупки

$buyPrice = $client->getBuyPrice('BTC-USD');

Цена продажи

$sellPrice = $client->getSellPrice('BTC-USD');

спотовая цена

$spotPrice = $client->getSpotPrice('BTC-USD');

Текущее серверное время

$time = $client->getTime();

пользователь

Доступ к информации для авторизации

$auth = $client->getCurrentAuthorization();

Найти Информацию о Пользователе

$auth = $client->getCurrentAuthorization();

Получить текущего пользователя

$user = $client->getCurrentUser();

Обновите текущего пользователя

$user->setName('New Name');
$client->updateCurrentUser($user);

счета

Перечислите все учетные записи

$accounts = $client->getAccounts();

Перечислите реквизиты учетной записи

$account = $client->getAccount($accountId);

Перечислите основные данные учетной записи

$account = $client->getPrimaryAccount();

Установите учетную запись в качестве основной учетной записи

$client->setPrimaryAccount($account);

Создайте новый биткоин – аккаунт

use Coinbase\Wallet\Resource\Account;

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

Обновить учетную запись

$account->setName('New Account Name');
$client->updateAccount($account):

Удалить учетную запись

$client->deleteAccount($account);

адрес

Укажите адрес получения учетной записи

$addresses = $client->getAccountAddresses($account);

Получение Полученной Адресной Информации

$address = $client->getAccountAddress($account, $addressId);

Адреса для перечисления транзакций

$transactions = $client->getAddressTransactions($address);

Создайте новый адрес получателя

use Coinbase\Wallet\Resource\Address;

$address = new Address([
    'name' => 'New Address'
]);
$client->createAccountAddress($account, $address);

операция

Перечислите транзакции

$transactions = $client->getAccountTransactions($account);

Доступ к информации о транзакциях

$transaction = $client->getAccountTransaction($account, $transactionId);

Отправка средств

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(); 
}

Перевод средств на новые счета

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);

Заявка на получение средств

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);

Повторная отправка запроса

$account->resendTransaction($transaction);

Запрос на отмену

$account->cancelTransaction($transaction);

Запрос на завершение

$account->completeTransaction($transaction);

Покупка

Составьте список покупок

$buys = $client->getAccountBuys($account);

Доступ к информации о покупке

$buy = $client->getAccountBuy($account, $buyId);

Купить Биткоин

use Coinbase\Wallet\Resource\Buy;

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

$client->createAccountBuy($account, $buy);

Подтверждение покупки

Если он доставлен при создании покупки фиксация=ложь Необходимо выполнить только эту операцию.

use Coinbase\Wallet\Enum\Param;

$client->createAccountBuy($account, $buy, [Param::COMMIT => false]);
$client->commitBuy($buy);

Распродавать

Список продаж

$sells = $client->getAccountSells($account);

Получение Информации о Продажах

$sell = $client->getAccountSell($account, $sellId);

Продажа биткоина

use Coinbase\Wallet\Resource\Sell;

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

$client->createAccountSell($account, $sell);

Подтверждение продажи

Если передается при создании продажи фиксация=ложь Необходимо выполнить только эту операцию.

use Coinbase\Wallet\Enum\Param;

$client->createAccountSell($account, $sell, [Param::COMMIT => false]);
$client->commitSell($sell);

депозит

Перечислите депозиты

$deposits = $client->getAccountDeposits($account);

Доступ к информации о депозите

$deposit = $client->getAccountDeposit($account, $depositId);

депозит

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);

Внесение депозита

Если перевод происходит при создании депозита фиксация=ложь Необходимо выполнить только эту операцию.

use Coinbase\Wallet\Enum\Param;

$client->createAccountDeposit($account, $deposit, [Param::COMMIT => false]);
$client->commitDeposit($deposit);

Выводите деньги

Перечислите коносаменты

$withdrawals = $client->getAccountWithdrawals($account);

отменять

$withdrawal = $client->getAccountWithdrawal($account, $withdrawalId);

рисунок

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);

Отправить выход

Если передается при вызове метода вывода commit=true Необходимо выполнить только эту операцию.

use Coinbase\Wallet\Enum\Param;

$client->createAccountWithdrawal($account, $withdrawal, [Param::COMMIT => false]);
$client->commitWithdrawal($withdrawal);

Способ оплаты

Перечислите способы оплаты

$paymentMethods = $client->getPaymentMethods();

Способ получения оплаты

$paymentMethod = $client->getPaymentMethod($paymentMethodId);

бизнес

Займитесь бизнесом

$merchant = $client->getMerchant($merchantId);

Заказ

Список заказов

$orders = $client->getOrders();

Получить заказ

$order = $client->getOrder($orderId);

Создать заказ

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

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

$client->createOrder($order);

Порядок возврата средств

use Coinbase\Wallet\Enum\CurrencyCode;

$client->refundOrder($order, CurrencyCode::BTC);

Сведение счетов

Перечислите выписку

$checkouts = $client->getCheckouts();

Создайте заказ

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";

Проверять

$checkout = $client->getCheckout($checkoutId);

Получайте заказы на оформление заказа

$orders = $client->getCheckoutOrders($checkout);

Создание заказов на оформление заказа

$order = $client->createNewCheckoutOrder($checkout);

Уведомить webhook и проверить

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

Вклад и тестирование

Набор тестов построен с использованием PHPUnit. Через операцию phpunit Команда для запуска набора модульных тестов.

phpunit

Существует также набор интеграционных тестов, которые делают фактические запросы к API и проверяют сгенерированные объекты. Чтобы выполнить эти тесты, вы должны phpunit.xml.dist Скопировать в phpunit.xml.dist Скопировать в Для CB_API_KEY и CB_API_SECRET Переменные предоставляют значения и указывают их при запуске набора тестов

phpunit --group integration

Я рекомендую вам просмотреть мои учебники по блокчейну и блоги по технологии блокчейн на различных языках программирования, чтобы лучше понять цепочки блоков, биткоины, зашифрованные валюты, магазины Ethernet и смарт-контракты.

  • Курс разработки Php Bitcoin для начинающих охватывает основные концепции биткоина, такие как хранение блокчейна, децентрализованный механизм консенсуса, ключ и скрипт, транзакция и UTXO. В нем также подробно объясняется, как интегрировать функции поддержки биткойнов в Php-код, такие как создание адреса, управление кошельком, построение простой транзакции и т. Д., Которые являются редкими для инженеров Php. Курс Развития Валюты.
  • PHP Ethernet workshop в основном знакомит с использованием PHP для интеллектуального взаимодействия при разработке контрактов, создания учетных записей, транзакций, передачи, разработки токенов, фильтров и транзакций.

Вот оригинальный текст.

Оригинал: “https://developpaper.com/how-to-use-bitcoin-coinbase-wallet-library-to-develop-and-apply-php/”