我是webhooks的新手,每当我推送到我的仓库时,我都会尝试自动部署到我的网站.
我将我的bitbucket repo上的webhook设置为一个包含一个简单的php脚本的URL:
if(isset($_POST['payload'])) {
logMsg("Got stuff\n");
} else {
logMsg("No stuff\n");
}
Run Code Online (Sandbox Code Playgroud)
在我推送到我的仓库之后,webhook将请求脚本正常但没有发送有效负载.我的日志文件总是说"没有东西".
我错过了什么?
我的客户第一次加入我们的下标计划,我创建了一个交易(称为START-transaction),并使用Stripe的API创建新的订阅,并将订阅对象返回存储在上述交易中。
我还使用webhook来捕获Stripe的事件。我最大的目的是处理定期付款(发送有关充电成功或失败的通知,以及与客户互动的信息)。我捕获到事件invoice.payment_succeed以检测到这是账单。我也创建了一个事务(称为RECURRENCE),因此,我将事件对象存储在事务中。(基于事件invoice.payment_succceed中的订阅信息,我找出相对START交易并创建一个新交易,只要RECURRENCE)
问题就暴露出来了,在客户第一次创建计划时,有6个事件被召回我的系统:customer.created; 收费成功;发票已创建;发票。付款成功; 客户卡已创建;客户创建。因此,我的客户第一次有2-transactiona:1-START和1-RECURRENCE。
您是否建议我删除RECURRENCE交易?
谢谢。
在我的Ruby on Rails SaaS应用程序中,用户可以订阅月度或年度计划.我使用Stripe作为支付处理器.Stripe还按月(或每年)处理所有订阅并重新向用户收费.
我也是联盟网络的成员,该网络会收到有关用户每次新订阅/收费的通知,以便广告客户可以获得奖励(如果有的话).这适用于新订阅,因为如果付款通过,Stripe会立即通知我.
但重复订阅付款呢?我必须(并且想)通知我的联盟网络,但是,在我的网络应用程序中,我无法确定是否已经进行了定期付款.我可以假设它将在每个月的24日制作,但这不是肯定的.
Web应用程序是否有更好的方法来检测Stripe成功处理定期付款的时间?我的联盟网络要求我在收费时在前端显示一些小的Javascript片段.
谢谢你的帮助.
当我在google project和API.AI代理上创建操作时,我使用自己的服务来成为API.AI实现webhook.我希望API.AI会调用我的webhook.但是当我通过谷歌上的动作模拟器测试时,API.AI总会返回:
"message": "Unexpected apiai response format: Empty speech response",
"apiResponse": {
"id": "905d5727-bea8-4630-8d3a-e6c173159a94",
"timestamp": "2017-09-28T02:20:06.954Z",
"lang": "en",
"result": {},
"status": {
"code": 206,
"errorType": "partial_content",
"errorDetails": "Webhook call failed. Error: Webhook response was empty."
},
"sessionId": "1506565201634"
}
Run Code Online (Sandbox Code Playgroud)
但是当我检查apache的日志时,API.AI没有调用我的webhook!当我将webhook url替换为firebace功能时,它可以成功运行.但是,如果我使用自己的服务URL作为API.AI webhook url,API.AI无论如何都不会调用webhook.我的服务使用https.
我的Facebook聊天机器人正在工作,但它在我的初始消息发送回来后发回了多条消息.这是我的webhook脚本(我很欣赏它是一个非常粗略的工作示例):
$challenge = $_REQUEST['hub_challenge'];
$verify_token = $_REQUEST['hub_verify_token'];
if ($verify_token === 'MY_VERIFICATION_TOKEN') {
echo $challenge;
}
$input = json_decode(file_get_contents('php://input'), true);
$sender = $input['entry'][0]['messaging'][0]['sender']['id'];
$message = $input['entry'][0]['messaging'][0]['message']['text'];
//API Url
$url = 'https://graph.facebook.com/v2.6/me/messages?access_token=<my-token>';
//Initiate cURL.
$ch = curl_init($url);
//The JSON data.
$jsonData = '{
"recipient":{
"id":"'.$sender.'"
},
"message":{
"text":"Hey Lee!"
}
}';
//Encode the array into JSON.
$jsonDataEncoded = $jsonData;
//Tell cURL that we want to send a POST request.
curl_setopt($ch, CURLOPT_POST, 1);
//Attach our encoded JSON string to the POST fields.
curl_setopt($ch, …Run Code Online (Sandbox Code Playgroud) webhooks facebook-graph-api facebook-messenger facebook-chatbot
我已经使用 WooCommerce 设置了我的第一个 Webhook,以便在下新订单时通知我的数据库服务器。Webhook 已设置并由我的服务器发送/接收 - 我不想编写一个 PHP 页面来解析 Webhook 的有效负载,以便我可以将带有订单详细信息的新记录写入我的 CRM 数据库。
我在获取 Webhook 的内容时遇到问题。根据 WooCommerce 内部 Webhook 的日志,请求详细信息为(我缩写了内容 JSON 数据):
Headers:
user-agent: WooCommerce/2.6.4 Hookshot (WordPress/4.6.1)
content-type: application/json
x-wc-webhook-source: http://example.com/
x-wc-webhook-topic: order.created
x-wc-webhook-resource: order
x-wc-webhook-event: created
x-wc-webhook-signature: xxxxxxxxxxxxxxxxxxx=
x-wc-webhook-id: 3233
x-wc-webhook-delivery-id: 94
Content:
{"order":{"id":3242,"order_number":3242,"order_key":"wc_order_57f1dbe5bcf03","created_at":"2016-10-03T04:17:41Z", .....
Run Code Online (Sandbox Code Playgroud)
它正在执行 POST 请求,但我无法检索 POST 数据,例如
$postData = var_export($_POST, true);
error_log($postData, 0);
Run Code Online (Sandbox Code Playgroud)
不返回任何 JSON 数据。我正在寻求以下方面的帮助:
有人可以提供在ASP.NET中执行此操作的示例.我们想做一些MailCHimp - 内部数据库同步并计划使用webhooks功能执行此操作,但我们无法让它工作.当有人取消订阅邮件黑猩猩时,我们希望使用网络挂钩来同步数据.
要解决的另一件事是安全性.我们如何保护此页面不被恶意用户访问?
为什么我会像这样获得客户ID和发票ID cus_0000000000000和in_0000000000000?在条纹webhook响应中。我正在检查我的帐户中的事件和响应,我得到了200的响应,但是却获得了客户ID和发票ID,为什么?我正在检查发送测试webhook事件,我得到了这样的响应。
public function actionStripeHook() {
if (Yii::app()->request->isPostRequest) {
try {
$postdata = file_get_contents("php://input");
$event = json_decode($postdata);
switch ($event->type) {
case 'invoice.payment_succeeded':
Yii::log('', 'trace', 'stripe');
Yii::log('==================================', 'trace', 'stripe');
Yii::log('==== Event (' . $event->type . ') ====', 'trace', 'stripe');
Yii::log('==================================', 'trace', 'stripe');
$customer_id = $event->data->object->customer;
$customer = Stripe_Customer::retrieve($customer_id);
$invoice = Stripe_Invoice::retrieve($event->data->object->id);
Run Code Online (Sandbox Code Playgroud)
}
我的代码有什么问题,这是我在条纹Webhook端点中的操作,我收到了事件类型invoice.payment_succeeeeeed该事件来自这种情况,但是在我的Response.s中无法正确获取客户ID和发票ID。为什么?
这是来自 Xero 的参数
{"events"=>nil,
"firstEventSequence"=>0,
"lastEventSequence"=>0,
"entropy"=>"KFDXIMNLPDAMRBOEVAVF",
"controller"=>"admin/billing/webhooks",
"action"=>"handle_hook",
"webhook"=>
{"events"=>nil,
"firstEventSequence"=>0,
"lastEventSequence"=>0,
"entropy"=>"KFDXIMNLPDAMRBOEVAVF"}}
Run Code Online (Sandbox Code Playgroud)
我想验证Intent To Receive https://developer.xero.com/documentation/webhooks/configuring-your-server#intent
data = {"events"=>nil, "firstEventSequence"=>0, "lastEventSequence"=>0, "entropy"=>"KFDXIMNLPDAMRBOEVAVF"}
Key = HRj6QPub9BNE4MWewrcLrkKFjpiikV1KrlMZCvDawyDR95MGkkuE2y1DXFP1tifsEWaJygLx6zG0r9rXVTflcg==
Run Code Online (Sandbox Code Playgroud)
下面尝试过
Base64.encode64(OpenSSL::HMAC.digest(OpenSSL::Digest::Digest.new('sha256'), key, data)).strip()
*** TypeError Exception: no implicit conversion of ActionController::Parameters into String
Run Code Online (Sandbox Code Playgroud)
或者
hash = OpenSSL::HMAC.digest('sha256', key, data)
*** TypeError Exception: no implicit conversion of ActionController::Parameters into String
Run Code Online (Sandbox Code Playgroud)
在这里如何实现这一目标?
为了确保您收到的请求来自 Xero,您需要验证 x-xero-signature 标头中提供的签名。创建或重新启用 Webhook 订阅(或更新订阅 URL)时,系统将提示用户启动“接收意图”验证。此验证过程将是对订阅中提供的 url 的一系列 HTTPS POST 请求。
编辑 Rails 正在将空白数组转换为 nil,所以我自己制作了有效负载,根据文档看起来完全相同
data = params[:webhook]
payload = …Run Code Online (Sandbox Code Playgroud)