微信最近開放第三方API接口,申請地址:http://mp.weixin.qq.com/
從微信公眾平臺開通自定義回復(fù)后,就一直在關(guān)注微信接口這一塊,很想用自定義回復(fù)這塊做個站長工具的查詢,例如PR查詢,備案查詢等,輸入網(wǎng)址信息,就能自動獲取PR,獲取備案信息,應(yīng)該是一個不錯的想法。不過以前一直不支持自定義API,只能是一些固定的信息回復(fù)。最近微信公眾平臺終于開放第三方接口了,也就是說,可以根據(jù)用戶提交的信息,來自定義回復(fù)內(nèi)容,非常方便。
站長幫手網(wǎng)官方微信第一時(shí)間開通了自定義回復(fù),大家可以添加站長幫手網(wǎng)微信賬號linkhelper來看看自定義接口的方便性,輸入網(wǎng)址,就能自動回復(fù)網(wǎng)站的PR值。截圖如下:
看到了微信的自定義第三方接口的強(qiáng)大后,下面我們來講講怎么實(shí)現(xiàn)自定義回復(fù)。
首先我們進(jìn)入第三方接口的頁面進(jìn)行注冊,地址:http://mp.weixin.qq.com/cgi-bin/callbackprofile?t=wxm-callbackapi&type=info&lang=zh_CN
URL為你以后的微信自定義回復(fù)生成的地址。Token你可以隨便輸,主要是用來校驗(yàn)當(dāng)前的信息是否為微信提交過來的信息。
如果你的微信接口頁面沒有做好,提交保存的時(shí)候,會提示:驗(yàn)證Token失敗。這個錯誤是因?yàn)椋愕慕涌陧撁孢€沒有反饋正確的信息給微信接口。微信在教程方面還做得不夠成熟,就一個PHP示例,還是有問題的,在下篇文章我會講到這個錯誤在哪。微信官方也沒有跟大家說清楚怎么才能是token驗(yàn)證成功。下面我將給出示例告訴大家如何通過token驗(yàn)證。
譬如:站長幫手網(wǎng)的微信接口頁面是http://wx.linkhelper.cn 默認(rèn)頁面是default.asp,我們只需要把default.asp的代碼改為:
<%response.write request("echostr")%>
然后再在官方提交下保存,提示“驗(yàn)證token成功”。到此為止,第一步我們完成了接口的申請。
上面給大家講了如何申請微信公眾平臺自定義接口,這篇文章講通過實(shí)例,為大家講述如何實(shí)現(xiàn)Hello World的一個簡單的自定義回復(fù)。微信官方不提供ASP代碼實(shí)例。
微信官方提供的PHP代碼示例,$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);通過該代碼可以獲知微信平臺提交過來的信息是一個XML對象。對應(yīng)的ASP代碼的實(shí)現(xiàn)是:
set xml_dom = Server.CreateObject("MSXML2.DOMDocument")
xml_dom.load request
FromUserName=xml_dom.getelementsbytagname("FromUserName").item(0).text
該代碼可以獲取到提交過來的用戶。其他的接收者,微信內(nèi)容都可以該方法獲取到。
這里交大家一個調(diào)試技巧,因?yàn)槲⑿沤涌诖a不好調(diào)試,我們可以通過寫文件的方式,把我們代碼獲取到的內(nèi)容寫入一個文件,以調(diào)試代碼是否正確。代碼如下:
filepath=server.mappath(".")&"\wx.txt"
Set fso = Server.CreateObject("scripting.FileSystemObject")
set fopen=fso.OpenTextFile(filepath, 8 ,true)
fopen.writeline(FromUserName)
set fso=nothing
set fopen=Nothing
最后我們重新組合,并生成對應(yīng)的XML字符串,反饋給微信公眾平臺,用戶就能接受到自定義回復(fù)內(nèi)容了。相關(guān)代碼如下:
strresponse="<xml>"
strresponse=strresponse&"<ToUserName><![CDATA["&fromusername&"]]></ToUserName>"
strresponse=strresponse&"<FromUserName><![CDATA["&tousername&"]]></FromUserName>"
strresponse=strresponse&"<CreateTime>"&now&"</CreateTime>"
strresponse=strresponse&"<MsgType><![CDATA[text]]></MsgType>"
strresponse=strresponse&"<Content><![CDATA[Hello World]]></Content>"
strresponse=strresponse&"<FuncFlag>0<FuncFlag>"
strresponse=strresponse&"</xml>"
response.write strresponse
另外請大家注意,ASP文件需要以UTF-8的格式保存,包括頁面編碼也要用UTF-8的格式,否則有可能自定義回復(fù)出現(xiàn)亂碼。
至此,我們就完成了ASP微信公眾平臺自定義接口的一個簡單的自定義回復(fù)。如果對源碼有興趣的,請加站長幫手網(wǎng)官方微信賬號linkhelper,發(fā)送“源碼”或者“例子”獲取下載地址。
將以下代碼保存為weixin.asp放到網(wǎng)站根目錄下即可:
<%@Language="VBScript" CodePage="65001"%>
<%
'**************注意,以下兩行代碼是為了通過微信接口驗(yàn)證的。驗(yàn)證前,請把注釋,兩個單引號去掉。驗(yàn)證通過后,把兩行代碼刪除或者注釋掉。**************
'response.write request("echostr")
'response.end
'**********注意結(jié)束*************
%>
<%
set xml_dom = Server.CreateObject("MSXML2.DOMDocument")
xml_dom.load request
'strxml=xml_dom.xml
FromUserName=xml_dom.getelementsbytagname("FromUserName").item(0).text '發(fā)送者微信賬號
ToUserName=xml_dom.getelementsbytagname("ToUserName").item(0).text '接收者微信賬號。即我們的公眾平臺賬號。
content=xml_dom.getelementsbytagname("Content").item(0).text '微信內(nèi)容
'**************以下代碼為我們組織一個XML輸出,反饋給微信借口
strsend="Hello World" '定義發(fā)送內(nèi)容。
strresponse="<xml>"
strresponse=strresponse&"<ToUserName><![CDATA["&fromusername&"]]></ToUserName>" 'tousername是指接受的微信賬號。即前面我們獲取到的發(fā)送者賬號
strresponse=strresponse&"<FromUserName><![CDATA["&tousername&"]]></FromUserName>" 'FromUserName是發(fā)送者賬號,即我們的工種平臺賬號。
strresponse=strresponse&"<CreateTime>"&now&"</CreateTime>" '時(shí)間。
strresponse=strresponse&"<MsgType><![CDATA[text]]></MsgType>" '發(fā)送類型。text是文本型。具體可以參考微信幫助手冊
strresponse=strresponse&"<Content><![CDATA["&strsend&"]]></Content>" '發(fā)送內(nèi)容
strresponse=strresponse&"<FuncFlag>0<FuncFlag>"
strresponse=strresponse&"</xml>"
response.write strresponse
'*************輸出結(jié)束*******************
'*************注意,以下代碼只是為了調(diào)試作用的,可以刪除*********************
filepath=server.mappath(".")&"\wx.txt"
Set fso = Server.CreateObject("Scripting.FileSystemObject")
set fopen=fso.OpenTextFile(filepath, 8 ,true)
fopen.writeline(strresponse)
set fso=nothing
set fopen=Nothing
'****************注意結(jié)束************************
%>