Как использовать IPN CoinPayments?

Как я могу использовать IPN для валютных платежей? https://www.coinpayments.net/merchant-tools-ipn

Я создал файл и поместил туда код IPN, но что мне нужно сделать, чтобы "запустить форму публикации" этого файла? Нужно ли создавать API?

Что я хотел с IPN, так это то, что, когда выплата была успешной, я выполнял функцию в SQL.

Но если платеж производится кнопкой оплаты валют на моем сайте (настроен с ПОСТОВЫМИ ПОЛЯМИ), то ничего не происходит, даже если указать IPN URL моего сайта

Кто-нибудь может мне помочь?

Код IPN:

 <?php

    $merchant_id = 'mymerchantid';
    $secret = 'mysecretipn';

    $cp_debug_email = 'myemaildebug';

    function errorAndDie($error_msg) {
        global $cp_debug_email;
        if (!empty($cp_debug_email)) {
            $report = 'Error: '.$error_msg."\n\n";
            $report .= "POST Data\n\n";
            foreach ($_POST as $k => $v) {
                $report .= "|$k| = |$v|\n";
            }
            mail($cp_debug_email, 'CoinPayments IPN Error', $report);
        }
        die('IPN Error: '.$error_msg);
    }

    if (!isset($_POST['ipn_mode']) || $_POST['ipn_mode'] != 'hmac') { 
        $ipnmode = $_POST['ipn_mode'];
        errorAndDie("IPN Mode is not HMAC $ipnmode"); 
    } 

    if (!isset($_SERVER['HTTP_HMAC']) || empty($_SERVER['HTTP_HMAC'])) {
        errorAndDie("No HMAC signature sent");
    }

    $merchant = isset($_POST['merchant']) ? $_POST['merchant']:'';
    if (empty($merchant)) {
        errorAndDie("No Merchant ID passed");
    }

    if (!isset($_POST['merchant']) || $_POST['merchant'] != trim($merchant_id)) {
        errorAndDie('No or incorrect Merchant ID passed');
    }

    $request = file_get_contents('php://input');
    if ($request === FALSE || empty($request)) {
        errorAndDie("Error reading POST data");
    }

    $hmac = hash_hmac("sha512", $request, $secret);
    if ($hmac != $_SERVER['HTTP_HMAC']) {
        errorAndDie("HMAC signature does not match");
    }


        // HMAC Signature verified at this point, load some variables. 


        $status = intval($_POST['status']); 
        $status_text = $_POST['status_text'];

        $txn_id = $_POST['txn_id'];
        $currency1 = $_POST['currency1']; 
        $currency2 = $_POST['currency2'];

        $amount1 = floatval($_POST['amount1']); 
        $amount2 = floatval($_POST['amount2']); 

        $order_currency = 'USD'; 
        $order_total = $amount1;

        $subtotal = $_POST['subtotal'];
        $shipping = $_POST['shipping'];


        ///////////////////////////////////////////////////////////////


        // Check the original currency to make sure the buyer didn't change it. 
        if ($currency1 != $order_currency) { 
            errorAndDie('Original currency mismatch!'); 
        }     

        if ($amount1 < $order_total) { 
            errorAndDie('Amount is less than order total!'); 
        } 

        if ($status >= 100 || $status == 2) { 
           //my code SQL
            }
        } else if ($status < 0) { 
            //my code SQL

        } else { 
//my code SQL
            }
        } 
        die('IPN OK'); 

        ?>

Мой код КНОПКИ:

<form action="https://www.coinpayments.net/index.php" method="post">

                        <input type="hidden" name="cmd" value="_pay_simple">

                        <input type="hidden" name="reset" value="1">

                        <input type="hidden" name="merchant" value="mymerchant">

                        <input type="hidden" name="currency" value="USD">

                        <input type="hidden" name="custom" value="<?php echo $value?>">

                        <input type="hidden" name="amountf" value="<?php echo $value?>">

                        <input type="hidden" name="item_name" value="Testing"?>">

                        <input type="hidden" name="invoice" value="Testing">

                        <input type="hidden" name="allow_amount" value="1">

                        <input type="hidden" name="allow_currency" value="1">

                        <input type="hidden" name="allow_currencies" value="BTC,LTC,DOGE,ETH,BCH,DASH,ETC,BCN,POT,XVG,ZEC,ZEN,PPC,BLK,CURE,CRW,DCR,GLD,CLUB,BITB,BRK,CLOAK,DGB,EBST,EXP,FLC,GRS,KMD,KRS,LEC,LSK,MUE,NAV,NEO,NMC,NXT,PINK,PIVX,POA,PROC,QTUM,SMART,SNBL,SOXAX,STEEM,STRAT,SYS,TPAY,TRIG,UBQ,UNIT,VTC,WAVES,XCP,XEM,XMR,XSN,XZC">

                        <input type="hidden" name="success_url" value="mysuccesurl">

                        <input type="hidden" name="cancel_url" value="mycancelurl">

                        <input type="hidden" name="ipn_url" value="myipnurl"> 

                        <input type="hidden" name="email" value="<?php echo getEmail($login)?>">

                        <input type="hidden" name="first_name" value="<?php echo getName($login)?>">

                        <input type="hidden" name="last_name" value="<?php echo getLastName($login)?>">

                        <br>
                        <br>
                        <div align="center">
                            <button class="btn btn-success" type="submit">SUBMIT</button><br>
                        </div>
                    </form>

1 ответ

Убедитесь, что вы обновили скрытое поле ipn_url в вашей форме, указав URL-адрес вашего сервера, который вы хотите использовать в качестве URL-адреса обратного вызова:), как в этой форме ниже.

<form action='https://www.coinpayments.net/index.php' method='post' id='form'>
.....
<input type="hidden" name="ipn_url" value="https://$domain/myIpnPage.php">
.....</form>

просто убедитесь, что вы не запускаете его с localhost, иначе сервер Coinpayment не сможет получить доступ к вашему URL-адресу ipn с вашего компьютера localhost. Вам нужно проверить это на живом сервере.

Есть 2 способа зарегистрировать свою страницу IPN на coinPayments:

1: поместите это в форму

<form action='https://www.coinpayments.net/index.php' method='post' id='form'>
    .....
    <input type="hidden" name="ipn_url" value="https://$domain/myIpnPage.php">
    .....
</form>

2: установка IPN

Вы можете перейти в настройки своей учетной записи -> Настройки продавца -> URL-адрес IPN и добавить его туда, вот статья, которая поможет вам шаг за шагом:

https://blog.coinpayments.net/tutorials/integration/integrating-coinpayments-step-1-account-setup

Чтобы проверить свой IPN, вам нужно будет включить LTCT в качестве принятой монеты в вашем кошельке, они являются тестовыми монетами LTC и ничего не стоят, и вы можете использовать их для покупки / снятия с себя с помощью этих монет.

вы можете следить за этой статьей, чтобы узнать, как:

https://blog.coinpayments.net/tutorials/integration/integrating-coinpayments-step-4-testing-integration

Чтобы получить монеты LTCT, просто войдите в свою учетную запись на Coinpayments, затем перейдите на

https://www.coinpayments.net/help-testnet

в разделе "Как я могу получить монеты Testnet?" На части страницы есть ссылка, по которой вам дадут 20 LTCT для тестирования.

когда происходит какая-либо транзакция, Coinpayments должны отправлять IPN на указанный URL-адрес, вы можете регистрировать все вызовы, выполнив

$postData =file_get_contents("php://input");
file_put_contents("coinpayments.log", $postData, FILE_APPEND);

Я столкнулся с той же проблемой несколько дней назад. Я переключился на API для получения деталей транзакций для идентификатора Tx, который был намного проще, чем IPN. Просто вставьте следующий код в библиотеку Coinpayments coinpayments.inc.php

}

public function GetTransactionInformation($txId) {      
    $req = array(
        'txid' => $txId,

    );
    return $this->api_call('get_tx_info', $req);
}

Теперь для получения деталей просто сделайте

   <?php
  require('./coinpayments.inc.php');
    $cps = new CoinPaymentsAPI();
   $cps->Setup('Your_Private_Key', 'Your_Public_Key');
   $result = $cps->GetTransactionInformation('The_TX_ID');
    //get the array info of transaction
    if ($result['error'] == 'ok') {
    print_r ($result);
 } else {
    print 'Error: '.$result['error']."\n";
 }
    ?> 

Вы должны получить результат в массиве. Для получения в выводе Json просто замените

 print_r ($result);

С

print $result['result']['status']

Заменить статус разными массивами. Я полагаю, что это решило вашу проблему без проблем в IPN. Этот метод также позволяет совершать транзакции на вашем веб-сайте, а не в виде доплат.

Другие вопросы по тегам