收藏
回答

企业微信自建应用api收发消息,发送的消息员工无法收到?

/**
     * 验证消息
     *
     */
    public function sendMessageTest()
    {
         include(ROOT_PATH. 'vendor' . DS . 'weworkapi_php-master'. DS . 'callback'. DS . "WXBizMsgCrypt.php") ;
        
        // 假设企业号在公众平台上设置的参数如下
        $encodingAesKey = "J0KQdPFBqMUqg9a7VsOStPxgPCHNiQFkDExdlzgocbd";
        $token = "kWzIUo0nPPN62tPHfWKpVcdORbmKE4f";
        $corpId = "ww07ee28d63a4ce652";
        $agentid = 1000002;
        
        $sReqMsgSig = "457872467db8abb2ca554413ce82037b50ead437";
        
        $sReqTimeStamp = "1676963539";
        
        $sReqNonce = "1677569330";
        
        // post请求的密文数据
     
        $sReqData = "<xml><ToUserName><![CDATA[ww07ee28d63a4ce652]]></ToUserName><Encrypt><![CDATA[cwZU2H5qJeb65R/LQKCmWDIryDo1DwdUnvib/AJAiqVsemmUVcFxkP3mu2k0761gm2do5dHwe3sBCFhIjVF/oHuoyqnCoQW9oyWcIbmK9sLpQzp5fhfLmQ9nxb3rauTxroTwahuZ37nNp12ttiVwR7QajNzK5thkLLrezErVJgPpBiTRIESbXNIlWTDIwbk40szcwPn3v08DPAkvXLPqobRXo2Csrs7+b4cM1IQCLzTlFIJV6SqcfeikjfjNYp7Rcli1k/kiCclobgNvVOJZCyE3n2NzQffbSF3QVSMTSQjMGy8CLtvJPE5nzvcMhV4YnL4QhO87FNwDDbo2HVSpgqrks+Mvx+XlGEQgKakJ6mg9ElVlMeuQsGDfgo4oXw05EjlTq1IKCt8dPMc+9Sk96As6z3fcVcz1smrzLur5GSCkLvUFMhb9KnynVL+C6BUXyV8SvdM1AWwE7//Nd8M9Jw==]]></Encrypt><AgentID><![CDATA[1000002]]></AgentID></xml>";
        
        $sMsg = ""// 解析之后的明文
        $wxcpt = new \WXBizMsgCrypt($token, $encodingAesKey, $corpId);
        $errCode = $wxcpt->DecryptMsg($sReqMsgSig, $sReqTimeStamp, $sReqNonce, $sReqData, $sMsg);
         if ($errCode == 0) {
            try {
                $test = new \SimpleXMLElement($sMsg);
                $sMsg = strval($test->Content);//解析出的明文内容
                $FromUserName = strval($test->FromUserName);//发送消息的人
                $CreateTime = strval($test->CreateTime);
                $MsgId = strval($test->MsgId);
                
            } catch (Exception $e) {
                $Content = "错误!";
            }
        } else {
            print("ERR: " . $errCode . "\n\n");
        }
        $sendText = $sMsg.'是什么';
        // var_dump($sMsg);
        // var_dump($FromUserName);
        // var_dump($CreateTime);
        // var_dump($MsgId);
        
        // die;
        /*
        ------------使用示例三:企业回复用户消息的加密---------------
        企业被动回复用户的消息也需要进行加密,并且拼接成密文格式的xml串。
        假设企业需要回复用户的明文如下:
        
        为了将此段明文回复给用户,企业应:
        1.自己生成时间时间戳(timestamp),随机数字串(nonce)以便生成消息体签名,也可以直接用从公众平台的post url上解析出的对应值。
        2.将明文加密得到密文。
        3.用密文,步骤1生成的timestamp,nonce和企业在公众平台设定的token生成消息体签名。
        4.将密文,消息体签名,时间戳,随机数字串拼接成xml格式的字符串,发送给企业号。
        以上2,3,4步可以用公众平台提供的库函数EncryptMsg来实现。
        */
        
        // 需要发送的明文
        $sRespData = "<xml>
              <ToUserName><![CDATA[{$FromUserName}]]></ToUserName>
              <FromUserName><![CDATA[{$corpId}]]></FromUserName>
              <CreateTime>{$CreateTime}</CreateTime>
              <MsgType><![CDATA[text]]></MsgType>
              <Content><![CDATA[{$sendText}]]></Content>
              <MsgId>{$MsgId}</MsgId>
              <AgentID>{$agentid}</AgentID>
              </xml>";
        $sEncryptMsg = ""; //xml格式的密文
        $errCode = $wxcpt->EncryptMsg($sRespData, $sReqTimeStamp, $sReqNonce, $sEncryptMsg);
        if ($errCode == 0) {
            var_dump($sEncryptMsg);
        	print($sMsg."done \n");
        	// TODO:
        	// 加密成功,企业需要将加密之后的sEncryptMsg返回
        	// HttpUtils.SetResponce($sEncryptMsg);  //回复加密之后的密文
        } else {
        	print("ERR: " . $errCode . "\n\n");
        	// exit(-1);
        }
    }
回答关注问题邀请回答
收藏

1 个回答

登录 后发表内容