微信二次开发自定义接受事件推送的代码

本文介绍了一段用于微信公众号自动验证签名、接收并处理消息的PHP代码,包括事件订阅处理、文本、音乐和图文消息的响应。
  1. <?php  
  2.   
  3. /** 
  4.   * wechat php test 
  5.   */  
  6.   
  7. //define your token  
  8. define("TOKEN", "<span style="color:#ff0000;">xxxxx</span>");  
  9. $wechatObj = new wechatCallbackapiTest();  
  10. $wechatObj->responseMsg();  
  11.   
  12. class wechatCallbackapiTest {  
  13.     public function valid() {  
  14.         $echoStr = $_GET["echostr"];  
  15.   
  16.         //valid signature , option  
  17.         if ($this->checkSignature()) {  
  18.             echo $echoStr;  
  19.             exit;  
  20.         }  
  21.     }  
  22.   
  23.     public function responseMsg() {  
  24.         //get post data, May be due to the different environments  
  25.         $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];  
  26.   
  27.         //extract post data  
  28.         if (!empty ($postStr)) {  
  29.   
  30.             $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);  
  31.             $fromUsername = $postObj->FromUserName;  
  32.             $toUsername = $postObj->ToUserName;  
  33.             $keyword = trim($postObj->Content);  
  34.             $Event = trim($postObj->Event);  
  35.             $time = time();  
  36.             $textTpl = "<xml>  
  37.                         <ToUserName><![CDATA[%s]]></ToUserName>  
  38.                         <FromUserName><![CDATA[%s]]></FromUserName>  
  39.                         <CreateTime>%s</CreateTime>  
  40.                         <MsgType><![CDATA[%s]]></MsgType>  
  41.                         <Content><![CDATA[%s]]></Content>  
  42.                         <FuncFlag>0</FuncFlag>  
  43.                         </xml>";  
  44.             //测试事件推送  
  45.             if($Event=="subscribe"){  
  46.                 $contentStr = "欢迎订阅果晶晶网络科技有限公司公众平台!";  
  47.                 $msgType = "text";  
  48.                 $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);  
  49.                 echo $resultStr;  
  50.             }  
  51.             //test  
  52.             if($keyword==1){//文本  
  53.                 $contentStr = $keyword . "测试发送文本!";  
  54.                 $msgType = "text";  
  55.                 $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);  
  56.                 echo $resultStr;  
  57.             }else if($keyword==2){//音乐  
  58.                 $textTpl="<xml>  
  59.                          <ToUserName><![CDATA[%s]]></ToUserName>  
  60.                          <FromUserName><![CDATA[%s]]></FromUserName>  
  61.                          <CreateTime>%s</CreateTime>  
  62.                          <MsgType><![CDATA[%s]]></MsgType>  
  63.                          <Music>  
  64.                          <Title><![CDATA[%s]]></Title>  
  65.                          <Description><![CDATA[%s]]></Description>  
  66.                          <MusicUrl><![CDATA[%s]]></MusicUrl>  
  67.                          <HQMusicUrl><![CDATA[%s]]></HQMusicUrl>  
  68.                          </Music>  
  69.                          <FuncFlag>0</FuncFlag>  
  70.                          </xml>";  
  71.                   
  72.                 $msgType = "music";  
  73.                 $msgtitle="致青春";  
  74.                 $Description="电影《致我们终将逝去的青春》 主题曲";  
  75.                 $MusicUrl="http://music.baidu.com/song/40153340#";  
  76.                 $HQMusicUrl="http://music.baidu.com/song/40153340#";  
  77.                 $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $msgtitle,$Description,$MusicUrl,$HQMusicUrl);  
  78.                 echo $resultStr;  
  79.             }else if($keyword==3){//图文  
  80.                 $textTpl="<xml>  
  81.                          <ToUserName><![CDATA[%s]]></ToUserName>  
  82.                          <FromUserName><![CDATA[%s]]></FromUserName>  
  83.                          <CreateTime>%s</CreateTime>  
  84.                          <MsgType><![CDATA[%s]]></MsgType>  
  85.                          <ArticleCount>1</ArticleCount>  
  86.                          <Articles>  
  87.                          <item>  
  88.                          <Title><![CDATA[%s]]></Title>   
  89.                          <Description><![CDATA[%s]]></Description>  
  90.                          <PicUrl><![CDATA[%s]]></PicUrl>  
  91.                          <Url><![CDATA[%s]]></Url>  
  92.                          </item>  
  93.                          </Articles>  
  94.                          <FuncFlag>1</FuncFlag>  
  95.                          </xml> ";  
  96.                   
  97.                 $msgType = "news";  
  98.                 $title1="致青春";  
  99.                 $Description="电影《致我们终将逝去的青春》 主题曲";  
  100.                 $PicUrl="http://img10.360buyimg.com/da/g13/M05/01/02/rBEhU1G6iA8IAAAAAADmPyFSPhUAAANiwAxLNcAAOZX575.jpg";  
  101.                 $Url="http://sale.jd.com/act/qYHkylDS0LVOg.html?sid=2&cid=601&aid=3678&bid=661&unit=36617&advid=60724&guv=";  
  102.                 $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $title1,$Description,$PicUrl,$Url);  
  103.                 echo $resultStr;  
  104.             }  
  105.             //  
  106.             if (!empty ($keyword)) {  
  107.   
  108.                 $contentStr = $keyword . "Welcome to wechat world!";  
  109.   
  110.                 $msgType = "text";  
  111.   
  112.                 $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);  
  113.                 echo $resultStr;  
  114.             } else {  
  115.                 echo "Input something...";  
  116.             }  
  117.   
  118.         } else {  
  119.             echo "";  
  120.             exit;  
  121.         }  
  122.     }  
  123.   
  124.     private function checkSignature() {  
  125.         $signature = $_GET["signature"];  
  126.         $timestamp = $_GET["timestamp"];  
  127.         $nonce = $_GET["nonce"];  
  128.   
  129.         $token = TOKEN;  
  130.         $tmpArr = array (  
  131.             $token,  
  132.             $timestamp,  
  133.             $nonce  
  134.         );  
  135.         sort($tmpArr);  
  136.         $tmpStr = implode($tmpArr);  
  137.         $tmpStr = sha1($tmpStr);  
  138.   
  139.         if ($tmpStr == $signature) {  
  140.             return true;  
  141.         } else {  
  142.             return false;  
  143.         }  
  144.     }  
  145. }  
  146. ?>  

转载于:https://www.cnblogs.com/YDshuaizai/p/5216327.html

### 企业微信二次开发概述 企业微信作为一款针对企业的即时通讯工具,提供了丰富的API接口支持开发者进行定制化开发。这些API涵盖了消息推送、应用管理、用户管理和群组操作等多个方面[^1]。 #### 主要功能模块 以下是企业微信二次开发的主要功能模块及其对应的API: 1. **消息处理** - 支持接收和发送各种类型的消息,包括文本、图片、语音、视频、文件等。 - 提供自定义消息模板的功能,允许开发者根据业务需求设计特定格式的通知消息。 2. **应用管理** - 开发者可以通过API实现对企业内部各类应用程序的集成与控制,比如OA审批流程、CRM客户管理系统接入等。 - 应用授权机制确保只有经过许可的应用才能访问敏感数据或执行某些动作。 3. **成员管理** - 获取员工基本信息如姓名、职位、部门归属等;还可以批量导入导出联系人资料。 - 设置权限范围限制不同级别用户的可见性和可操作内容。 4. **群组交互** - 创建/解散工作群聊室,指定管理员角色分配职责权利。 - 邀请他人加入现有会话或者踢除违规参与者。 5. **其他扩展服务** - 日历共享安排会议时间地点提醒等功能; - 文件存储空间上传下载查阅历史版本记录等等实用特性均开放给第三方调用。 下面给出一段简单的Python代码示例来演示如何利用requests库向企业微信服务器发起POST请求从而完成一条普通文字通知的投递任务: ```python import requests import json def send_message(corpid, corpsecret, agentid, touser, content): url_get_token = f"https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={corpid}&corpsecret={corpsecret}" response = requests.get(url=url_get_token).json() access_token = response['access_token'] message_url = f'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={access_token}' data = { "touser": touser, "msgtype":"text", "agentid":agentid , "text":{ "content":content }, "safe":0 } headers={'Content-Type': 'application/json'} res=requests.post(message_url,data=json.dumps(data),headers=headers) return res.json() if __name__ == '__main__': corpid='your_corp_id' corpsecret='your_secret_key' agentid=1000002 touser="ZhangSan|LiSi" msg_content="测试一下能否成功收到此条来自程序端发出的信息哦~" result=send_message(corpid,corpsecret,agentid,touser,msg_content) print(result) ``` 以上脚本实现了基本的企业微信消息发送逻辑,实际项目中可能还需要考虑异常捕获、日志记录等问题以便更好地维护系统稳定性。 ### 注意事项 在正式开展任何有关于企业微信二次开发活动之前,请务必仔细阅读官方文档以充分理解各项条款规定以及技术细节要求。此外也要注意保护好账号信息安全防止泄露造成不必要的损失。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值