当前位置: 首页 > 后端技术 > PHP

微信消息处理

时间:2023-03-29 22:59:32 PHP

配置首先登录微信公众平台https://mp.weixin.qq.com,在开发->基本配置中填写服务器配置(接收和处理微信消息的地址),保存您的配置,并添加解密所需。微信服务器在验证开发者提交的信息后,会向填写的服务器地址的URL发送GET请求。GET请求携带参数如下表:参数说明签名微信加密签名,签名结合token开发者填写的参数和请求时间戳参数中的值,nonce参数。timestamptimestampnoncerandomnumberechostrrandomstring开发者通过检查签名来验证请求(验证方式如下所示)。如果确认GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。加密/验证过程如下:将token、timestamp、nonce三个参数按字典顺序排序,将三个参数字符串拼接成一个字符串进行sha1加密,将开发者得到的加密字符串与签名进行比对识别来自微信的请求publicfunctionvalidate(){$echoStr=Input::get('echostr');如果(!empty($echoStr)){$signature=Input::get('signature');$timestamp=输入::get('timestamp');$nonce=Input::get('nonce');$tmpArr=['你配置的令牌',$timestamp,$nonce];排序($tmpArr);$tmpStr=内爆('',$tmpArr);$tmpStr=sha1($tmpStr);如果($tmpStr==$signature){echo$echoStr;出口;}}}PHP示例代码下载:下载消息加解密微信官方文档:加解密技术方案首先获取微信发送的XML数据:$xmlString=file_get_contents("php://input");使用下载的示例代码解密消息://提供提取消息格式的密文XmlParseclassinxmlparse.php$secretData=(newXmlParse())->extract($xmlString);//解密密文Prpcryptclass在pkcs7Encoder.php$result=(newPrpCrypt('EncodingAESKeyyouconfigured'))->decrypt($secretData[1]);之后根据具体业务实现:$xmlFormatData=simplexml_load_string($result[1],'SimpleXMLElement',LIBXML_NOCDATA);$event=(string)$xmlFormatData->事件;$eventKey=isset($xmlFormatData->EventKey)?(string)$xmlFormatData->EventKey:'';$openId=(string)$xmlFormatData->FromUserName;$toUserName=(string)$xmlFormatData->ToUserName;//事件处理if($event==='VIEW'||$event=="CLICK"){//自定义菜单事件}if(!$eventKey&&$event=="subscribe"){//扫描公众号二维码关注事件}if($eventKey&&$event=="subscribe"){//扫描二维码关注event}if($eventKey&&$event=="SCAN"){//扫描生成的二维码}if($event=="unsubscribe"){//Unsubscribeevent}if($event==='card_pass_check'||$event==='card_not_pass_check'){//卡券验证通过或失败事件}if($event==='user_get_card'){//卡券领取事件}if($event==='user_consume_card'){//卡验证事件}//其他事件不处理returnfalse;当需要发送加密消息时:$wxBizMsg=newWxBizMsgCrypt('YourconfiguredToken','YourConfiguredEncodingAESKey','Your公众号APPID');//加密消息,传递引用$encryptMsg='';//未加密的消息是XML格式的字符串echo$wxBizMsg->encryptMsg('未加密消息',time(),str_random(16),$encryptMsg);如果服务器不能保证在五秒内处理并回复,则必须进行如下回复,这样微信服务器就不会再响应了,不会做任何处理,也不会发起重试(此时可以使用异步回复的客服消息接口),否则会出现严重错误信息。详见如下说明:直接回复成功(推荐方式)直接回复空字符串(指字节长度为0的空字符串,而不是XML结构中的空内容字段),一旦出现以下情况遇到,微信会在公众号会话期间向用户发出系统提示“公众号服务暂时不可用,请稍后再试”:开发者5秒内未回复任何内容开发者回复异常数据,如JSON数据等具体的XML格式,参见:被动回复用户消息