杰者的备忘录

当前位置:   网站首页 >> 微信

一个微信小程序获取二维码接口ASP的小小坑

好吧,这个小坑确实坑了我大半个小时。这严格来算不属于微信官方的问题,算我自己习惯性的问题。记录一下,不知道往后有没有其他ASPER犯了跟我一样的错误呢。


情况大概是这样的,我需要获取微信小程序的小程序码,微信官方提供接口了。于是我照着文档去请求。基本上大多写ASP的请求函数是类似这样的

Function PostHttpPage(HttpUrl,PostData)
	Dim Http
	Set Http=server.createobject("WinHttp.WinHttpRequest.5.1")'Msxml2.ServerXMLHTTP
	Http.open "POST",HttpUrl,False
	Http.setRequestHeader "Content-Length",Len(PostData)
	Http.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
	Http.Send PostData
	PostHttpPage=bytesToBSTR(Http.responseBody,"utf-8")
	Set Http=Nothing
End Function

Function BytesToBstr(Body,Cset)
	Dim Objstream
	Set Objstream = Server.CreateObject("adodb.stream")
	objstream.Type = 1
	objstream.Mode =3
	objstream.Open
	objstream.Write body
	objstream.Position = 0
	objstream.Type = 2
	objstream.Charset = Cset
	BytesToBstr = objstream.ReadText
	objstream.Close
	set objstream = nothing
End Function

请求其他接口倒是一直没问题,来到请求二维码这一块,返回了一堆乱码,一看就知道是二进制的文件流。

其实也简单,类似于输出验证码一样,输出流,定义一个文件头也就行了。

Response.ContentType = "image/jpeg"
Response.BinaryWrite PostHttpPage("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token="&get_xcx_access_token(),"{""scene"":""test"",""path"":""pages/index/index"",""width"":430,""auto_color"":false,""line_color"":{""r"":""0"",""g"":""0"",""b"":""0""}}")
Response.end

结果死活显示一个小框框,一直试着改文件头什么的,就是不行。

折腾了大半个小时,最后偶然喵到PostHttpPage=bytesToBSTR(Http.responseBody,"utf-8") 这一行,恍然大悟,平时请求其他文本接口,把返回的内容转成utf-8就没问题,但是图片的二进制流是根本无需要转码的。于是再加一个function把转utf-8那部分去了

Function PostHttpimg(HttpUrl,PostData)
	Dim Http
	Set Http=server.createobject("WinHttp.WinHttpRequest.5.1")'Msxml2.ServerXMLHTTP
	Http.open "POST",HttpUrl,False
	Http.setRequestHeader "Content-Length",Len(PostData)
	Http.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
	Http.Send PostData
	PostHttpimg=Http.responseBody
	Set Http=Nothing
End Function
Response.ContentType = "image/jpeg"
Response.BinaryWrite PostHttpimg("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token="&get_xcx_access_token(),"{""scene"":""test"",""path"":""pages/index/index"",""width"":430,""auto_color"":false,""line_color"":{""r"":""0"",""g"":""0"",""b"":""0""}}")
Response.end

果然OK了,之前做微信公众号接口的时候,在素材管理部分也有类似获取文件二进制流的事情,由于微信公众号那边接口比较科学,是先通过文本接口返回一个down_url字段再去获取的二进制流的,所以当时就没有掉坑里,来到小程序这里,他文本接口跟二进制流接口混一起了,确实容易害开发者掉坑里,但是为这问题浪费时间的主要责任还是平时自己编程习惯不好。算是大部分ASPER都容易犯的错吧。

网友评论2

  1. 来宾2018-02-12 05:43:19 回复

    用Easp吧。不断扩展自己的插件

  1. python372019-03-12 15:57:41 回复

    厉害。。。能asp发红包demo一下就更好了

发表我的评论

Hi,您需要填写昵称和邮箱!

  • 必填项