[开发:PHP]编写代码以补充游戏和服务中的平衡
#php #payments #bitcoin #apirone

假设您有一个游戏平台或服务,您计划接受加密货币以增强用户的余额。

apirone payment gate has wallets用于组合加密钱包的单独加密货币和accounts。可以通过API请求创建帐户和钱包,在扩展和部署现成的项目时,这非常方便。您也可以在页面上的https://apirone.com/dashboard/create请求完全匿名,您可以根据需要创建尽可能多的钱包和帐户,而无需限制该数字。

Image description

最主要的是将钱包数据保持在安全的地方。

测试钱包:TBTC-BDE1CFC70297E4FF7068334B25986819
传输键:hyl1aqkd5vwdzt1uexgucoxocekug4yc

要为任何金额补充余额,客户只需要查看current rate,付款地址和QR code即可。当以加密货币付款时,没有付款目的或确切的金额,因此该地址用作付款标识符(例如,让我们以比特币区块链为例)。
对于每个用户,我们使用POST request创建一个单独的比特币地址,并具有用户ID,电子邮件或登录名的参数。
另外,您可以添加一个秘密键以提高平台的安全性。

<?php 
$json_data = array ( "callback" => array( 'url'=> 'http://example.com/callback', 'data' => array ( 'user_id' => "1234", 'secret' => "7j0ap91o99cxj8k9"))); 
$wallet = "tbtc-bde1cfc70297e4ff7068334b25986819"; 
$api_base = "https://apirone.com/api/v2/wallets/". $wallet ."/addresses"; 
$curl = curl_init($api_base); 
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-Type: application/json"));
curl_setopt($curl, CURLOPT_POST, 1); 
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($json_data)); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
$http_status_code = curl_getinfo($curl, CURLINFO_HTTP_CODE); 
$response = curl_exec($curl); curl_close($curl); 
$decoded = json_decode($response, true); 
echo "Please send the payment to the following bitcoin address: " . $decoded["address"];
?>

in'url'=>'http://example.com/callback'更改示例链接到我们网站上回调的页面地址。此页面将收到有关传入付款的所有信息。

'user_id'是您客户端的某些标识符。

'Secret'是您创建的秘密代码,在接收付款服务的数据时进行了额外的安全性。

$钱包 - 是我们正在使用的钱包的标识符。
在此示例中,我们使用比特币测试网进行调试,在生产中将其更改为您的钱包。

您可以创建一个无限数量的地址,此外,它们是永恒的。这意味着我们始终监视它们,当收到付款时,我们将所有保存参数通知指定的URL。

在“余额补充”页面上,如果付款自动出现在屏幕上,则可以为客户提供方便。为此,您可以定期请求数据库,并检查是否付款。

回调处理

回调页面用于接收交易数据,并在付款时遵循业务逻辑。 Apirone将我们指定的地址,金额,交易哈希,确认数和数据(user_id and Secret)发送到此页面。数据以JSON格式发送的POST请求发送,该请求更方便,更安全。

<?php
$secret = "7j0ap91o99cxj8k9";

//receive JSON data
$data = file_get_contents('php://input');

if ($data) {
    $params = json_decode($data, true);

    // Checking the secret code
    if ($params["data"]["secret"] !== $secret) die();

    $input_address = $params["input_address"];
    $value_in_satoshi = $params["value"];

    // If the number of confirmations = zero, then we write data into the database but do not pay 

    if ($params["confirmations"] == 0) {

        // Writing data about the transaction and 
        note the invoice status - waiting for payment confirmation

    }

    if ($params["confirmations"] >= 1) {

        // the transaction is confirmed in the network, we answer *ok* to the payment service and replenish the client balance        
        echo "*ok*";
    }
}
?>

P.S。:

我们强烈建议在网络中至少进行一次确认后,如果金额明显大,则在3个确认后进行充电。
我们建议在数据库中存储整数satoshi量,因为浮点值可能导致计算错误。
所有钱包的终点都是相同的,将$钱包参数更改为莱特币,比特币现金,狗狗等。新的加密货币,稳定币和代币将来会出现。

>