署名付きピンメッセージ通知の送信
以前は釘付けグループのメッセージ通知を送信していたが、設定されたセキュリティポリシーはすべて「カスタムキーワード」であり、釘付けインタフェースもcareが送信した内容にキーワードが含まれているかどうかは分からないようで、ずっとよく動いていたが、週末を過ぎて、意外にも失効し、メッセージが送信できなくなった.そこでまた釘インタフェースのドキュメントを読み直し、署名付きの方法を書いた.
/**
*
* https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq
* @param $access_token , Webhook access_token
* @param $secret , , , SEC
* @param $content , string
*/
public static function curlHttpPOSTToDingTalk($access_token, $secret, $content)
{
$url = 'https://oapi.dingtalk.com/robot/send?';
$body = array(
"msgtype" => "text",
"text" => array("content" => $content),
"at" => array(
"isAtAll" => true
)
);
$timeStamp = floor(microtime(true) * 1000);//
$stringToSign = $timeStamp . "
" . $secret;//
//
$signature = hash_hmac('sha256', $stringToSign, $secret, true);
$query = array(
'access_token' => $access_token,
'timestamp' => $timeStamp,
'sign' => base64_encode($signature)
);
$absURL = $url . http_build_query($query);
$handles = curl_init();// CURL
curl_setopt($handles, CURLOPT_RETURNTRANSFER, 1);// TRUE curl_exec() ,
curl_setopt($handles, CURLOPT_URL, $absURL);// URL
curl_setopt($handles, CURLOPT_POST, 1);
curl_setopt($handles, CURLOPT_HTTPHEADER, array('Content-type: application/json;charset=UTF-8')); //
curl_setopt($handles, CURLOPT_POSTFIELDS, json_encode($body));
$response = curl_exec($handles);// curl
$info = null;
if (!curl_errno($handles)) {
$info = curl_getinfo($handles);
print_r("Took " . $info['total_time'] . " seconds to send a request to " . $info['url'] . " and http code is " . $info['http_code'] . "
");
} else {
print_r("Curl error: " . curl_error($handles) . "
");
}
curl_close($handles);
print_r($response . "
");
}