如何捕获Shopify Webhook发送的HTTP POST请求

Gab*_*erg 15 php ruby-on-rails webhooks shopify

我有点像菜鸟,并且不怕承认,我正在研究这个项目作为学习经验,以便通过php和服务器端脚本/处理来改善.

我正试图想出一种方法来使用Shopify,并在每次从我的Shopify购物车完成订单时同时更新关闭服务器数据库.例如,有人从我的在线商店购买了一些东西,我希望它能够更新我的家庭数据库库存,以显示它现在少了一件商品.

我得出的结论是,最好的方法是设置一个webhook通知,将HTTP POST请求发送到我的服务器,然后我让我的服务器捕获POST并将其解析为XML.然后,我将通过将更新我的数据库的php脚本读取XML.

我没有问题的PHP,但我似乎无法弄清楚是如何抓住我的服务器上的webhook.Webhook要求我提供一个发送POST请求的URL,我的问题是你; 什么是网址?

我做了一些研究,发现你可以通过html,php,Access-Control-Allow-Origin等多种方式捕获POST请求.但是,由于我还是新手,我不知道真的明白如何做到这些.我尝试过使用HTML隐藏的动作表单,但似乎无法捕获XML.

我想要做的就是让webhook发送它的POST请求,并将其作为.xml捕获.这样我就可以在每天结束时读取xml,并相应地更新数据库.

如果您能想出更好或更简单的方法,请务必向我提出建议.我希望这是安全的,所以像Access-Control-Allow-Origin这样的方法是不可能的.

tl; dr:我在服务器上需要做什么来捕获webhook通知?我应该在服务器上使用什么脚本来提供给webhook?如何编写回调脚本?

Ben*_*lap 31

http://example.com/whatever.php上创建公共URL ,其中example.com是您的域名,whatever.php是您可以编辑的PHP文件.

然后把这段代码放到whatever.php中:

<?php
$webhookContent = "";

$webhook = fopen('php://input' , 'rb');
while (!feof($webhook)) {
    $webhookContent .= fread($webhook, 4096);
}
fclose($webhook);

error_log($webhookContent);
?>
Run Code Online (Sandbox Code Playgroud)

然后在Shopify管理员中,您可以创建一个新的webhook并将其指向http://example.com/whatever.php,当您点击Shopify管理员中的"测试webhook"按钮时,Shopify将POST到您上面的脚本,这应该反过来将webhook的主体写入PHP错误日志.

  • 如果有人没有工作错误日志文件,那么我们也可以在文本文件中写入所有内容 $content = "some text here".$webhookContent; $fp = fopen($_SERVER['DOCUMENT_ROOT'] ."/myText.txt","wb"); fwrite($fp,$content); fclose($fp); (2认同)
  • 您如何使用公共可用的http网址解决安全问题?我的意思是有一种方法只允许Webhooks发布到这个网址,任何其他点击这个网址应该被忽略? (2认同)
  • @RohitGupta规范的方法是[验证POST的HMAC摘要](https://docs.shopify.com/api/guides/webhooks#verify-webhook).或者,您可以在Shopify中设置webhook时添加"秘密"URL参数,然后检查脚本以确保参数存在且具有正确的值. (2认同)