Как получить ответ от криптовалюты IPN

Мы пытаемся получить оплату с помощью криптовалюты, используя IPP с оплатой по монетам. Мы можем создать запрос и сделать платеж. Тем не менее, он не может получить ответ об ошибке или об ошибке, пока пользователь возвращается на сторону продавца.

Вот как создается запрос на оплату:

public ActionResult IPN()
{                        

    var uri = new UriBuilder("https://www.coinpayments.net/index.php");
    uri.SetQueryParam("cmd", "_pay_auto"); 
    uri.SetQueryParam("merchant", "merchant_key");
    uri.SetQueryParam("allow_extra", "0");
    uri.SetQueryParam("currency", "USD"); 
    uri.SetQueryParam("reset", "1");
    uri.SetQueryParam("success_url", "http://localhost:49725/home/SuccessResponse"); //todo: redirect to confirm success page
    uri.SetQueryParam("key", "wc_order_5b7b84b91a882");
    uri.SetQueryParam("cancel_url", "http://localhost:49725/home/FailiureResponse");
    uri.SetQueryParam("order_id", "36");
    uri.SetQueryParam("invoice", "PREFIX-36");
    uri.SetQueryParam("ipn_url", "http://localhost:49725/?wc-api=WC_Gateway_Coinpayments");
    uri.SetQueryParam("first_name", "John");
    uri.SetQueryParam("last_name", "Smith");
    uri.SetQueryParam("email", "a@a.com");
    uri.SetQueryParam("want_shipping", "1");
    uri.SetQueryParam("address1", "228 Park Ave S&address2");
    uri.SetQueryParam("city", "New York");
    uri.SetQueryParam("state", "NY");
    uri.SetQueryParam("zip", "10003-1502");
    uri.SetQueryParam("country", "US");
    uri.SetQueryParam("item_name", "Order 33");
    uri.SetQueryParam("quantity", "1");
    uri.SetQueryParam("amountf", "100.00000000");
    uri.SetQueryParam("shippingf", "0.00000000");            

    return Redirect(uri.ToString());
} 

Эта информация будет перенаправлена ​​на сайт оплаты монет, после завершения платежа на экране отобразится следующий экран.

введите описание изображения здесь

И пытаясь получить данные, когда пользователь нажимает обратно на сайт продавца, я пытался получить данные, используя Request.Form, но не получая никакого значения в форме.

То же самое, работая с этим кодом woocommerce, но я понятия не имею о PHP и о том, как они с ним работают.

Любая мысль получить ответ IPN?

Примечание. В.NET нет документации по разработке или примера кода для IPN.

Изменить Я пытаюсь получить значение от успеха IPN

Public ActionResult SuccessResponse()
{
    var ipn_version = Request.Form["ipn_version"];
    var ipn_id = Request.Form["ipn_id"];
    var ipn_mode = Request.Form["ipn_mode"];
    var merchant = Request.Form["merchant"];
    var txn_id = Request.Form["txn_id"];
    var status = Request.Form["status"];

    return Content(status);
}

2 ответа

Решение

В соответствии с обновленным ответом, заявленным @Gillsoft AB, вам необходимо использовать действительный IPN-URL с конца кода. Также webhook не будет работать с localhost. Таким образом, вы должны прослушать запрос с живого сервера.

Простейший способ проверить ответ webhook - использовать онлайн-инструмент, такой как Webhook Tester, который предоставит URL-адрес, который необходимо указать в качестве URL-адреса IPN. Каждый раз, когда сервер отправляет данные, вы можете просто просмотреть их в Интернете. Чтобы проверить это, создайте один URL-адрес и задайте его как IPN-URL, как показано ниже:

 uri.SetQueryParam("ipn_url", "https://webhook.site/#/457f5c55-c9ce-4db4-8f57-20194c17d0ae");

После этого запустите цикл оплаты с локального компьютера, сервер платежей отправит уведомление на этот IPN URL.

Убедитесь, что вы правильно поняли! success_url а также cancel_url предназначены для перенаправления пользователей, вы не получите никакого кода ответа, проверка seller's store URL-адрес дает точно такой же URL-адрес, который вы передавали, поэтому рекомендуется использовать уникальные URL-адреса для каждого заказа (т. Е. Добавить идентификатор заказа, наконец, к URL-адресу), что даст вам представление о том, какая оплата заказа была произведена или отменена.

http://localhost:49725/home/SuccessResponse?orderid=123

Чтобы протестировать локальный код, добавьте следующие изменения и разверните его на сервере.

1) Добавьте один новый метод, который будет прослушивать ответ IPN

[ValidateInput(false)]
public ActionResult IPNHandler()
{
    byte[] param = Request.BinaryRead(Request.ContentLength);
    string strRequest = Encoding.ASCII.GetString(param);

    //TODO: print string request 

    //nothing should be rendered to visitor
    return Content(""); 
} 

2) Передайте IPN URL при создании запроса:

public ActionResult IPN()
{                        
    var uri = new UriBuilder("https://www.coinpayments.net/index.php");
    ...
    ..
    uri.SetQueryParam("success_url", "http://localhost:49725/home/SuccessResponse"); 
    uri.SetQueryParam("cancel_url", "http://localhost:49725/home/FailiureResponse");    
    uri.SetQueryParam("ipn_url", "http://localhost:49725/home/IPNHandler");
    ....
    ..
    return Redirect(uri.ToString());
}

Вы получите все ответы кода статуса в IPNHandler метод.

Надеюсь это поможет!

Вы не можете использовать localhost для обратного вызова IPN. Вы должны использовать публичное доменное имя.

В качестве примера я бы изменил следующие параметры:

var uri = new UriBuilder("https://www.coinpayments.net/api.php"); 
uri.SetQueryParam("success_url", "http://kugugshivom-001-site1.atempurl.com/Home/SuccessResponse");
uri.SetQueryParam("cancel_url", "http://kugugshivom-001-site1.atempurl.com/Home/FailiureResponse");
uri.SetQueryParam("ipn_url", "http://kugugshivom-001-site1.atempurl.com/Home/CoinPaymentsIPN"); // Public ActionResult CoinPaymentsIPN()

Поскольку вы создаете свой собственный шлюз, вам также необходимо правильно его реализовать, как описано в документации по CoinPayments API и уведомлениям о мгновенных платежах (IPN).

Я проверил вашу конечную точку success_url и получил код состояния: 100 (при вводе статуса:100). Я вижу, вы используете данные формы, но я не знаю, специально ли это / требуется.

Почтальон почт http://kugugshivom-001-site1.atempurl.com/Home/SuccessResponse На вкладке " Тело " данные формы выбираются с помощью значения " Массовое редактирование":

ipn_version:1.0
ipn_type:api
ipn_mode:hmac
ipn_id:your_ipn_id
merchant:your_merchant_id
txn_id:your_transaction_id
status:100
Другие вопросы по тегам