Настройка автоматической оплаты SmartHoldem

Тема в разделе "Разработка", создана пользователем admin, 17 дек 2018.

Метки:
  1. admin

    admin Администратор Команда форума

    У монеты SmartHoldem есть API, позволяющее взаимодействовать с локальным и онлайн кошельком. Например, отправка перевода на PHP будет выглядеть так.
    PHP:
    $url 'http://node_ip:6100/api/transactions';
    $data json_encode((object) array(
                
    "secret" => "sender address secret pass phrase",
                
    "amount" => 10000000//0.1 STH in Satoshi
                
    "recipientId" => "Sa9JKodiNeM7tbYjxwEhvvG1kBczhQxTN3"//recipient address
                
    "vendorField" => "any message" // optional
            
    ));


    $ch curl_init();
    curl_setopt($chCURLOPT_URL$url);
    curl_setopt($chCURLOPT_HTTPHEADER, array('Accept: application/json''Content-Type: application/json'));
    curl_setopt($chCURLOPT_HEADER0);
    curl_setopt($chCURLOPT_TIMEOUT30);
    curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
    curl_setopt($chCURLOPT_CUSTOMREQUEST"PUT");
    curl_setopt($chCURLOPT_POSTtrue);
    curl_setopt($chCURLOPT_POSTFIELDS$data);
    $response curl_exec($ch);
    curl_close($ch);

    $result json_decode($responsetrue); //convert to array
    print_r($result); //show result
    Но такой валенок как я не сразу сообразил, как сделать рабочий скрипт. Поэтому решил создать тему с дополнительными пояснениями.

    Для работы с онлайновым кошельком нам нужна нода. Заходим в аккаунт на onlinewallet.smartholdem.io и берем ноду node1.smartholdem.io. При желании ее можно поменять.

    Настройка автоматической оплаты SmartHoldem

    Ни IP, ни порт теперь указывать не нужно. Ссылка будет иметь вид.
    Код:
    $url = 'http://node1.smartholdem.io/api/transactions';
    
    Обращаю внимание, http, а не https. С https почему то не работает.

    Вторая "проблема" - большие числа. Обратите внимание, что 10000000 это всего лишь 0.1 sth, то есть для отправки больше 30 sth тип integer нам уже не подходит. В PHP есть модуль для работы с большими числами - GMP, но отлично подходит и более доступный BC Math. Только строку BC Math надо будет преобразовать в число.

    Итак, рабочий скрипт.
    PHP:
        $url 'http://node1.smartholdem.io/api/transactions';
        
    $secret="ваша секретная фраза";
        
    $sum 1;
        
    $recipient="Кошелек контрагента";
        
    $description='Описание не больше 64 байт';

        
    $amount=bcmul($sum100000000)+0// Преобразуем в сатоши и делаем числом

        
    $data json_encode((object) array( "secret" => $secret"amount" => $amount,  "recipientId" => $recipient"vendorField" => $description ));

        
    $http_header=array('Accept: application/json''Content-Type: application/json');
        
    $ch curl_init();
        
    curl_setopt($chCURLOPT_URL$url);
        
    curl_setopt($chCURLOPT_HTTPHEADER$http_header);
        
    curl_setopt($chCURLOPT_CUSTOMREQUEST'PUT');
        
    curl_setopt($chCURLOPT_POSTFIELDS,$data);
        
    curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
        
    $response curl_exec($ch);
        
    curl_close($ch);

        
    $result json_decode($responsetrue);

        if (
    $response['success'])  // перевод отправлен.
        
    {
               echo 
    '<p>Перевод отправлен, транзакция <a href="https://blockexplorer.smartholdem.io/#/transaction/'.$result['transactionId'].'">'.$result['transactionId'].'</a></p>';
        }