+
80
-

比特币支付怎么集成到php网站?

php

请问比特币支付怎么集成到php网站?

网友回复

+
0
-

首先下载比特币钱包

下载地址:https://bitcoin.org/zh_CN/download

800_auto

下载安装后,)找到 bitcoin.conf 配置文件,windows可从钱包界面窗口的“设置=>选项>打开配置文件进入”(其他系统版本自行找到 bitcoin.conf文件)。

800_auto

修改bitcoin.conf文件如下:

regtest=1

listen=1

server=1

rpcuser=admin

rpcpassword=123456

rpcallowip=192.168.3.144

rpcallowip=192.168.3.182

rpcport=8832

参数说明: regtest:开启测试网络1为开启0为关闭 Listen:开启监听模式,默认开启 Server:1表示接受RPC指令0不接收 Rpcuser:用来访问钱包的RPC用户名 Rpcpassword:用来访问钱包的RPC密码 Rpcallowip:指定哪些IP可以通过RPC访问钱包 Rpcport:RPC访问端口

重启钱包服务后可以做界面看到测试模式开启的标志

然后可以在命令行中操作钱包了

创建账户地址: Getnewaddress(账户) 根据账户生成钱包地址,没有对应账户则生成新账户 模拟挖矿获得币(此方式用于测试网络,正式网络中有矿工挖矿不需要此操作): Generate(挖矿次数) 模拟挖矿可获得挖矿奖励,可在测试环境下获得比特币的手段 查看账户余额 Listaccounts 查询钱包所有账户的信息 getbalance (账户) 根据账户查询余额 (未满6次确认的交易不算) 根据地址发送比特币 Sendfrom(转出账户,目标地址,数量) 从某一个账户向目标地址转币 Sendtoaddress(目标地址,数量) 使用钱包默认账户往目标地址转币 模拟挖矿打包 Generate(挖矿次数) 根据TXID查询交易情况 Gettransaction(TXID) 根据交易ID查询交易信息 其他常用指令: 账户余额查询 Getreceivedbyaddress(钱包地址,确认数) 根据地址和区块确认数 查询余额; Listaccounts 查询钱包所有账户的信息 Getreceivedbyaddress(账户,确认数) 查询该账户下,对应区块确认数收到的金额; getbalance (账户) 根据账户查询余额 (未满6次确认的交易不算) Getreceivedbyaccount(账户) 获取账户收款金额 Validateaddress(钱包地址) 查询钱包地址相关信息 地址生成和查询 Listaddressgroupings 查询钱包中所有地址 Getnewaddress(账户) 根据账户生成钱包地址,没有对应账户则生成新账户 getaccountaddress (账户) 获取账户地址 Listaddressgroupings 查询钱包所有地址 交易查询 Listtransactions(账户,查询条数,从多少条开始)根据账户查询交易记录 Gettransaction(TXID) 根据交易ID查询交易信息 发币转币 Move(原账户,目标账户,数量) 从一个账户往另外一个账户转移资产 Sendfrom(转出账户,目标地址,数量) 从某一个账户向目标地址转币 Sendtoaddress(目标地址,数量) 使用钱包默认账户往目标地址转币 其他操作 Generate(确认数量) 模拟挖矿 Walletlock 锁定钱包 ,钱包锁定后就不可以进行转账操作了 Walletpassphrase ‘钱包密码’ 600 解锁钱包 600为时间

好了,我们使用php来连接钱包的本地rpc来操作钱包吧

当我们希望在Php代码中给某个比特币地址发送以太币时,可以使用 sendtoaddress 这个RPC接口,可以传入以下参数: ToAddress:接收地址 Amount:发送的比特币数量 Comment:备注文本 CommentTo:备注接收人 AutoFeeSubtract:是否自动扣除手续费,默认值:false 上面的参数中,只有ToAddress和Amount是必须的。当调用完成时, 将返回该笔交易对应的ID。 下面的代码使用GuzzleHttp来调用sendtoaddress接口向指定的地址发送 0.12个比特币:

<?php
require('../vendor/autoload.php');

use GuzzleHttp\Client;

$client = new Client();

$opts = [
  'json' => [
    'jsonrpc' => '1.0',
    'method' => 'sendtoaddress',
    'params' => ['1LeiqzD6jCwPcdNNAPiT8ayKgdHJMP2EpZ',0.12],
    'id' => time()
  ]
];

$rsp = $client->post('http://user:pass@localhost:8332',$opts);
echo $rsp->getBody() . PHP_EOL;

+
0
-

可以使用blockchain api,他可以实时监听钱包收付款事件并通过回调告知您的服务器。

地址:https://www.blockchain.com/api/api_receive

Blockchain Receive Payments API 介绍

Blockchain Receive Payments API V2 是开始接受自动比特币支付的最快捷、最简单的方法。只需一个简单的 HTTP GET 请求,您就可以在几分钟内启动并运行。 接收比特币付款所涉及的困难之一是需要为每个新用户或发票生成一个唯一地址。这些地址需要安全地监控和存储。区块链接收支付 API 负责地址的生成和监控。每当收到付款时,我们都会使用简单的回调通知您的服务器。

请求 API 密钥

访问 Blockchain.info API

要使用 Receive Payments API V2,请在https://www.blockchain.com/api/request申请 API 密钥。

此 API 密钥仅适用于我们的 Receive Payments API。您不能将标准区块链钱包 API 密钥用于 Receive Payments V2,反之亦然。

获取扩展公钥 (xPub)

可以使用我们新的区块链钱包创建 xPubs

此 API 要求您拥有 BIP 32 帐户 xPub 才能接收付款。开始接收付款的最简单方法是在https://www.blockchain.com/api/request打开一个区块链钱包。您应该在您的钱包中创建一个新帐户,专门用于此 API 促成的交易。进行 API 调用时,请使用此帐户的 xPub(位于 Settings -> Addresses -> Manage -> More Options -> Show xPub 中)。

生成接收地址 [GET]

为您的客户提供唯一的、未使用的比特币地址

可以使用我们新的区块链钱包创建 xPubs

https://api.blockchain.info/v2/receive?xpub=$xpub&callback=$callback_url&key=$key

根据 BIP 44 的定义,钱包软件不会扫描过去 20 个未使用的地址。如果来自此 API 的足够多的请求没有匹配的付款,您可以生成超出此范围的地址,这将使支付给这些地址的资金变得非常困难。因此,如果此 API 检测到会造成超过 20 个未使用地址的间隙,它将返回错误并拒绝生成新地址。如果您遇到此错误,您将需要切换到新的 xPub(在同一个钱包内也可以),或者接收到之前创建的 20 个地址之一的付款。

https://api.blockchain.info/v2/receive?xpub=$xpub&callback=$callback_url&key=$key&gap_limit=$gap_limit

xpub -您的 xPub(您希望将付款发送到的位置)

callback_url -收到付款时要通知的回调 URL。记得在调用 create 方法时对回调 url 进行 URL 编码。

key -您的 blockchain.info 接收付款 v2 api 密钥。请求 API 密钥。

gap_limit -可选。在出错之前允许多少个未使用的地址。

使用您的 xPub 派生一个未使用的地址:

curl "https://api.blockchain.info/v2/receive?xpub=xpub6CWiJoiwxPQni3DFbrQNHWq8kwrL2J1HuBN7zm4xKPCZRmEshc7Dojz4zMah7E4o2GEEbD6HgfG7sQid186Fw9x9akMNKw2mu1PjqacTJB2&callback=https%3A%2F%2Fmystore.com%3Finvoice_id%3D058921123&key=[yourkeyhere]"

让您的客户将比特币发送到响应中包含的地址:

响应: 200 OK,应用程序/json { “地址”:“19jJyiC6DnKyKvPg38eBE8R6yCSXLLEjqw”, “索引”:23, “回调”:“https://mystore.com?invoice_id=058921123”

php创建收款地址和回调示例代码

生成一个比特币支付地址

$secret = 'ZzsMLGKe162CfA5EcG6j'

$my_xpub = '{YOUR XPUB ADDRESS}';
$my_api_key = '{YOUR API KEY}';

$my_callback_url = 'https://mystore.com?invoice_id=058921123&secret='.$secret;//支付回调地址

$root_url = 'https://api.blockchain.info/v2/receive';

$parameters = 'xpub=' .$my_xpub. '&callback=' .urlencode($my_callback_url). '&key=' .$my_api_key;

$response = file_get_contents($root_url . '?' . $parameters);

$object = json_decode($response);

echo 'Send Payment To : ' . $object->address;

回调通知处理php示例代码

$real_secret = 'ZzsMLGKe162CfA5EcG6j';
$invoice_id = $_GET['invoice_id']; //invoice_id is passed back to
            the callback URL
$transaction_hash = $_GET['transaction_hash'];
$value_in_satoshi = $_GET['value'];
$value_in_btc = $value_in_satoshi / 100000000;

//Commented out to test, uncomment when live
if ($_GET['test'] == true) {
  return
}

try {
  //create or open the database
  $database = new SQLiteDatabase('db.sqlite', 0666, $error);
} catch(Exception $e) {
  die($error);
}

//Add the invoice to the database
$stmt = $db->prepare("replace INTO invoice_payments (invoice_id,
            transaction_hash, value) values(?, ?, ?)");
$stmt->bind_param("isd", $invoice_id, $transaction_hash,
            $value_in_btc);

if($stmt->execute()) {
  echo "*ok*";
}

我知道答案,我要回答