微信初步开发 个人整理

首先这是微信公众平台的地址:https://mp.weixin.qq.com  //我们可以在这里先了解微信的一些基本功能,比如说我们先做个自定义菜单,自动回复等小功能

注册登录进入主页面 后很明显能看到 可以设置自动回复以及菜单,非常简单 在这里就不多说啦 。

下面我们应该看到的是开发者工具,就能看到开发文档以及测试工具,再往下看 接口权限 ,只有一些基本权限,所以呢 这里我们可以了解下基本功能。

我们如果要做一些功能的话 我们可以看到 基本都需要token 所以第一步就是获取token

点击 开始开发-》获取token  我们可以看到获取token的方法 需要注意的是 我们刚才看权限时 看到过token每天只能有2000次所以我们需要省着用 而每次有效期为2小时也就是7200秒所以我们获取一次token后就可以存一下等7200秒后我们再重新获取这样就可以节省次数了

获取 token的路径为

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
参数说明
参数是否必须说明
grant_type获取access_token填写client_credential
appid第三方用户唯一凭证
secret第三方用户唯一凭证密钥,即appsecret
这是参数说明

返回说明

正常情况下,微信会返回下述JSON数据包给公众号:

{"access_token":"ACCESS_TOKEN","expires_in":7200}
参数说明
access_token获取到的凭证
expires_in凭证有效时间,单位:秒

可以直接测试下

如果我们能够获取到token后我们先实现一个被动发送消息的接口 简单说就是自动回复

打开 消息管理->消息回复-被动回复这里 可以看到可以回复的有很多  我们先看下回复文本的

回复文本消息

<xml>

<ToUserName><![CDATA[toUser]]></ToUserName>

<FromUserName><![CDATA[fromUser]]></FromUserName>

<CreateTime>12345678</CreateTime>

<MsgType><![CDATA[text]]></MsgType>

<Content><![CDATA[你好]]></Content>

</xml>


参数是否必须描述
ToUserName接收方帐号(收到的OpenID)
FromUserName开发者微信号
CreateTime消息创建时间 (整型)
MsgTypetext
Content回复的消息内容(换行:在content中能够换行,微信客户端就支持换行显示)
 

//这里是一个自动回复的简单代码

    <?php    
    $wechatObj = new wechatCallbackapiTest();    
        
    $wechatObj -> responseMsg();    
        
    class wechatCallbackapiTest    
    {    
           public function responseMsg()    
        {    
            //接收用户的消息    
            $postStr = file_get_contents("php://input");    
            //判断是否接收到有效消息    
            if (!empty($postStr))  
            {    
                //解析用户的xml    
                libxml_disable_entity_loader(true);    
                $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);    
                         //消息发送者    
                $fromUsername = $postObj->FromUserName;    
                         //消息接收人    
                $toUsername = $postObj->ToUserName;    
                //消息内容    
                         $keyword = trim($postObj->Content);    
                //消息的类型    
                $msgType=$postObj->MsgType;    
                //当前时时间戳    
                         $time = time();    
                         //如果用户发送的类型是地址位置    
                if($msgType=="location")  
                {    
                    $msgType = "text";    
                    $contentStr="您的所在位置的经度为".$postObj->Location_Y.",纬度为:".$postObj->Location_X."地点是:".$postObj->Label;    
                    $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);    
                    echo $resultStr;    
                }    
                         //如果用户发送的是语音    
                if($msgType=='voice')    
                {    
                    $msgType = "text";    
                                 //将语音转为文字    
                    $contentStr=$postObj->Recognition;    
                    $this->sendNews($contentStr,$fromUsername,$toUsername,$time);    
                }    
                if(!empty($keyword))    
                {    
                    $this->sendNews($keyword,$fromUsername,$toUsername,$time);    
                }    
            }  
            else  
            {    
                echo "";    
                exit;    
            }    
        }    
      
        function sendNews($keyword,$fromUsername,$toUsername,$time)    
        {    
                  //文本消息模板    
            $textTpl = "<xml>    
                        <ToUserName><![CDATA[%s]]></ToUserName>    
                        <FromUserName><![CDATA[%s]]></FromUserName>    
                        <CreateTime>%s</CreateTime>    
                        <MsgType><![CDATA[%s]]></MsgType>    
                        <Content><![CDATA[%s]]></Content>    
                        <FuncFlag>0</FuncFlag>    
                        </xml>";    
            if($keyword == "时间")    
            {    
                $msgType = "text";    
                $contentStr= "当前的时间为".date("Y年m月d日 H时i分s秒",time());    
                $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);    
                echo $resultStr;    
            }    
            else    
            {    
                $msgType = "text";    
                $contentStr= $keyword;    
                $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);    
                echo $resultStr;    
            }    
        }    
    }   


只作为简单的调试用 如有疑问请评论

内容概要:本文详细介绍了一种基于Simulink的表贴式永磁同步电机(SPMSM)有限控制集模型预测电流控制(FCS-MPCC)仿真系统。通过构建PMSM数学模型、坐标变换、MPC控制器、SVPWM调制等模块,实现了对电机定子电流的高精度跟踪控制,具备快速动态响应和低稳态误差的特点。文中提供了完整的仿真建模步骤、关键参数设置、核心MATLAB函数代码及仿真结果分析,涵盖转速、电流、转矩和三相电流波形,验证了MPC控制策略在动态性能、稳态精度和抗负载扰动方面的优越性,并提出了参数自整定、加权代价函数、模型预测转矩控制和弱磁扩速等优化方向。; 适合人群:自动化、电气工程及其相关专业本科生、研究生,以及从事电机控制算法研究与仿真的工程技术人员;具备一定的电机原理、自动控制理论和Simulink仿真基础者更佳; 使用场景及目标:①用于永磁同步电机模型预测控制的教学演示、课程设计或毕业设计项目;②作为电机先进控制算法(如MPC、MPTC)的仿真验证平台;③支撑科研中对控制性能优化(如动态响应、抗干扰能力)的研究需求; 阅读建议:建议读者结合Simulink环境动手搭建模型,深入理解各模块间的信号流向与控制逻辑,重点掌握预测模型构建、代价函数设计与开关状态选择机制,并可通过修改电机参数或控制策略进行拓展实验,以增强实践与创新能力。
### 企业微信公众号开发教程 #### 接入准备 为了顺利开展企业微信公众号的开发工作,个人开发者需先完成一系列准备工作。这包括但不限于注册成为企业微信的服务提供商或获得企业的授权来管理其企业微信账号。此外,还需确保已安装并配置好适合于Java开发的语言环境以及必要的IDE工具。 对于具体的开发框架选择上,推荐使用专门面向微信生态系统的Java SDK——即微信Java开发工具包[^1]。该库集成了多种API接口的支持,使得诸如支付集成、用户交互等功能实现变得更加简便高效。 #### 消息接收与响应机制解析 当涉及到实际的消息传递流程时,理解其中的工作原理至关重要。每当终端用户向关联的企业微信号发出任何形式的信息输入(比如文本消息或是菜单项触发),这些请求会首先进入到腾讯公司的中心化服务平台,在那里被初步加工整理成标准的数据结构后再转发给预先设定好的外部应用服务器地址。后者负责执行特定的应用层逻辑运算,并最终把处理完毕的结果反馈回去显示给前端使用者查看[^2]。 值得注意的是,在设计此类双向通信链路的过程中,应当考虑到可能存在的权限冲突情况。例如某些自定义服务可能会同官方提供的默认选项发生作用范围上的重叠;此时应合理规划各项特性之间的先后顺序关系而非采取一刀切式的覆盖策略[^3]。 #### 安全验证环节说明 最后也是非常重要的一点就是安全校验过程。初次建立连接之前,必须确认来自微信公众平台的通知确实是合法有效的。通常做法是由对方提供一组随机字符串作为挑战码供本地程序计算哈希摘要并与预期值做比较检验。只有当两者完全一致的情况下才允许继续后续的操作步骤,否则立即中断对话防止潜在风险的发生[^4]。 ```java // Java伪代码示例:用于展示如何对接收到的数据进行签名验证 public boolean verifySignature(String token, String timestamp, String nonce, String signature){ // 将token、timestamp、nonce三个参数按字典序排序后拼接起来形成待加密串baseString List<String> list = Arrays.asList(token, timestamp, nonce); Collections.sort(list); StringBuilder baseBuilder = new StringBuilder(); for (String item : list) { baseBuilder.append(item); } String baseString = baseBuilder.toString(); try{ MessageDigest md = MessageDigest.getInstance("SHA-1"); byte[] digestBytes = md.digest(baseString.getBytes()); StringBuffer hexString = new StringBuffer(); for(int i=0; i<digestBytes.length; i++){ String shaHex = Integer.toHexString(digestBytes[i]&0xFF); if(shaHex.length()<2){hexString.append('0');} hexString.append(shaHex); } return hexString.toString().equals(signature.toLowerCase()); }catch(Exception e){ throw new RuntimeException(e); } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值