使用PHP进行Webhook处理

时间:2018-09-05 15:02:51

标签: php webhooks

我正在尝试构建一个Webhook接收器。

我创建了这个简单的PHP脚本并将其上传到我的Web主机:

$raw_payload = file_get_contents('php://input', true);
$payload = json_decode($raw_payload, true);

if($payload){
  $myfile = fopen("log.txt", "a+") or die("Unable to open file!");
  fwrite(date('Y-m-d H:i:s', time()).PHP_EOL);
  fclose($myfile);
}

然后,在发送Webhook(实际上是Wekan)的应用程序中,我输入了该文件的URL:

  

http://myurl.com/dir/receiver.php

然后我发送了一些Webhook,但没有任何内容写入该文件。 Webhook正确发送了(我用webhook-tester对其进行了测试,并在那里收到了一些正确的数据,但是在我的php文件中却没有)。

应该发送的Webhook数据看起来像这样(JSON):

{
  text: '{{wekan-username}} moved "{{card-title}}" from "{{old-list-name}}" to "{{new-list-name}}"\nhttp://{{wekan-host}}/b/{{board-id}}/{{board-name}}/{{card-id}}',
  cardId: '{{card-id}}',
  listId: '{{new-list-id}}',
  oldListId: '{{old-list-id}}',
  boardId: '{{board-id}}',
  user: '{{wekan-username}}',
  card: '{{card-title}}',
  description: 'act-moveCard'
} 

我在这里做错了什么? (这可能是我的虚拟主机的问题吗?webhook-tester使用https,但是对于我的php文件Im使用http,这会导致错误吗?)

1 个答案:

答案 0 :(得分:2)

您没有将文件资源句柄传递给fwrite()

然后使您的代码更冗长,并注意错误日志:

<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.min.js"></script>
<div id="app">
    <div v-for="field in fields" :key="field.id">
      <input :type="field.type" :placeholder="field.placeholder" v-model="field.model" :id="field.id" v-if="field.type == 'text'">
      <select v-model="selectedOptionId" :id="field.id" v-if="field.type == 'select'">
        <option v-for="option in field.options" :key="option.id" :value="option.id" :id="option.id">{{option.text}}</option>
      </select>
    </div>
    <p v-if="selectedField" :id="selectedField.id">{{selectedField.text}}</p>
</div>