如何在PHP中获取指定BTC地址的交易信息(时间、交易ID、金额)
在PHP中获取BTC地址的交易信息(含时间、交易ID、金额)
嘿,你已经能成功获取BTC地址的余额了,其实要拿到交易信息也很简单,咱们可以继续用你之前用的blockchain.info的API,直接调用它的「原始地址信息」接口就能拿到所有交易数据。我给你写了一段适配你现有代码风格的示例,还加了细节处理,比如金额单位转换、时间格式化这些:
<?php function getBtcTransactions($address) { // 构造API请求地址,urlencode避免地址里的特殊字符出问题 $apiUrl = 'https://blockchain.info/rawaddr/' . urlencode($address); // 发起请求,和你获取余额的方式一致 $response = file_get_contents($apiUrl); // 先处理请求失败的情况 if (!$response) { return false; } // 把返回的JSON字符串转成数组 $data = json_decode($response, true); // 检查JSON解析是否成功 if (json_last_error() !== JSON_ERROR_NONE) { return false; } $transactions = []; // 遍历每一笔交易 foreach ($data['txs'] as $tx) { // 计算当前地址在这笔交易中的净金额(因为交易可能是转入或转出) $netAmount = 0; // 先看转出到当前地址的金额 foreach ($tx['out'] as $output) { if ($output['addr'] === $address) { // 接口返回的是聪,转成BTC要除以100000000 $netAmount += $output['value'] / 100000000; } } // 再看从当前地址转出的金额 foreach ($tx['inputs'] as $input) { if (isset($input['prev_out']['addr']) && $input['prev_out']['addr'] === $address) { $netAmount -= $input['prev_out']['value'] / 100000000; } } // 整理成易读的格式 $transactions[] = [ 'txid' => $tx['hash'], // 交易ID 'time' => date('Y-m-d H:i:s', $tx['time']), // 时间戳转成YYYY-MM-DD HH:MM:SS格式 'amount' => number_format($netAmount, 8) // BTC保留8位小数 ]; } return $transactions; } // 调用示例,替换成你要查询的地址 $targetAddress = 'xxxxxxxxxxxxxxx'; $transactionList = getBtcTransactions($targetAddress); // 输出结果 if ($transactionList) { echo '<h3>该地址的交易记录</h3>'; echo '<ul>'; foreach ($transactionList as $tx) { echo "<li>交易ID: {$tx['txid']} | 时间: {$tx['time']} | 金额: {$tx['amount']} BTC</li>"; } echo '</ul>'; } else { echo '抱歉,获取交易信息失败了,请检查地址是否正确或网络连接'; } ?>
一些补充说明:
- 如果你的服务器禁用了
file_get_contents,可以用curl替代请求部分,代码片段如下:
// 替换原有的file_get_contents请求 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $apiUrl); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 生产环境建议开启SSL验证,测试阶段可以临时关闭 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $response = curl_exec($ch); curl_close($ch);
- 这个API返回的金额单位是「聪」(1 BTC = 100,000,000 聪),所以代码里做了单位转换,确保显示的是BTC数值
- 交易金额的计算逻辑是取当前地址的净变化:转入为正,转出为负,这样你能直观看到每笔交易的收支情况
内容的提问来源于stack exchange,提问作者R_life_R
相关产品推荐
相关产品推荐

