【问题标题】:handling stripe webhook in multiple stripe account laravel在多个条带帐户 laravel 中处理条带 webhook
【发布时间】:2022-01-21 13:09:50
【问题描述】:

我的网站上有多个条带帐户,每个条带帐户都与一个 webhook 相关联。
我的 webhook 返回 403 错误“未找到与有效负载的预期签名匹配的签名”

我已经检查了 Cashier 中间件及其从 env 文件中获取 webhook 密钥。
由于此项目附加到多个条带帐户,因此我们无法将 webhook 机密存储在 env 文件中。因此,我们将每个条带帐户的 webhook 密钥放在一个表中。

我想从数据库而不是这个配置文件中获取密钥。

是否可以监听多个条带帐户的 webhook?

任何帮助将不胜感激。

【问题讨论】:

  • 这个问题你解决了吗?我面临同样的问题,非常感谢任何见解。
  • 目前我想知道是否唯一的解决方案是每个条带帐户都有一个指向它自己的处理程序的网络挂钩。像endpoint/1endpoint/2 等。就我而言,这涉及重新构建应用程序并为每个新加盟商添加一个端点。
  • 或者可能是单个端点,它需要像 'endpoint/%param%` 这样的参数,并且每个网络挂钩都是 endpoint/1
  • @NorbertNorbertson ,还没有。我暂时放弃了使用 webhook 的想法。但是没有 webhook 真的很难管理。条纹支持建议我改用条纹连接,但由于某种原因我不能使用连接

标签: stripe-payments webhooks laravel-cashier


【解决方案1】:

我不确定这是否是一个好方法,但您可以:

  1. 在结帐时发送元数据,然后将其发布到网络挂钩
  2. 在使用 web hook 键验证帖子是否来自 Stripe 之前,获取 web hook 发布的原始 json。 Stripe.Net 包含一个解析方法和一个构造方法。 Parse 不需要密钥。 Construct 使用密钥来验证帖子是否来自 Stripe。

Stripe.net 也是如此:

string endpointSecret;

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

// convert the json into a stripe event object
var objStripeEvent = EventUtility.ParseEvent(json);
if (objStripeEvent.Type == Events.CheckoutSessionCompleted)
{
   // get the session object and see if it contains the Meta data we passed 
   // in at checkout
   var session = objStripeEvent.Data.Object as Session;
   var met = session.Metadata;
   if (met.ContainsKey("FranchiseGuid"))
   {
       // if the meta data contains the franchise guid get the correct
       // wh secret from the DB
       var FranchiseGuid= new Guid(met["FranchiseGuid"]);
       endpointSecret = _repo.GetWebHookSecret(FranchiseGuid);

    }
 }

// 然后你可以继续使用 Construct 方法来验证帖子,并使用 web hook 所在的 Stripe 帐户的正确密钥。

try
{
  // check if was from Stripe
  var stripeEvent = EventUtility.ConstructEvent(
  json,
  Request.Headers["Stripe-Signature"],
  endpointSecret);

  ---- etc

我已向 Stripe 支持寻求帮助,但他们已承诺会回复我。我会测试上面的,看看它是否有效。我认为这并不理想,因为如果黑客能够获得有效的特许经营指南,他们可能会伪造帖子并向端点发送垃圾邮件。猜测 guid 并不容易,而且这些 id 不能以任何方式公开获得。加上 https 被使用。但这仍然让我感到紧张,因为特许经营指南将是十几个或更多之一。不像为标记为已付款的预订生成并发送一次的预订指南。每次为该特许经营付款时都会发送特许经营指南。

我想我可以使用预订指南,因为这是为每次预订随机生成的。我可以从预订中加入特许经营表并获取网络挂钩秘密。

我们会看看 Stripe 是否会带来一些有用的东西。

【讨论】:

  • 我收到了 Stripe 的回复,他们说我应该为每个特许经营权创建连接帐户,然后我可以使用连接网络挂钩供所有帐户使用。这个网站一旦“连接”类型回传 Stripe 帐号。更多关注..
猜你喜欢
  • 1970-01-01
  • 2016-03-26
  • 2021-06-05
  • 2018-07-26
  • 2020-01-01
  • 2016-12-14
  • 1970-01-01
  • 2018-11-29
  • 2017-01-13
相关资源
最近更新 更多