署名付きピンメッセージ通知の送信


以前は釘付けグループのメッセージ通知を送信していたが、設定されたセキュリティポリシーはすべて「カスタムキーワード」であり、釘付けインタフェースも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 . "
"); }