如何在WordPress的PHP代码中构造含attachments的JSON发送至Slack Webhook
问题:如何在PHP中构造包含attachments数组的Slack Webhook JSON结构?
我明白你熟悉JavaScript里的对象与数组写法,刚用PHP构造要转成JSON的结构时确实容易搞混——毕竟PHP的数组同时承担了JS里数组和对象的角色。你现在需要把原来直接放在text里的内容移到attachments数组的对象中,同时保留顶部的提示文本,咱们一步步来改:
核心思路
在PHP里:
- 关联数组(键为字符串的数组)会被
json_encode转成JSON的对象 - 数字索引的数组会被转成JSON的数组
所以你的目标JSON里的attachments是一个数组,里面包含一个对象,对应到PHP里就是:一个数组,里面嵌套一个关联数组。
修改后的完整代码
// 构造要转成JSON的PHP数组结构 $data = json_encode(array( "username"=> "Email Notifier", "mrkdwn"=> true, "icon_emoji"=> ":email:", "text" => "You have received a new message!", "attachments" => array( array( "text" => "*Name:* {$posted_data["your-name"]}\n*Email:* {$posted_data["your-email"]}\n*Subject:* {$posted_data["your-subject"]}\n*Message:*\n >{$posted_data["your-message"]}", "fallback" => "Required plain-text summary of the attachment.", "color" => "#36a64f" ) ) )); // Curl发送部分保持不变 $ch = curl_init("https://hooks.slack.com/services/Txxxxxx/Bxxxxxx/xxxxxxxxxxxxxxx"); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt( $ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json')); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT ,5); curl_setopt($ch, CURLOPT_TIMEOUT, 5); $result = curl_exec($ch); curl_close($ch); return $result;
关键部分说明
- 新增的
"attachments"键对应的值是一个数组(外层array()),这个数组里放了一个关联数组(内层array()),对应你目标JSON里的attachments数组中的单个对象 - 原来的用户提交内容,现在从顶层
text移到了attachments数组里的那个对象的text字段中 - 顶层的
text改成了你想要的提示语:"You have received a new message!"
这样json_encode之后,就会生成你想要的目标JSON结构啦。
内容的提问来源于stack exchange,提问作者tobiasg
相关产品推荐
相关产品推荐

