Как получить ответ от криптовалюты IPN - PullRequest
0 голосов
/ 02 сентября 2018

Мы пытаемся получить оплату с помощью криптовалюты, используя 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());
} 

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

enter image description here

И пытаясь получить данные, когда пользователь щелкает обратно на сайт продавца, я пытался получить данные, используя 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 ]

0 голосов
/ 11 сентября 2018

В соответствии с обновленным ответом, заявленным @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 предназначены для перенаправления пользователя, вы не получите там никакого кода ответа, проверка URL seller's store дает ваш точно такой же 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.

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

0 голосов
/ 04 сентября 2018

Вы не можете использовать 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 В Body данные формы вкладки выбираются с помощью Bulk Edit значения:

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
...