日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

企业微信加密消息体_微信公众平台开发者中心安全模式消息体加解密实现

發(fā)布時間:2025/3/12 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 企业微信加密消息体_微信公众平台开发者中心安全模式消息体加解密实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

關(guān)鍵字:微信公眾平臺 消息體簽名 消息體加解密 EncodingAESKey 安全模式

一、消息體加解密

微信公眾平臺在配置服務(wù)器時,提供了3種加解密的模式供開發(fā)者選擇,即明文模式、兼容模式、安全模式,選擇兼容模式和安全模式前,需在開發(fā)者中心填寫消息加解密密鑰EncodingAESKey。

明文模式:維持現(xiàn)有模式,沒有適配加解密新特性,消息體明文收發(fā),默認(rèn)設(shè)置為明文模式

兼容模式:公眾平臺發(fā)送消息內(nèi)容將同時包括明文和密文,消息包長度增加到原來的3倍左右;公眾號回復(fù)明文或密文均可,不影響現(xiàn)有消息收發(fā);開發(fā)者可在此模式下進行調(diào)試

安全模式(推薦):公眾平臺發(fā)送消息體的內(nèi)容只含有密文,公眾賬號回復(fù)的消息體也為密文,建議開發(fā)者在調(diào)試成功后使用此模式收發(fā)消息

什么是EncodingAESKey?

微信公眾平臺采用AES對稱加密算法對推送給公眾帳號的消息體對行加密,EncodingAESKey則是加密所用的秘鑰。公眾帳號用此秘鑰對收到的密文消息體進行解密,回復(fù)消息體也用此秘鑰加密。AES對稱加密算法的原理可以參考 http://www.cnblogs.com/txw1958/p/aes.html

加解密的詳細(xì)技術(shù)方案可以參考官方文檔 http://mp.weixin.qq.com/wiki/index.php?title=%E6%8A%80%E6%9C%AF%E6%96%B9%E6%A1%88

二、開發(fā)實現(xiàn)及數(shù)據(jù)分析

1. 配置

假設(shè)本次的開發(fā)配置中URL為

http://www.fangbei.org/index.php

接口程序中需要配置以下三項參數(shù)

/*方倍工作室 http://www.cnblogs.com/txw1958/

CopyRight 2014 All Rights Reserved*/

define("TOKEN", "weixin");define("AppID", "wxbad0b45542aa0b5e");define("EncodingAESKey", "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFG");require_once('wxBizMsgCrypt.php');

2. 加解密實現(xiàn)

當(dāng)用戶向公眾賬號發(fā)送消息時,微信公眾賬號將會在URL中帶上signature、timestamp、nonce、encrypt_type、msg_signature等參數(shù),如下所示

http://www.fangbei.org/index.php?signature=35703636de2f9df2a77a662b68e521ce17c34db4&timestamp=1414243737&nonce=1792106704&encrypt_type=aes&msg_signature=6147984331daf7a1a9eed6e0ec3ba69055256154

同時向該接口推送如下XML消息 ,即一個已加密的消息

這時,程序需要從url中獲得以下參數(shù)

$timestamp = $_GET['timestamp'];$nonce = $_GET["nonce"];$msg_signature = $_GET['msg_signature'];$encrypt_type = $_GET['encrypt_type'];

這些參數(shù)將用于加解密過程

收到消息后,先進行解密,解密部分代碼如下

$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];if ($encrypt_type == 'aes'){$pc = new WXBizMsgCrypt(TOKEN, EncodingAESKey,AppID);$this->logger(" D \r\n".$postStr);$decryptMsg = ""; //解密后的明文

$errCode = $pc->DecryptMsg($msg_signature, $timestamp, $nonce, $postStr, $decryptMsg);$postStr = $decryptMsg;

}

解密完成后,把解密內(nèi)容又返回給$postStr,這是為了保證將消息中解密后的內(nèi)容和明文模式時的消息統(tǒng)一,方便后續(xù)處理,解密后的XML如下

1414243737

6074130599188426998

對消息在自己的原來代碼中處理,完成之后,要回復(fù)的消息如下

1414243733

技術(shù)支持 方倍工作室

http://www.fangbei.org/]]>

把上述消息進行加密,返回給微信公眾賬號

//加密

if ($encrypt_type == 'aes'){$encryptMsg = ''; //加密后的密文

$errCode = $pc->encryptMsg($result, $timeStamp, $nonce, $encryptMsg);$result = $encryptMsg;$this->logger(" E \r\n".$result);

}

加密后的內(nèi)容如下

1414243733

這樣,一個安全模式下的加解密消息就完成了。

三、完整代碼

1 <?php2 /*

3 方倍工作室 http://www.cnblogs.com/txw1958/4 CopyRight 2014 All Rights Reserved5 */

6 define("TOKEN", "weixin");7 define("AppID", "wxbad0b45542aa0b5e");8 define("EncodingAESKey", "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFG");9 require_once('wxBizMsgCrypt.php');10

11 $wechatObj = newwechatCallbackapiTest();12 if (!isset($_GET['echostr'])) {13 $wechatObj->responseMsg();14 }else{15 $wechatObj->valid();16 }17

18 classwechatCallbackapiTest19 {20 //驗證簽名

21 public functionvalid()22 {23 $echoStr = $_GET["echostr"];24 $signature = $_GET["signature"];25 $timestamp = $_GET["timestamp"];26 $nonce = $_GET["nonce"];27 $tmpArr = array(TOKEN, $timestamp, $nonce);28 sort($tmpArr);29 $tmpStr = implode($tmpArr);30 $tmpStr = sha1($tmpStr);31 if($tmpStr == $signature){32 echo $echoStr;33 exit;34 }35 }36

37 //響應(yīng)消息

38 public functionresponseMsg()39 {40 $timestamp = $_GET['timestamp'];41 $nonce = $_GET["nonce"];42 $msg_signature = $_GET['msg_signature'];43 $encrypt_type = (isset($_GET['encrypt_type']) && ($_GET['encrypt_type'] == 'aes')) ? "aes" : "raw";44

45 $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];46 if (!empty($postStr)){47 //解密

48 if ($encrypt_type == 'aes'){49 $pc = new WXBizMsgCrypt(TOKEN, EncodingAESKey,AppID);50 $this->logger(" D \r\n".$postStr);51 $decryptMsg = ""; //解密后的明文

52 $errCode = $pc->DecryptMsg($msg_signature, $timestamp, $nonce, $postStr, $decryptMsg);53 $postStr = $decryptMsg;54 }55 $this->logger(" R \r\n".$postStr);56 $postObj = simplexml_load_string($postStr, 'SimpleXMLElement',LIBXML_NOCDATA);57 $RX_TYPE = trim($postObj->MsgType);58

59 //消息類型分離

60 switch ($RX_TYPE)61 {62 case "event":

63 $result = $this->receiveEvent($postObj);64 break;65 case "text":

66 $result = $this->receiveText($postObj);67 break;68 }69 $this->logger(" R \r\n".$result);70 //加密

71 if ($encrypt_type == 'aes'){72 $encryptMsg = ''; //加密后的密文

73 $errCode = $pc->encryptMsg($result, $timeStamp, $nonce, $encryptMsg);74 $result = $encryptMsg;75 $this->logger(" E \r\n".$result);76 }77 echo $result;78 }else{79 echo "";80 exit;81 }82 }83

84 //接收事件消息

85 private function receiveEvent($object)86 {87 $content = "";88 switch ($object->Event)89 {90 case "subscribe":

91 $content = "歡迎關(guān)注方倍工作室 ";92 break;93 }94

95 $result = $this->transmitText($object, $content);96 return $result;97 }98

99 //接收文本消息

100 private function receiveText($object)101 {102 $keyword = trim($object->Content);103 if (strstr($keyword, "文本")){104 $content = "這是個文本消息";105 }else if (strstr($keyword, "單圖文")){106 $content = array();107 $content[] = array("Title"=>"單圖文標(biāo)題", "Description"=>"單圖文內(nèi)容", "PicUrl"=>"http://discuz.comli.com/weixin/weather/icon/cartoon.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958");108 }else if (strstr($keyword, "圖文") || strstr($keyword, "多圖文")){109 $content = array();110 $content[] = array("Title"=>"多圖文1標(biāo)題", "Description"=>"", "PicUrl"=>"http://discuz.comli.com/weixin/weather/icon/cartoon.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958");111 $content[] = array("Title"=>"多圖文2標(biāo)題", "Description"=>"", "PicUrl"=>"http://d.hiphotos.bdimg.com/wisegame/pic/item/f3529822720e0cf3ac9f1ada0846f21fbe09aaa3.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958");112 $content[] = array("Title"=>"多圖文3標(biāo)題", "Description"=>"", "PicUrl"=>"http://g.hiphotos.bdimg.com/wisegame/pic/item/18cb0a46f21fbe090d338acc6a600c338644adfd.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958");113 }else if (strstr($keyword, "音樂")){114 $content = array();115 $content = array("Title"=>"最炫民族風(fēng)", "Description"=>"歌手:鳳凰傳奇", "MusicUrl"=>"http://121.199.4.61/music/zxmzf.mp3", "HQMusicUrl"=>"http://121.199.4.61/music/zxmzf.mp3");116 }else{117 $content = date("Y-m-d H:i:s",time())."\n".$object->FromUserName."\n技術(shù)支持 方倍工作室";118 }119

120 if(is_array($content)){121 if (isset($content[0])){122 $result = $this->transmitNews($object, $content);123 }else if (isset($content['MusicUrl'])){124 $result = $this->transmitMusic($object, $content);125 }126 }else{127 $result = $this->transmitText($object, $content);128 }129 return $result;130 }131

132 //回復(fù)文本消息

133 private function transmitText($object, $content)134 {135 $xmlTpl = "136 137 138 %s139 140 141 ";142 $result = sprintf($xmlTpl, $object->FromUserName, $object->ToUserName, time(), $content);143 return $result;144 }145

146 //回復(fù)圖文消息

147 private function transmitNews($object, $newsArray)148 {149 if(!is_array($newsArray)){150 return;151 }152 $itemTpl = "153 154 155 156 157 158 ";159 $item_str = "";160 foreach ($newsArray as $item){161 $item_str .= sprintf($itemTpl, $item['Title'], $item['Description'], $item['PicUrl'], $item['Url']);162 }163 $xmlTpl = "164 165 166 %s167 168 %s169 170 $item_str171 ";172

173 $result = sprintf($xmlTpl, $object->FromUserName, $object->ToUserName, time(), count($newsArray));174 return $result;175 }176

177 //回復(fù)音樂消息

178 private function transmitMusic($object, $musicArray)179 {180 $itemTpl = "181 182 183 184 185 ";186

187 $item_str = sprintf($itemTpl, $musicArray['Title'], $musicArray['Description'], $musicArray['MusicUrl'], $musicArray['HQMusicUrl']);188

189 $xmlTpl = "190 191 192 %s193 194 $item_str

195 ";196

197 $result = sprintf($xmlTpl, $object->FromUserName, $object->ToUserName, time());198 return $result;199 }200

201 //日志記錄

202 public function logger($log_content)203 {204 if(isset($_SERVER['HTTP_APPNAME'])){ //SAE

205 sae_set_display_errors(false);206 sae_debug($log_content);207 sae_set_display_errors(true);208 }else if($_SERVER['REMOTE_ADDR'] != "127.0.0.1"){ //LOCAL

209 $max_size = 500000;210 $log_filename = "log.xml";211 if(file_exists($log_filename) and (abs(filesize($log_filename)) > $max_size)){unlink($log_filename);}212 file_put_contents($log_filename, date('Y-m-d H:i:s').$log_content."\r\n",FILE_APPEND);213 }214 }215 }216 ?>

總結(jié)

以上是生活随笔為你收集整理的企业微信加密消息体_微信公众平台开发者中心安全模式消息体加解密实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 成人涩涩 | 国产探花精品在线 | 国产乱在线| 日韩视频不卡 | 尤物视频在线观看 | 最新av不卡| 久久99精品国产麻豆婷婷洗澡 | 免费爱爱网站 | 国产日本在线播放 | 91视频免费看片 | 日本国产一区二区 | 美国av毛片 | 亚洲中文字幕在线观看 | 日韩av综合网站 | 久久国产一区 | 亚洲欧洲久久 | 88国产精品视频一区二区三区 | 亚洲一级电影 | 制服丝袜先锋 | 亚洲第一在线 | 在线免费看污片 | 亚洲88 | 日本三级久久 | 日韩人妻无码一区二区三区99 | av女优天堂在线观看 | 精品网站999| av每日更新在线观看 | 成人一区二 | 大香伊人久久 | 无码人妻丰满熟妇精品 | 韩国美女av | 黄色在线观看免费视频 | 日本在线网站 | 91午夜在线观看 | 日韩国产欧美在线观看 | 久久艹久久 | 激情777| 亚洲男女激情 | 黄色片成年人 | 日产欧产va高清 | www,色| 久久亚洲精品石原莉奈 | 中文二区 | 国产精品一区二区久久毛片 | 初音未来打屁股 | 色噜噜综合 | 超碰在线观看av | 91免费网站入口 | 黄色成人av在线 | 热久久最新| 日韩a在线播放 | 日韩欧美自拍 | 久久久高清免费视频 | 国产高清视频免费在线观看 | 午夜寂寞福利 | 国产精品蜜 | 黄色变态网站 | 久久乐国产精品 | 欧美视频不卡 | 大伊人久久 | 一卡二卡在线观看 | 97免费视频观看 | 嫩草天堂| 国产精品久久久久久久久借妻 | 极品少妇xxx | 欧美成人精品欧美一级 | 偷偷操av| 偷偷操99 | 白白色在线观看 | 亚洲精品图区 | 成人av无码一区二区三区 | 免费看欧美一级片 | 亚洲成人一级 | 激情网婷婷 | 国产中文欧美日韩在线 | 日韩99| 小泽玛利亚一区二区三区在线观看 | 日韩美女视频网站 | 欧美精品 在线观看 | 五月天综合网 | 成人综合一区 | av在线网址大全 | 男人久久久 | 久久久久久蜜桃一区二区 | 人人干干人人 | 免费国产一区二区 | 操极品女神 | 国产高清免费在线观看 | 中文字幕女同女同女同 | 草草久久久| 超碰伦理| 成人免费观看网站 | 国产精品久久中文字幕 | 国产性生活一级片 | 91美女高潮出水 | caoporn人人| 久久免费高清视频 | 日韩在线欧美 | 欧美人与按摩师xxxx |