资讯专栏INFORMATION COLUMN

PHP如何使用比特币Coinbase钱包库开发应用

eccozhou / 621人阅读

摘要:比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储去中心化共识机制密钥与脚本交易与等,同时也详细讲解如何在代码中集成比特币支持功能,例如创建地址管理钱包构造裸交易等,是工程师不可多得的比特币开发学习课程。

这是Coinbase Wallet API v2的官方客户端库。我们提供直观,稳定的界面,将Coinbase Wallet集成到的PHP项目中。

重要提示:由于此库是针对较新的API v2的,因此需要v2权限(即wallet:accounts:read)。如果你仍在使用v1,请使用此库的旧版本。

安装

使用Composer安装库。如果你不熟悉Composer或依赖管理器,请阅读Composer文档。

"require": {
    "coinbase/coinbase": "~2.0"
}
认证 API密钥

使用API​​密钥和密钥访问你自己的Coinbase帐户。

use CoinbaseWalletClient;
use CoinbaseWalletConfiguration;

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

使用OAuth2身份验证访问你自己以外的用户帐户。此库不处理握手过程,并假定你在初始化时具有访问token。你可以使用OAuth2客户端(例如league/oauth2-client)处理握手过程。

use CoinbaseWalletClient;
use CoinbaseWalletConfiguration;

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

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

$client = Client::create($configuration);
双因素身份验证

发送资金端点在某些情况下需要2FA令牌(在此处阅读更多内容)。如果需要,则抛出特定异常。

use CoinbaseWalletEnumParam;
use CoinbaseWalletExceptionTwoFactorRequiredException;
use CoinbaseWalletResourceTransaction;

$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",
    ]);
}
分页

几个端点是分页的。默认情况下,库只会获取给定请求的第一页数据。你可以轻松加载不仅仅是第一页结果。

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

你还可以使用fetch_all参数让库发出加载完整集合的所有必要请求。

use CoinbaseWalletEnumParam;

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

注意警告是明智的。如果配置了一个标准PSR-3记录器,库将记录所有警告。

use CoinbaseWalletClient;
use CoinbaseWalletConfiguration;

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

你还可以使用expand参数请求API在初始请求中返回扩展资源。

use CoinbaseWalletEnumParam;

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

创建新资源时可以使用资源引用,从而避免从API请求资源的开销。

use CoinbaseWalletResourceDeposit;
use CoinbaseWalletResourcePaymentMethod;

$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 CoinbaseWalletEnumParam;

$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 CoinbaseWalletResourceAccount;

$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 CoinbaseWalletResourceAddress;

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

列出交易清单

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

获取交易信息

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

发送资金

use CoinbaseWalletEnumCurrencyCode;
use CoinbaseWalletResourceTransaction;
use CoinbaseWalletValueMoney;

$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 CoinbaseWalletResourceTransaction;
use CoinbaseWalletResourceAccount;

$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 CoinbaseWalletEnumCurrencyCode;
use CoinbaseWalletResourceTransaction;
use CoinbaseWalletValueMoney;

$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 CoinbaseWalletResourceBuy;

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

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

购买确认

如果在创建购买时传递commit=false,则只需执行此操作。

use CoinbaseWalletEnumParam;

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

出售清单

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

获取销售信息

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

卖比特币

use CoinbaseWalletResourceSell;

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

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

出售确认

如果在创建sell时传递commit=false,则只需执行此操作。

use CoinbaseWalletEnumParam;

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

列出存款清单

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

获取存款信息

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

存款

use CoinbaseWalletEnumCurrencyCode;
use CoinbaseWalletResourceDeposit;
use CoinbaseWalletValueMoney;

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

$client->createAccountDeposit($account, $deposit);

提交押金

如果在创建存款时传递commit=false,则只需执行此操作。

use CoinbaseWalletEnumParam;

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

列出提款单

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

取消

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

提款

use CoinbaseWalletEnumCurrencyCode;
use CoinbaseWalletResourceWithdrawal;
use CoinbaseWalletValueMoney;

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

$client->createAccountWithdrawal($account, $withdrawal);

提交退出

如果在调用提款方法时传递commit=true,则只需执行此操作。

use CoinbaseWalletEnumParam;

$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 CoinbaseWalletResourceOrder;
use CoinbaseWalletValueMoney;

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

$client->createOrder($order);

退款订单

use CoinbaseWalletEnumCurrencyCode;

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

列出结帐单

$checkouts = $client->getCheckouts();

创建结帐单

use CoinbaseWalletResourceCheckout;

$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,为CB_API_KEYCB_API_SECRET变量提供值,并在运行测试套件时指定integration组。

phpunit --group integration

建议你浏览我的各种编程语言的区块链教程和区块链技术博客,深入了解区块链,比特币,加密货币,以太坊,和智能合约。

php比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Php代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Php工程师不可多得的比特币开发学习课程。

php以太坊,主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和交易等内容。

这里是原文

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/24341.html

相关文章

  • iOS和Android开发比特应用的3个最受欢迎的SDK(示例)

    摘要:被认为是世界上最受欢迎的比特币钱包。获取源代码并研究是用于处理比特币系统的跨平台。 如今的比特币不仅是加密货币还是数字支付系统。实际上,由于其独特的功能,比特币已成为投资,储蓄甚至赚取更多钱的真正工具。在本文中,我们想谈谈3个最受欢迎的比特币应用SDK,它可以帮助您开发自己的应用。 感谢他们的功能,你可以创建比特币钱包,投资者工具,比特币游戏或任何其他与此加密货币相关的应用程序。此外,...

    _Dreams 评论0 收藏0
  • iOS和Android开发比特应用的3个最受欢迎的SDK(示例)

    摘要:被认为是世界上最受欢迎的比特币钱包。获取源代码并研究是用于处理比特币系统的跨平台。 如今的比特币不仅是加密货币还是数字支付系统。实际上,由于其独特的功能,比特币已成为投资,储蓄甚至赚取更多钱的真正工具。在本文中,我们想谈谈3个最受欢迎的比特币应用SDK,它可以帮助您开发自己的应用。 感谢他们的功能,你可以创建比特币钱包,投资者工具,比特币游戏或任何其他与此加密货币相关的应用程序。此外,...

    The question 评论0 收藏0
  • PHP如何使用比特Coinbase钱包开发应用

    摘要:比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储去中心化共识机制密钥与脚本交易与等,同时也详细讲解如何在代码中集成比特币支持功能,例如创建地址管理钱包构造裸交易等,是工程师不可多得的比特币开发学习课程。 这是Coinbase Wallet API v2的官方客户端库。我们提供直观,稳定的界面,将Coinbase Wallet集成到的PHP项目中。 重要提示:...

    Kosmos 评论0 收藏0
  • 如何开发比特钱包应用程序

    摘要:创建比特币钱包需要一组优秀的程序员。如何使用流行的库构建自己的比特币钱包应用程序创建比特币钱包应用程序的一种方法是依赖现有工具。具有以下功能它允许开发人员使用密码加密创建比特币钱包应用程序。 尽管目前加密货币市场相当黯淡,但比特币和其他山寨币继续受欢迎。每天都有新的交易者加入市场,希望能够在下一个价格高涨时获利。 随着市场的突飞猛进,开发商也在获益。新交易者的首要任务是设置比特币钱包。...

    Cympros 评论0 收藏0
  • 如何开发比特钱包应用程序

    摘要:创建比特币钱包需要一组优秀的程序员。如何使用流行的库构建自己的比特币钱包应用程序创建比特币钱包应用程序的一种方法是依赖现有工具。具有以下功能它允许开发人员使用密码加密创建比特币钱包应用程序。 尽管目前加密货币市场相当黯淡,但比特币和其他山寨币继续受欢迎。每天都有新的交易者加入市场,希望能够在下一个价格高涨时获利。 随着市场的突飞猛进,开发商也在获益。新交易者的首要任务是设置比特币钱包。...

    crossea 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<