微信扫描二维码统计来源对每个公司市场分析有很大作用。还好微信为开发者提供了一个生成带参数的二维码的接口。最近公司要做个关注微信二维码统计来源的,百度了n久也没找到这样的demo, 研究了好几天,终于搞定。现写成文档分享出来。
实现目标:粉丝生成自已的二维码(微信公众号二维码带这个粉丝的参数),别人扫这个二维码时,如果没有关注,则提示关注,关注后就成为该粉丝的下线了,方便统计是谁发展来的用户
上代码:
<%
'**********************************************
'注意事项
'ASP文件需要以UTF-8的格式保存,否则乱码.
'作者wx :18611436777
'**********************************************
dim Signature '微信加密签名
dim Timestamp '时间戳
dim Nonce '随机数
dim Echostr '随机字符串
dim Token '与微信后台设置的token一致
dim encrypt_type '加密类型
dim msg_signature '签名
Token="7Gk0Ry2Wn"'
Signature = request.QueryString("signature")
Nonce = request.QueryString("nonce")
Timestamp = request.QueryString("timestamp")
Echostr = request.QueryString("echostr")
encrypt_type = request.QueryString("encrypt_type")
msg_signature = request.QueryString("msg_signature")
'验证微信接口
If EchoStr<>"" then
'下面进行Token,TimesTamp,Nonce三个参数的字典排序
dim str,i
dim Myarray:Myarray=Sort(Array(Token,TimesTamp,Nonce))
For i=0 To Ubound(Myarray)
str=str&Myarray(i)
Next
if Lcase(SignaTure)=Lcase(SHA1(str,"Hex")) then
Response.Write EchoStr '验证成功,返回正确EchoStr给微信,接通接口API
Response.End()
end if
End if
'获取微信主动发送过来的内容
Set xmldom = Server.CreateObject("MSXML2.DOMDocument")
xmldom.load request
xml = xmldom.documentElement.xml
If encrypt_type = "aes" Then
res = ToAes(xml,0)
xmldom.loadxml res
End If
ToUserName=xmldom.getelementsbytagname("ToUserName").item(0).text '接收者微信账号。即我们的公众平台账号。
MsgType=xmldom.getelementsbytagname("MsgType").item(0).text
if (MsgType="event") then
strEventType=xmldom.getelementsbytagname("Event").item(0).text '微信事件
if strEventType="subscribe" then '表示订阅微信公众平台
Content="感谢关注"
if EventKey<>"" then
EventKey=replace(EventKey,"qrscene_","")
Else
EventKey= 0
Content = "感谢关注"
end if
Call Login(EventKey,FromUserName)
Call Return_Text(Content)
ElseIf strEventType="unsubscribe" Then'取消关注
Content="取消关注"
Call Return_Text(Content)
ElseIf strEventType="CLICK" Then'点击菜单获取关键字,获取
EventKey=xmldom.getelementsbytagname("EventKey").item(0).text
Call Return_Text(Content)
ElseIf strEventType="VIEW" Then'点击菜单获取关键字,跳转到链接
EventKey=xmldom.getelementsbytagname("EventKey").item(0).text
Content=EventKey
ElseIf strEventType="SCAN" Then '扫描二维码
EventKey=xmldom.getelementsbytagname("EventKey").item(0).text
Call Return_Text(Content)
ElseIf strEventType="scancode_push" or strEventType="scancode_waitmsg" Then '点击菜单,调用扫码推事件的事件推送
EventKey=xmldom.getelementsbytagname("EventKey").item(0).text
ScanResult=xmldom.getelementsbytagname("ScanResult").item(0).text
Latitude=xmldom.getelementsbytagname("Latitude").item(0).text
Longitude=xmldom.getelementsbytagname("Longitude").item(0).text
'记录用户LEB信息
end if
else
MsgId=xmldom.getelementsbytagname("MsgId").item(0).text
End If
If MsgType="text" then'接收文本信息
Content=xmldom.getelementsbytagname("Content").item(0).text
elseif MsgType="location" then'接收位置信息
Location_X=xmldom.getelementsbytagname("Location_X").item(0).text
Label=xmldom.getelementsbytagname("Label").item(0).text
Content="地理位置"&Location_X&","&Location_Y&"你发的是地址信息:"&Label
Call Return_Text(Content)
elseif MsgType="link" then'接收链接信息
Title=xmldom.getelementsbytagname("Title").item(0).text
Content=Url
Call Return_Text(Content)
end if
set xmldom=Nothing
Login(genKey,openid)
Set Rs = Conn.ExeCute("Select * From [Wx_user] Where openid='"&openid&"'")
If Rs.Eof Then
UserInfo = Wx.Get_UserInfo(openid)
nickname = UserInfo(0)
sex = UserInfo(1)
icon = UserInfo(2)
province = UserInfo(4)
city = UserInfo(5)
Conn.ExeCute("Insert Into [Wx_user]([username],[password],headurl,sex,province,city,openid,genkey,pid) values('"&nickname&"','"&openid&"','"&icon&"',"&sex&",'"&province&"','"&city&"','"&openid&"','"&genkey&"',"&genkey&")")
End If
End Sub
%>