为了账号安全,请及时绑定邮箱和手机立即绑定

更新用户以显示他们已付款 - Stripe .Net Core

更新用户以显示他们已付款 - Stripe .Net Core

BIG阳 2024-01-22 15:56:30
我正在开发一个应用程序,允许会员使用 Stripe 预订/支付课程费用。但是,我发现很难更新应用程序来表明用户是否已付款成功。目的是当用户付款时,付款将分配给他们,并且他们能够在其帐户中获取付款列表。下面是我的控制器中的代码:[HttpPost]public IActionResult PaymentSuccess(Event obj, int memberId, int eventId){    // add member to event attendees? if so just call BookEvent above    var eventBook = BookEvent(memberId, eventId);    var result = new { eventBook }; //service.UpdateEventAfterPayment(obj);    return Json(result);}public IActionResult Charge(string stripeEmail, string stripeToken, Event obj){    //var json = await new StreamReader(HttpContext.Request.Body).ReadToEndAsync();     var customers = new Stripe.CustomerService();     var charges = new Stripe.ChargeService();     var customer = customers.Create(new Stripe.CustomerCreateOptions     {       Email = stripeEmail,       Source = stripeToken      }) ;      var charge = charges.Create(new Stripe.ChargeCreateOptions      {        Amount = 300,        Description = "Class Payment",        Currency="gbp",        Customer= customer.Id,        ReceiptEmail= stripeEmail,        Metadata = new Dictionary<string, string>()        {            {"OrderId", "123" },            {"PostCode", "BT480GY" }        }        });        if(charge.Status == "succeeded")        {          string BalanceTransactionId = charge.BalanceTransactionId;          var email = User.FindFirst("sub")?.Value;          var customerPaid = charge.Paid;          customerPaid = true;          return RedirectToAction(nameof(Index));        }          return RedirectToAction(nameof(Index));        }    }我不确定我是否从条带中传递了正确的数据来将付款分配给特定用户,然后他们可以继续查看交易列表。
查看完整描述

2 回答

?
翻翻过去那场雪

TA贡献2065条经验 获得超13个赞

我正在开发一个应用程序,允许会员使用 Stripe 预订/支付课程费用。但是,我发现很难更新应用程序来表明用户是否已付款成功。


目的是当用户付款时,付款将分配给他们,并且他们能够在其帐户中获取付款列表。下面是我的控制器中的代码:


[HttpPost]

public IActionResult PaymentSuccess(Event obj, int memberId, int eventId)

{

    // add member to event attendees? if so just call BookEvent above

    var eventBook = BookEvent(memberId, eventId);

    var result = new { eventBook }; //service.UpdateEventAfterPayment(obj);

    return Json(result);

}


public IActionResult Charge(string stripeEmail, string stripeToken, Event obj)

{

    //var json = await new StreamReader(HttpContext.Request.Body).ReadToEndAsync();

     var customers = new Stripe.CustomerService();

     var charges = new Stripe.ChargeService();


     var customer = customers.Create(new Stripe.CustomerCreateOptions

     {

       Email = stripeEmail,

       Source = stripeToken

      }) ;


      var charge = charges.Create(new Stripe.ChargeCreateOptions

      {

        Amount = 300,

        Description = "Class Payment",

        Currency="gbp",

        Customer= customer.Id,

        ReceiptEmail= stripeEmail,

        Metadata = new Dictionary<string, string>()

        {

            {"OrderId", "123" },

            {"PostCode", "BT480GY" }

        }

        });


        if(charge.Status == "succeeded")

        {

          string BalanceTransactionId = charge.BalanceTransactionId;

          var email = User.FindFirst("sub")?.Value;

          var customerPaid = charge.Paid;

          customerPaid = true;

          return RedirectToAction(nameof(Index));

        }

          return RedirectToAction(nameof(Index));

        }

    }

以下是我的 chtml 文件中的内容:


<div id="eventBook" class="text-center">

                        <form asp-action="Charge" asp-controller="Timetable" method="post">

                            <article>

                                <label>Amount: £3.00</label>

                            </article>

                            <script src="//checkout.stripe.com/v2/checkout.js"

                                    class="stripe-button"

                                    data-key="@Stripe.Value.PublishableKey"

                                    data.locale="auto"

                                    data-description="Class Charge">

                            </script>

                        </form>

                    </div>

我不确定我是否从条带中传递了正确的数据来将付款分配给特定用户,然后他们可以继续查看交易列表。

var customerID = "cus_1234xxx..."; // Retrieved from session or DBvar options = new ChargeListOptions { Limit = 3, Customer = customerID };var service = new ChargeService();
StripeList<Charge> charges = service.List(
  options
);

希望这能说明问题!



查看完整回答
反对 回复 2024-01-22
?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

理想情况下,您不应依赖 Stripe 客户和系统中的用户之间的 1-1 关联。除非您有固定的付款来源,否则不需要 Stripe 客户。即使您这样做,也不一定要求每个用户都有一个 Stripe 客户。

这里更好的方法是记录您端的费用 ID,并将与用户相关联。然后,您应该有一个用于 Stripe 的 Webhook 端点,以便在收费完成时发出通知。当 webhook 被命中时,您可以查找您这边的付款/用户及其关联的费用 ID,并相应地更新任何内容。


查看完整回答
反对 回复 2024-01-22
  • 2 回答
  • 0 关注
  • 102 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信