Автор оригинала: 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/”