c# - 如何从 IPN 加密货币获得响应

标签 c# asp.net-mvc payment-gateway payment coinpayments-api

我们正在尝试使用硬币支付 IPN 接收加密货币付款。我们能够创建请求并能够进行付款。但是,当用户返回到卖家端时,无法获得成功或失败的响应。

付款请求的创建方式如下:

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 获取数据,但没有在表单中获取任何值。

同样的事情,使用this woocommerce code ,但我不知道 PHP 以及他们如何处理它。

有没有想过获得 IPN 响应?

注意:.NET 中没有可用于 IPN 的开发文档或示例代码

编辑 我正在努力从 IPN 的成功中获得值(value)

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);
}

最佳答案

您不能将 localhost 用于 IPN 回调。您必须使用公共(public)域名。

例如,我将更改以下参数:

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 上的文档中的描述正确实现它和 Instant Payment Notifications (IPN) .

我已经测试了您的success_url 端点,并得到状态代码:100(输入状态时:100)。我看到您使用表单数据,但我不知道这是故意的还是必需的。

postman POST http://kugugshivom-001-site1.atempurl.com/Home/SuccessResponseBody 选项卡中,使用 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

关于c# - 如何从 IPN 加密货币获得响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52139451/

相关文章:

asp.net-mvc - 如何将 ViewData 传递给 HandleError View ?

asp.net - 线程、线程池和 Unity 的 ThreadScope

ruby-on-rails - 无法建立与远程服务器的 SSL 连接

payment-gateway - Prestashop:付款方式取决于邮政编码

c# - 有没有比普通 .settings 文件更高级的常用方法来保存应用程序设置?

C# WPF D3(动态数据显示)图表项目

c# - Kestrel 配置使用特定端口 + url

C# mysql插入语句。参数化查询示例?

java - Libgdx:通过post请求重定向到url

c# - 如何在不泄露密码的情况下从 C# 发送电子邮件?