我在与生产网络服务器相同的服务器上运行GitLab v5.2(/ var/www中的Document Root).
我正在尝试设置一个标准的GitLab Post-Receive Hook,但我发现很少有关于如何设置脚本来处理发布的JSON数据的信息.我不打算做任何自定义的事情,只是开箱即用,我想在我的网站位置接收后接收数据(请记住在同一台服务器上),然后在收到时从origin-master拉出(提供后接收数据源于推送到主分支).这样,在/ var/www中找到的网站总是与主人相同.
有人可以,从帖子数据中给我一个拉动脚本的例子,或者指向我正确的方向让我创建一个?
GitLab Hook请求示例 - 对于那些没有GitLab实例的人,这里是GitLab Post-Receive JSON数据的样子(直接来自GitLab帮助)
{
"before": "95790bf891e76fee5e1747ab589903a6a1f80f22",
"after": "da1560886d4f094c3e6c9ef40349f7d38b5d27d7",
"ref": "refs/heads/master",
"user_id": 4,
"user_name": "John Smith",
"repository": {
"name": "Diaspora",
"url": "git@localhost:diaspora.git",
"description": "",
"homepage": "http://localhost/diaspora",
},
"commits": [
{
"id": "b6568db1bc1dcd7f8b4d5a946b0b91f9dacd7327",
"message": "Update Catalan translation to e38cb41.",
"timestamp": "2011-12-12T14:27:31+02:00",
"url": "http://localhost/diaspora/commits/b6568db1bc1dcd7f8b4d5a946b0b91f9dacd7327",
"author": {
"name": "Jordi Mallach",
"email": "jordi@softcatala.org",
}
},
// ...
{
"id": "da1560886d4f094c3e6c9ef40349f7d38b5d27d7",
"message": "fixed readme",
"timestamp": "2012-01-03T23:36:29+02:00",
"url": "http://localhost/diaspora/commits/da1560886d4f094c3e6c9ef40349f7d38b5d27d7",
"author": {
"name": "GitLab dev user", …Run Code Online (Sandbox Code Playgroud) 我正在研究braintree,我想在我的客户处理定期电子邮件通知,因为我正在使用定期结算,所以每个月都应该将这些自定义通知发送给所有用户.为此,我必须使用webhooks检索当前发生的事件,然后根据webhook的响应发送电子邮件通知.(我认为这只是解决方案,如果有人知道另一种可能的解决方案请建议).我想首先在我的localhost上测试webhooks,并且我尝试创建一个新的webhook并指定localhost路径作为目标来检索webhooks.但这显示错误"目的地未经验证"..........
我的道路是:" http://127.0.0.1:81/webhook/Accept "
我的ruby-on-rails应用程序使用条带进行卡支付.Stripe提供了一些webhooks,通过它可以联系我的应用程序,并提供有关每个事务的详细信息 - 成功或失败.
为此,我在我的控制器中有这样的事情:
class StripeController < ApplicationController
def webhook
data_json = JSON.parse request.body.read
p data_json['data']['object']['customer']
end
Run Code Online (Sandbox Code Playgroud)
我的问题是如何验证此webhook的真实性?根据我的知识和理解,人们很容易模仿这种情况(中间人攻击).
根据Jenkins的bitbucket插件(https://wiki.jenkins-ci.org/display/JENKINS/BitBucket+Plugin)的文档,应该可以通过环境变量$ BITBUCKET_PAYLOAD访问有效负载信息.但是当我在构建中运行命令printenv时,没有名为$ BITBUCKET_PAYLOAD的环境变量,并且没有任何相关内容.因此,我无法访问配置构建所需的信息.
我很困惑为什么Stripe的文档表明customer.subscription.updated当我认为事件不应该被触发时:
subscription对象具有属性current_period_start,current_period_end只要客户成功支付订阅的发票,就会更新这些属性(https://stripe.com/docs/api#subscriptions)该customer.subscription.updated事件的文件说明它......
订阅更改时发生.示例包括从一个计划切换到另一个计划,或将状态从试用切换到活动.
......这意味着如果current_period_start和current_period_end值发生变化会引发事件,但是如果它确实存在或者在这种情况下不确认,则不会确认事件.
然而,这在第三方网页指出,当成功执行了更新它不是提高(https://www.masteringmodernpayments.com/stripe-webhook-event-cheatsheet#8).
但提升这一事件是有道理的......
customer.subscription.updated),那么它将大大简化程序代码,而无需同时监视invoice.payment_succeeded,invoice.created和charge.succeeded.customer.subscription.updated事件.看起来很奇怪,这样一个适当的事件在它应该的时候不会被提出.文档也没有说明何时更新current_period_end和current_period_start值,这限制了它们的实用性.
所以在我的应用程序中,在收到一个invoice.payment_succeeded事件后,我的程序代码如何确定客户的订阅期何时结束呢?
如果我设置一个Stripe Webhook来发送请求,http://my.website.io但由于某种原因,我的服务器当时关闭或以某种方式无法处理请求,Stripe会重试请求吗?或者我是否需要负责轮询它们以确保我的数据副本是最新的?
我在Stripe的文档中找不到有关重试Webhook请求的任何内容(我可以理解为什么他们不会这样做),但我只是想确保我没有错过它.
提前致谢!
我正在使用Laravel cashier 7.0,我想在订阅成功后解雇一些方法.我希望会有一些我可以听的事件,但情况似乎并非如此(除非我错过了它们).
Stripe是我正在使用的支付提供商,如果这有所不同.(stripe-php包.)
我错过了一些明显的东西吗
我知道有很多方法可以做到这一点,但我正在寻找一个优雅的解决方案.
现在我们正在使用Github电子邮件服务,以便我们的团队在进行更改时收到通知.但是,很快Github服务将被弃用.我想知道是否有任何预先存在的服务可以复制Github电子邮件服务产生的行为.这将节省我们很多时间,我们不必为了处理这个webhook而运行服务器.
谢谢
您应该如何处理通过 webhooks 接收的事件可以以随机顺序接收的事实?
例如,给定以下有序事件:
您如何确保接收 CAB 不会导致数据损坏(即数量为 2 而不是 3)?
如果 Event#data 中的 previous_attributes 与当前 state 不对应,您可以拒绝 webhook,但是如果您的本地模型已经更新,您就会被卡住,因为您永远不会发现自己处于 webhook 期望的状态。
或者,您可以使用将任何 webhook 视为检索和更新对象的提示。您只需忽略 webhook 发送的数据并始终检索它。即使您收到按 update/delete/create 排序的事件,它也应该可以工作,因为 update 实际上会创建对象,delete 会删除它,而 create 将无法检索对象并且什么都不做。但是,每次 webhook 将数据作为事件数据提供时,都感觉检索数据是一种资源浪费。
谢谢