C# 尝试使用ASP.NET MVC和C为条带设置web钩子#
我已经实现了一些前端代码,当用户单击checkout按钮时,他们会被重定向到一个条带页面,在那里他们可以输入他们的卡支付详细信息。代码有一个成功的URL和一个失败的URL。如果客户输入有效的付款详细信息-他们被重定向到成功的URL,我需要更新我的数据库,以确保我的后端知道该特定用户已付款,现在可以查看订阅的内容。我正试图设置网络挂钩,以便做到这一点,所以我知道,如果用户已支付,取消等C# 尝试使用ASP.NET MVC和C为条带设置web钩子#,c#,asp.net-mvc,stripe-payments,webhooks,stripe-subscriptions,C#,Asp.net Mvc,Stripe Payments,Webhooks,Stripe Subscriptions,我已经实现了一些前端代码,当用户单击checkout按钮时,他们会被重定向到一个条带页面,在那里他们可以输入他们的卡支付详细信息。代码有一个成功的URL和一个失败的URL。如果客户输入有效的付款详细信息-他们被重定向到成功的URL,我需要更新我的数据库,以确保我的后端知道该特定用户已付款,现在可以查看订阅的内容。我正试图设置网络挂钩,以便做到这一点,所以我知道,如果用户已支付,取消等 using System; using System.IO; using Microsoft.AspNetCor
using System;
using System.IO;
using Microsoft.AspNetCore.Mvc;
using Stripe;
namespace workspace.Controllers
{
[Route("api/[controller]")]
public class StripeWebHook : Controller
{
// You can find your endpoint's secret in your webhook settings
const string secret = "whsec_...";
[HttpPost]
public async Task<IActionResult> Index()
{
var json = await new StreamReader(HttpContext.Request.Body).ReadToEndAsync();
try
{
var stripeEvent = EventUtility.ConstructEvent(json,
Request.Headers["Stripe-Signature"], secret);
// Handle the checkout.session.completed event
if (stripeEvent.Type == Events.CheckoutSessionCompleted)
{
var session = stripeEvent.Data.Object as Checkout.Session;
// Fulfill the purchase...
HandleCheckoutSession(session);
}
else
{
return Ok()
}
}
catch (StripeException e)
{
return BadRequest();
}
}
}
}
使用系统;
使用System.IO;
使用Microsoft.AspNetCore.Mvc;
使用条纹;
命名空间工作区.控制器
{
[路由(“api/[控制器]”)]
公共类StripeWebHook:控制器
{
//您可以在webhook设置中找到端点的秘密
const string secret=“whsec_…”;
[HttpPost]
公共异步任务索引()
{
var json=wait new StreamReader(HttpContext.Request.Body).ReadToEndAsync();
尝试
{
var stripeEvent=EventUtility.ConstructEvent(json,
请求标题[“条带签名”],机密);
//处理checkout.session.completed事件
if(stripeEvent.Type==Events.CheckoutSessionCompleted)
{
var session=stripeEvent.Data.Object作为Checkout.session;
//完成购买。。。
HandleCheckoutSession(session);
}
其他的
{
返回Ok()
}
}
捕获(条带异常e)
{
返回请求();
}
}
}
}
然而,当尝试实现这个时,我会出错,因为我认为上面提供的自定义代码使用.NET核心,而我使用的是完整的.NET框架
有没有办法解决这个问题,或者我做错了什么?这在我的Asp.net Framework 4.7中有效,请尝试下面的webhook代码
[HttpPost]
[Route("api/[controller]/webhook")]
public async Task<HttpResponseMessage> ProcessRequest()
{
var json = await new StreamReader(HttpContext.Current.Request.InputStream).ReadToEndAsync();
try
{
var stripeEvent = EventUtility.ParseEvent(json);
// Handle the event
if (stripeEvent.Type == Events.PaymentIntentSucceeded)
{
var paymentIntent = stripeEvent.Data.Object as PaymentIntent;
// Then define and call a method to handle the successful payment intent.
// handlePaymentIntentSucceeded(paymentIntent);
}
else if (stripeEvent.Type == Events.PaymentMethodAttached)
{
var paymentMethod = stripeEvent.Data.Object as PaymentMethod;
// Then define and call a method to handle the successful attachment of a PaymentMethod.
// handlePaymentMethodAttached(paymentMethod);
}
// ... handle other event types
else
{
// Unexpected event type
Console.WriteLine("Unhandled event type: {0}", stripeEvent.Type);
}
return Request.CreateResponse(HttpStatusCode.OK);
}
catch (StripeException e)
{
return Request.CreateResponse(HttpStatusCode.BadRequest);
}
//Modification and Saving Data
}
[HttpPost]
[路由(“api/[controller]/webhook”)]
公共异步任务ProcessRequest()
{
var json=wait new StreamReader(HttpContext.Current.Request.InputStream).ReadToEndAsync();
尝试
{
var stripeEvent=EventUtility.ParseEvent(json);
//处理事件
if(stripeEvent.Type==Events.PaymentIntentSucceed)
{
var paymentIntent=stripeEvent.Data.Object作为paymentIntent;
//然后定义并调用一个方法来处理成功的支付意图。
//HandlePaymentIntent成功(paymentIntent);
}
else if(stripeEvent.Type==Events.PaymentMethodAttached)
{
var paymentMethod=stripeEvent.Data.Object作为paymentMethod;
//然后定义并调用一个方法来处理PaymentMethod的成功附件。
//附加的HandlePaymentMethod(付款方式);
}
//…处理其他事件类型
其他的
{
//意外事件类型
WriteLine(“未处理的事件类型:{0}”,stripeEvent.type);
}
返回Request.CreateResponse(HttpStatusCode.OK);
}
捕获(条带异常e)
{
返回请求.CreateResponse(HttpStatusCode.BadRequest);
}
//修改和保存数据
}
添加此webhook后,您可以通过此链接在本地进行测试jeremyo,如果可能,您是否可以分享您遇到的错误?如果没有它们,我们将无法准确地提供解决方案。抱歉,这并不是说我每个人都有错误,更重要的是,一旦用户提交了成功的付款,我如何使用stripe创建Webhook?jeremyo,好的,为此,我将首先查看您为创建签出会话而创建的端点。想必你已经建造好了。webhook端点非常相似。我首先复制粘贴端点代码以创建签出会话。然后,将端点位置更改为相关的位置(例如,条带webhook),并再次检查端点是否可以接受POST请求。在此,您可以使用以下指南在本地测试webhook端点: