
如圖企業微信檔案里的第三步,解密訊息的asp代碼怎么寫?前兩步在介面除錯工具里已經測驗通過,求能測驗通過的第三步asp代碼。
uj5u.com熱心網友回復:

為什么加上后面這一行, rand_msg = Wx_AesDecrypt(aes_msg,AESKey,from_appid) ,除錯工具就沒有回傳值了?前面也用了這個函式Wx_AesDecrypt,能正確回傳,后面那行就不行了
不加這一行,rand_msg = Wx_AesDecrypt(aes_msg,AESKey,from_appid),回傳如下圖:

加上這一行,rand_msg = Wx_AesDecrypt(aes_msg,AESKey,from_appid),回傳如下圖:
uj5u.com熱心網友回復:
https://download.csdn.net/download/qq_25398203/10801592uj5u.com熱心網友回復:
我就是下載的這個,前面msg1呼叫可以,后面rand_msg呼叫就不行了,不知道為什么?
uj5u.com熱心網友回復:
你現在拿到的是EncodingAESKey 還是AESKey?uj5u.com熱心網友回復:
現在應該回傳的結果rand_msg應該是下圖的明文字串:

可是介面除錯工具里卻沒有回傳結果
uj5u.com熱心網友回復:
你現在是要解密,你發的是加密程序,感覺你檔案都沒看懂。
這才是解密程序,你應該先取得微信post的過來的xml資料。<Encrypt>里的內容,才是你要解密的字符
uj5u.com熱心網友回復:
微信post的過來的整體xml資料不是加密過的EchoStr嗎?
uj5u.com熱心網友回復:
哪來的echostr?
uj5u.com熱心網友回復:

測驗回呼模式傳過來的echostr啊,跟這個沒關系嗎?服務器端不是接收到echostr、nonce、timestamp、msg_signature嗎?如下圖:

在企業微信里點擊應用傳到服務器的就只是帶頭的xml檔案嗎?沒有像測驗回呼模式的那幾個引數嗎?
uj5u.com熱心網友回復:
你這個只是建立連接而已,被動訊息就如我上面的截圖,你按這個來獲取資料 驗證 解密uj5u.com熱心網友回復:
你這個只是建立連接而已,被動訊息就如我上面的截圖,你按這個來獲取資料 驗證 解密
你好,下圖是我在企業微信里創建的一個選單,功能是相冊或拍照,拍照以后本來應該回傳應用視窗一句話,但是現在沒回傳,請你幫我看看,謝謝。

下面附上我剛組織的代碼,請幫我看看:
<% @@codepage = "65001" %>
<!-- #include file="conn.asp" -->
<!-- #include file="WXAESDeCrypt.asp" -->
<!-- #include file="base64decode.asp" -->
<!-- #include file="sort.asp" -->
<!-- #include file="sha1.asp" -->
<%Response.Charset = "utf-8"
' 初始化
call initCodecs
sql="select * from importent"
set rs=conn.execute(sql)
Token=rs("token")
EncodingAESKey=rs("EncodingAESKey")
from_appid=rs("from_appid")
Echostr = request.QueryString("echostr")
Nonce = request.QueryString("nonce")
Timestamp = request.QueryString("timestamp")
msg_signature = request.QueryString("msg_signature")
'驗證微信介面
If EchoStr<>"" then
'下面進行Token,TimesTamp,Nonce四個引數的字典排序
Myarray=SortPara(Array(Token,TimesTamp,Nonce,Echostr))
For i=0 To Ubound(Myarray)
str=str&Myarray(i)
Next
if Lcase(msg_signature)<>Lcase(hex_sha1(str)) then
response.End()
end if
End if
'**********************************************
set xml_dom = Server.CreateObject("MSXML2.DOMDocument")'此處根據您的實際服務器情況改寫
xml_dom.load request
FromUserName=xml_dom.getelementsbytagname("FromUserName").item(0).text '發送者微信賬號
ToUserName=xml_dom.getelementsbytagname("ToUserName").item(0).text '接收者微信賬號。即我們的公眾平臺賬號。
MsgType=xml_dom.getelementsbytagname("MsgType").item(0).text
if MsgType="text" then
Content=xml_dom.getelementsbytagname("Content").item(0).text
end if
if (MsgType="event") then
strEventType=xml_dom.getelementsbytagname("Event").item(0).text '微信事件
if strEventType="pic_photo_or_album" then '表示彈出拍斬訓者相冊發圖
strsend=gz(FromUserName,ToUserName)
end if
Else
strsend=""
end if
response.Write(strsend)
set xml_dom=Nothing
'*************以下代碼只是為了除錯作用***********
filepath=server.mappath(".")&"\wx.txt"
Set fso = Server.CreateObject("Scripting.FileSystemObject")
set fopen=fso.OpenTextFile(filepath, 8 ,true)
fopen.writeline(strsend)
set fso=nothing
set fopen=Nothing
'****************除錯結束************************
function gz(fromusername,tousername)
gz="<xml>" &_
"<ToUserName><![CDATA["&fromusername&"]]></ToUserName>" &_
"<FromUserName><![CDATA["&tousername&"]]></FromUserName>" &_
"<CreateTime>"&now&"</CreateTime>" &_
"<MsgType><![CDATA[text]]></MsgType>" &_
"<Content><![CDATA[this is a test]]></Content>" &_
"<MsgId>1234567890123456</MsgId>" &_
"<AgentID>1000003</AgentID>" &_
"</xml> "
end function
function text(fromusername,tousername,returnstr)
text="<xml>" &_
"<ToUserName><![CDATA["&fromusername&"]]></ToUserName>" &_
"<FromUserName><![CDATA["&tousername&"]]></FromUserName>" &_
"<CreateTime>"&now&"</CreateTime>" &_
"<MsgType><![CDATA[text]]></MsgType>" &_
"<Content><![CDATA[" & returnstr & "]]></Content>" &_
"<FuncFlag>0<FuncFlag>" &_
"</xml>"
end function
'
%>
uj5u.com熱心網友回復:
'*************以下代碼只是為了除錯作用***********filepath=server.mappath(".")&"\wx.txt"
Set fso = Server.CreateObject("Scripting.FileSystemObject")
set fopen=fso.OpenTextFile(filepath, 8 ,true)
fopen.writeline(xml_dom.xml)
set fso=nothing
set fopen=Nothing
'****************除錯結束************************
以上代碼替換,然后看下wx.txt內容
1.先看看微信post過來的內容,解密過后,才能走下面的操作,
2.你要回復的訊息也是要用同樣的方式加密回給微信的才能通。
uj5u.com熱心網友回復:
'*************以下代碼只是為了除錯作用***********
filepath=server.mappath(".")&"\wx.txt"
Set fso = Server.CreateObject("Scripting.FileSystemObject")
set fopen=fso.OpenTextFile(filepath, 8 ,true)
fopen.writeline(xml_dom.xml)
set fso=nothing
set fopen=Nothing
'****************除錯結束************************
以上代碼替換,然后看下wx.txt內容
1.先看看微信post過來的內容,解密過后,才能走下面的操作,
2.你要回復的訊息也是要用同樣的方式加密回給微信的才能通。
非常感謝,我正在測驗,已經收到xml了,但是我收到的是兩個xml,這是為什么呀?
就像這樣的:
<xml>內容1</xml>
<xml>內容2</xml>
uj5u.com熱心網友回復:
加密解密base64解碼后是二進制。asp不能直接傳遞二進制需要轉換十六進制。然后再拼接。轉換出來xml。我原來自己寫過類。uj5u.com熱心網友回復:
我已經做到這一步了,接下來該發送被動回應訊息包,該怎么做?在線等
<% @@codepage = "65001" %>
<!-- #include file="conn.asp" -->
<!-- #include file="WXAESDeCrypt.asp" -->
<!-- #include file="base64decode.asp" -->
<!-- #include file="sort.asp" -->
<!-- #include file="sha1.asp" -->
<!-- #include file="convert.asp" -->
<!-- #include file="rnd.asp" -->
<!-- #include file="QL.Aes.asp" -->
<%Response.Charset = "utf-8"
' 初始化
call initCodecs
sql="select * from importent"
set rs=conn.execute(sql)
Token=rs("Token")
EncodingAESKey=rs("EncodingAESKey")
from_appid=rs("from_appid")
Nonce = request.QueryString("nonce")
Timestamp = request.QueryString("timestamp")
msg_signature = request.QueryString("msg_signature")
'''''''接收xml包
set xml_dom1 = Server.CreateObject("MSXML2.DOMDocument")'此處根據您的實際服務器情況改寫
xml_dom1.load request
AgentID1=xml_dom1.getelementsbytagname("AgentID").item(0).text '應用id
ToUserName1=xml_dom1.getelementsbytagname("ToUserName").item(0).text '接收者微信賬號。即我們的公眾平臺賬號。
Encrypt1 = xml_dom1.getelementsbytagname("Encrypt").item(0).text
'驗證微信介面
If Encrypt1<>"" then
'下面進行Token,TimesTamp,Nonce四個引數的字典排序
Myarray=SortPara(Array(Token,TimesTamp,Nonce,Encrypt1))
For i=0 To Ubound(Myarray)
str=str&Myarray(i)
Next
if Lcase(msg_signature)<>Lcase(hex_sha1(str)) then
response.End()
end if
End if
''''''''''對密文解密
set xml_dom = Server.CreateObject("MSXML2.DOMDocument")
msg_from = Wx_AesDecrypt(Encrypt1,EncodingAESKey,from_appid) '使用AESKey做AES解密
xml_dom.loadXML msg_from
ToUserName=xml_dom.getelementsbytagname("ToUserName").item(0).text '接收者微信賬號。即我們的公眾平臺賬號
FromUserName=xml_dom.getelementsbytagname("FromUserName").item(0).text
CreateTime=xml_dom.getelementsbytagname("CreateTime").item(0).text
MsgType=xml_dom.getelementsbytagname("MsgType").item(0).text
Content=xml_dom.getelementsbytagname("Content").item(0).text
MsgId=xml_dom.getelementsbytagname("MsgId").item(0).text
AgentID=xml_dom.getelementsbytagname("AgentID").item(0).text
'''''''''驗證recivedid,分辨出是否為企業微信來源
if ToUserName <>from_appid then
Response.end()
end if
''''''組裝被動回復的訊息體
random=gen_key(16)
msg_to="<xml>" &_
"<ToUserName><![CDATA["&FromUserName&"]]></ToUserName>" &_
"<FromUserName><![CDATA["&ToUserName&"]]]></FromUserName>" &_
"<CreateTime>"& now &"]</CreateTime>" &_
"<MsgType><![CDATA[text]]></MsgType>" &_
"<Content><![CDATA[this is a test]]></Content>" &_
"</xml>"
msg_len=len(msg_to)
msg_len_str=len(msg_len)
for i=1 to 4
if len(msg_len_str)<4 then
msg_len_str="0"&msg_len_str '4個位元組的msg長度
end if
next
'''''''拼接明文字串,并加密
rand_msg =random & msg_len_str & msg_to & from_appid
Set aes = new AesClass
With aes
.Key = "1234567812345678"
.IV = "1234567812345678" 'cbc mode only
.Mode = "cbc"
.Padding = "pkcs5"
.Encoding = "gb2312"
msg_encrypt = base64Encode(.Encode(rand_msg)) '要傳輸的密文
End With
''''''計算msg_signature
randnum=gen_key(16)
'下面進行Token,TimesTamp,Nonce四個引數的字典排序
Myarray_to=SortPara(Array(Token,randnum& now & randnum,randnum,msg_encrypt))
For i=0 To Ubound(Myarray_to)
str_to=str_to&Myarray_to(i)
Next
msg_signature_to=hex_sha1(str_to)
xml_to="<xml>" &_
"<Encrypt><![CDATA["&msg_encrypt&"]]></Encrypt>" &_
"<MsgSignature><![CDATA["&msg_signature_to&"]]></MsgSignature>" &_
"<TimeStamp>"&randnum& now & randnum &"</TimeStamp>" &_
"<Nonce><![CDATA["&randnum&"]]></Nonce>" &_
"</xml>"
response.Write(xml_to)
'''*************以下代碼只是為了除錯作用***********
filepath=server.mappath(".")&"\wx.txt"
Set fso = Server.CreateObject("Scripting.FileSystemObject")
set fopen=fso.OpenTextFile(filepath, 8 ,true)
'fopen.writeline(xml_dom.xml)
'fopen.writeline(msg_len & ","& msg_len_str)
fopen.writeline(xml_to)
set fso=nothing
set fopen=Nothing
''''****************除錯結束************************
set xml_dom=Nothing
set xml_dom1=Nothing
%>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/123054.html
標籤:ASP
上一篇:flask插入資料庫遇到問題SET IDENTITY_INSERT video ON
下一篇:HTML中段落首字下沉的實作方法
