我正在尝试构建一个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:
然后我发送了一些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,这会导致错误吗?)
答案 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>