asp 模拟微信公众账号发送信息问题

kakaximu 发布于 2013/05/24 11:31
阅读 3K+
收藏 2

微信返回

{"ret":"-1", "msg":"need post"}

 

'发送消息
Sub sendMsg(tofakeid,content)
	Dim sSendUrl,sendData,referer,TempStr
	
	'sSendUrl = "https://mp.weixin.qq.com/cgi-bin/singlesend?t=ajax-response"	
	'sendData = "tofakeid="&tofakeid&"&type=1&"&token&"&content="&content&"&ajax=1"
	'referer = "https://mp.weixin.qq.com/cgi-bin/singlemsgpage?"&token&"&fromfakeid="&tofakeid&"&msgid=&source=&count=20&t=wxm-singlechat&lang=zh_CN"
	
	sSendUrl =	"https://mp.weixin.qq.com/cgi-bin/singlesend?t=ajax-response&lang=zh_CN"
	sendData = "type=1&content=ddd&error=false&tofakeid=1926081360&token=199050138&ajax=1"
	referer = "https://mp.weixin.qq.com/cgi-bin/singlemsgpage?token=199050138&fromfakeid=1926081360&msgid=&source=&count=20&t=wxm-singlechat&lang=zh_CN"
	
	rw "<br/>sendData= "&sendData
	rw "<br/>referer= "&referer
	TempStr = HttpGet(10000,10000,20000,20000,"POST",sSendUrl,referer,sendData,sCookie,"zh-cn","application/x-www-form-urlencoded","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)","gzip, deflate","*/*","UTF-8")
	rw "<br/>"&TempStr
End Sub

 

Function HttpGet(lresolveTimeout,lconnectTimeout,lsendTimeout,lreceiveTimeout,Method,Url,Referer,Data,SetCookie,Language,CONTENT,Agent,Encoding,Accept,CodeBase)
	DoGet.lresolveTimeout = lresolveTimeout
	DoGet.lconnectTimeout = lconnectTimeout
	DoGet.lsendTimeout = lsendTimeout
	DoGet.lreceiveTimeout = lreceiveTimeout
	DoGet.Method = Method
	DoGet.Url = Url
	DoGet.Referer = Referer
	DoGet.Data = Data
	DoGet.SetCookie = SetCookie
	DoGet.Language = Language
	DoGet.CONTENT = CONTENT
	DoGet.Agent = Agent
	DoGet.Encoding = Encoding
	DoGet.Accept = Accept
	DoGet.CodeBase = CodeBase
	HttpGet = DoGet.HttpGet()
End Function
         '' ============================================
	'' 发送数据并取回远程数据
	'' ============================================
	Public Function HttpGet()
		Dim sReturn
		With oXml
			.setTimeouts slresolveTimeout,slconnectTimeout,slsendTimeout,slreceiveTimeout
			.Open sMethod,sUrl,False
			If sSetCookie<>"" Then 
				.setRequestHeader "Cookie", sSetCookie	''设定Cookie
			End If
			If sReferer<>"" Then
				.setRequestHeader "Referer", sReferer	''设定页面来源
			Else
				.setRequestHeader "Referer", sUrl
			End If
			If sLanguage<>"" Then
				.setRequestHeader "Accept-Language", sLanguage	''设定语言
			End If
				.setRequestHeader "Content-Length",Len(sData)	''设定数据长度
			If sCONTENT<>"" Then
				.setRequestHeader "CONTENT-Type",sCONTENT	''设定接受数据类型
			End If
			If sAgent<>"" Then
				.setRequestHeader "User-Agent", sAgent	''设定浏览器
			End If
			If sEncoding<>"" Then
				.setRequestHeader "Accept-Encoding", sEncoding	''设定gzip压缩
			End If
			If sAccept<>"" Then
				.setRequestHeader "Accept", sAccept	''文档类型
			End If
				.Send sData	''发送数据 
			While .readyState <> 4 
				.waitForResponse 1000 
			Wend 
			strHeaders = .getAllResponseHeaders() 
			If sCodeBase<>"" Then
				sReturn = bytes2BSTR(.responseBody)
			Else
				sReturn = .responseBody
			End If
		End With
		
		HttpGet = sReturn 
End Function

 

DoGet 是封装好的远程连接类

HttpGet() 是该类的一个方法

主要用到的方法贴出来了,如有需要再继续贴

问题:

发送信息未成功,根据反馈的信息“need post”。

我是POST提交,也一起提交了token ,还是未成功。

请高手帮看下。

ps:本人不熟悉ASP,只能勉强使用

 

加载中
0
天体图
天体图
我花了十分钟看了下你的代码,写法貌似没什么问题。除了要注意一下token,仔细观察一下网页,不能写死在程序里的。
k
kakaximu
回复 @LuckyWiky : 我这个asp 的吗?
LuckyWiky
LuckyWiky
开原不
k
kakaximu
回复 @天体图 : 我已经用了,ieHTTPHeaders 我把我的COOKIES 贴一下, 就三个,key分别为cert,slave_user,slave_sid ps: 太长,贴下面了
天体图
天体图
回复 @kakaximu : 教你一个终极方法,你用firebug或IE的开发人员工具等工具抓到微信公众平台网页上发送消息时的请求头,请求内容(即post的内容),cookies等等,和你的程序进行一一比对,直到完全一致为止。一般人我不告诉他。。。我用C#开发的,已经实现了接收和发送,用的就是上述方法,蛋疼的是不能发图片,只能先添加为素材,目前我还没时间研究。。。
k
kakaximu
写死在程序里,是为了方便测试。 token 值是登陆获取的,同时和实际登陆的值进行比较,是一样的。 郁闷啊
0
k
kakaximu

顶一下,求大侠。

解决不了啊,如果代码不够,不理解,我继续贴

0
golive
golive
我也遇到这样的问题,我是PHP curl 模拟修改账户的信息,目的是保持心跳,请高手指教一下~~~
0
k
kakaximu
cert=BjvHtfZadDCBXNESwrfVFvpz4LOzCvVc; 
slave_user=gh_7e0911202f84; 
slave_sid=Qmp2SHRmWmFkRENCWE5FU3dyZlZGdnB6NExPekN2VmNPblNoQ1FwUHEwcG5MMGVlcXI5NFd3Ql9nb3pTVHIyRk9VVXBKZ2I2ZXp0X3pGZFg1azAxUUEwNFd4V05ZV3BKUGk1dndoQ0tRMkhtR1ZqTGVlRlVDbTFmK2E0QWp4bVk=
0
__FresHmaN
__FresHmaN
亲,你要请求头加上 Referer
__FresHmaN
__FresHmaN
@kakaximu $req_header = array( 'Content-Type: application/x-www-form-urlencoded', 'Accept :*/*', 'Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3', 'Accept-Encoding:gzip,deflate,sdch', 'Host:mp.weixin.qq.com', 'Referer: https://mp.weixin.qq.com/cgi-bin/singlemsgpage', 'Cookie:' . $mp_cookie );
k
kakaximu
Referer已经加了,请看代码sendMsg方法
0
__FresHmaN
__FresHmaN
或者是加上host?
__FresHmaN
__FresHmaN
加上host试了么?
k
kakaximu
回复 @李春强 : 哥哥,赶紧回忆,要命呢。
__FresHmaN
__FresHmaN
@kakaximu 我记得我也是有过这个错误,然后加上host还是referer就好了
k
kakaximu
贴上了新方法,我怀疑是创建Server.CreateObject("MSXML2.ServerXMLHTTP") 这个错误
0
k
kakaximu
贴上DoGet 类初始化,创建oXml 远程连接对象方法 
'' ============================================
	'' 类模块初始化
	'' ============================================
	Private Sub Class_Initialize()
		oForm = "" 
		Set oXml = Server.CreateObject("MSXML2.ServerXMLHTTP")
		set Ados = Server.CreateObject("Adodb.Stream") 
		
		slresolveTimeout = 20000	'' 解析DNS名字的超时时间,20秒
		slconnectTimeout = 20000	'' 建立Winsock连接的超时时间,20秒
		slsendTimeout = 30000	'' 发送数据的超时时间,30秒
		slreceiveTimeout = 30000	'' 接收response的超时时间,30秒
	End Sub
0
k
kakaximu

不行啊,求助

0
k
kakaximu

用JAVA 轻松实现,传递同样的参数,提交同样的地址,完全OK

郁闷,为什么ASP

你个大胖子
你个大胖子
求一份java的demo可以么?邮箱469115158#qq.com,感谢!
返回顶部
顶部