微信调用扫一扫的步骤(ASP实现方式)

1.微信服务号(或公众号)不用认证也行的

2.点击“公众号设置”-“功能设置”,在“JS接口安全域名”处填写上域名,二级域名也可以
图例

3.开始写代码上传到上述设定的安全域名下面。例如设定的安全域名是test.bzzs.com,那么可以在test.bzzs.com的ftp下面放源代码文件,不一定在根目录下。

4.比如我们的测试文件是test.htm,那么开始配置这个文件里的js代码。wx.config这个部分有几个参数需要设置正确的。
wx.config({
debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: ‘’, // 必填,公众号的唯一标识
timestamp: , // 必填,生成签名的时间戳
nonceStr: ‘’, // 必填,生成签名的随机串
signature: ‘’,// 必填,签名,见附录1
jsApiList: [] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
});

参考:
http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html#.E6.AD.A5.E9.AA.A4.E4.B8.80.EF.BC.9A.E7.BB.91.E5.AE.9A.E5.9F.9F.E5.90.8D

appId在基本配置里可以找到,每个账号都不一样的。timestamp随便写没关系。nonceStr是自己程序随机生成的。signature最复杂,是前面几个综合进行sha1加密的结果。
主要就是上面这4个。
我用asp实现了一个接口,需要传递3个参数给它,分别是AppID、AppSecret、url:

<!--#include file="sha1.asp"-->
<%
AppID=request("AppID")'"wx0cd565f70be8xxxx"
AppSecret=request("AppSecret")'"2ad5303155fb4c0b0474b309c9d5xxxx"
timestamp=ToUnixTime(now,+8)
nonceStr=getRndNumber()
url=request("url")'"http://"&Request.ServerVariables("server_name")&Request.ServerVariables("script_name") 
response.Charset="gb2312" '根据相应情况,可修改为utf-8
Response.Expires = -9999
Response.AddHeader "Pragma","no-cache"
Response.AddHeader "cache-ctrol","no-cache"

function getRndNumber()
	keyword="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
	intKeyWordLength=len(keyword)

	randomize
	for i=1 to 16
		s=s & mid(keyword,Int(Rnd * intKeyWordLength) + 1,1)
	next
	getRndNumber=s
end function

Function ToUnixTime(strTime, intTimeZone)        
    If IsEmpty(strTime) or Not IsDate(strTime) Then strTime = Now        
    If IsEmpty(intTimeZone) or Not isNumeric(intTimeZone) Then intTimeZone = 0        
     ToUnixTime = DateAdd("h",-intTimeZone,strTime)        
     ToUnixTime = DateDiff("s","1970-1-1 0:0:0", ToUnixTime)        
End Function

Function GetBody(weburl)
	Dim ObjXMLHTTP
	Set ObjXMLHTTP=Server.CreateObject("MSXML2.serverXMLHTTP")
	ObjXMLHTTP.Open "GET",weburl,False
	ObjXMLHTTP.send
	While ObjXMLHTTP.readyState <> 4
		ObjXMLHTTP.waitForResponse 10000
	Wend
	GetBody=ObjXMLHTTP.responseBody
	Set ObjXMLHTTP=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

'([^\d]+\d+\*admin)
function getMatch1Sub1(strData,strPattern)
	if isnull(strData) then
		getMatch1Sub1=""
		exit function
	end if

    Set reg = CreateObject("vbscript.regExp")
    reg.Global = True
    reg.IgnoreCase = True
    reg.MultiLine = True
    reg.Pattern = strPattern'"====\r\n([^\r\n]*)\r\n[\s\S]*?2431682927627455"
    Set matchs = reg.Execute(strData)
	if matchs.Count>0 then getMatch1Sub1=matchs(0).SubMatches(0)
End function

caiurl="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" & AppID & "&secret=" & AppSecret
access_token=getMatch1Sub1(BytesToBstr(GetBody(caiurl),"gb2312"),"{""access_token"":""(.*?)""")

caiurl="https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" & access_token & "&type=jsapi"
jsapi_ticket=getMatch1Sub1(BytesToBstr(GetBody(caiurl),"gb2312"),"""ticket"":""(.*?)""")

string1="jsapi_ticket=" & jsapi_ticket & "&noncestr=" & noncestr & "&timestamp=" & timestamp & "&url=" & url
signature=Sha1(string1)
response.write "appId=" & AppID & "," & "nonceStr=" & nonceStr & "," & "timestamp=" & timestamp & "," & "signature=" & signature & ",datetime=" & now
%>

也就是js文件执行之前需要配置的参数由动态语言在服务器生成好。这个是不允许纯js去生成的因为要保护appid等隐私信息,规定只能后台生成。注意签名signature的有效时间大概就2个小时,而又不能无限制的去生成签名,因为微信限制了一天只能几百次好像。所以当有请求过来的时候得检查当前签名是否用了2个小时了,如果超时了那么重新生成。

sha1.asp下载地址:https://download.csdn.net/download/sysdzw/9771756

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无·法

别打赏了,这C币又不能买咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值