晚上闲着没事,一个朋友联系,让帮忙写一个微信公众号利用asp生成带参数的二维码,别人扫了后如果已经关注过该公众号的,则直接进入公众号里,如果没关注则提示关注,关注后自动把该微信用户资料获取到并且保存入库,然后回复他的上级是谁,我觉得有可能对别人有用,就发到这了,闲话不说,上代码,对了,生成的二维码可以是临时二维也可以是永久的二维码:

<%
'**********************************************
'注意事项
'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
'call CreateTextFile(request.QueryString&xml,"a.txt")
If encrypt_type = "aes" Then
res = ToAes(xml,0)
xmldom.loadxml res
End If
ToUserName=xmldom.getelementsbytagname("ToUserName").item(0).text '接收者微信账号。即我们的公众平台账号。
FromUserName=xmldom.getelementsbytagname("FromUserName").item(0).text '发送者微信账号Openid
CreateTime=xmldom.getelementsbytagname("CreateTime").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 '表示订阅微信公众平台
EventKey=xmldom.getelementsbytagname("EventKey").item(0).text
Content="感谢关注"
if EventKey<>"" then
EventKey=replace(EventKey,"qrscene_","")
Content = "你的上线ID:"&EventKey
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
Content=EventKey
Call Return_Text(Content)
ElseIf strEventType="VIEW" Then'点击菜单获取关键字,跳转到链接
EventKey=xmldom.getelementsbytagname("EventKey").item(0).text
Content=EventKey
Call Return_Text(Content)
ElseIf strEventType="SCAN" Then '扫描二维码
EventKey=xmldom.getelementsbytagname("EventKey").item(0).text
Content= "欢迎再次光临"
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
Content=ScanResult
Call Return_Text(Content)
ElseIf strEventType="pic_sysphoto" or strEventType="pic_photo_or_album" or strEventType="pic_weixin" Then '点击菜单,调用系统拍照发图
EventKey=xmldom.getelementsbytagname("EventKey").item(0).text
Counts=xmldom.getelementsbytagname("Count").item(0).text
Content="拍照发图,接收【"&Counts&"】张图片"
Call Return_Text(Content)
ElseIf strEventType="location_select" Then '点击菜单,调用位置发送
EventKey=xmldom.getelementsbytagname("EventKey").item(0).text
Location_X=xmldom.getelementsbytagname("Location_X").item(0).text
Location_Y=xmldom.getelementsbytagname("Location_Y").item(0).text
Scale=xmldom.getelementsbytagname("Scale").item(0).text
Label=xmldom.getelementsbytagname("Label").item(0).text
Content="发送位置"&EventKey
Call Return_Text(Content)
ElseIf strEventType="LOCATION" Then'获取用户地理位置,当用户打开对话框时,自动获取微信用户的实时地址。本功能需要配合服务号的LEB接口。
Latitude=xmldom.getelementsbytagname("Latitude").item(0).text
Longitude=xmldom.getelementsbytagname("Longitude").item(0).text
Precision=xmldom.getelementsbytagname("Precision").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
Call Return_Text(Content)
elseif MsgType="image" then'接收图片信息
MediaId=xmldom.getelementsbytagname("MediaId").item(0).text
PicUrl=xmldom.getelementsbytagname("PicUrl").item(0).text
Content=PicUrl
Call Return_Text(Content)
elseif MsgType="voice" then'"接收语音信息
MediaId=xmldom.getelementsbytagname("MediaId").item(0).text
Format=xmldom.getelementsbytagname("Format").item(0).text
Content=MediaId
Call Return_Text(Content)
elseif MsgType="video" then'接收视频信息
MediaId=xmldom.getelementsbytagname("MediaId").item(0).text
ThumbMediaId=xmldom.getelementsbytagname("ThumbMediaId").item(0).text
Content=MediaId
Call Return_Text(Content)
elseif MsgType="location" then'接收位置信息
Location_X=xmldom.getelementsbytagname("Location_X").item(0).text
Location_Y=xmldom.getelementsbytagname("Location_Y").item(0).text
Scale=xmldom.getelementsbytagname("Scale").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
Descriptions=xmldom.getelementsbytagname("Description").item(0).text
Url=xmldom.getelementsbytagname("Url").item(0).text
Content=Url
Call Return_Text(Content)
end if
set xmldom=Nothing '多图文消息
Function Return_News(Articles)
ArticleCount = Ubound(Articles)+1
str = "<xml>"&_
"<ToUserName><![CDATA["&FromUserName&"]]></ToUserName>"&_
"<FromUserName><![CDATA["&ToUserName&"]]></FromUserName>"&_
"<CreateTime>"&DateDiff("s","1970-01-01 08:00:00",Now())&"</CreateTime>"&_
"<MsgType><![CDATA[news]]></MsgType>"&_
"<ArticleCount>"&ArticleCount&"</ArticleCount>"&_
"<Articles>"
For i = 0 To ArticleCount-1
str = str & "<item>"&_
"<Title><![CDATA["&Articles(i)(0)&"]]></Title>"&_
"<Description><![CDATA["&Articles(i)(1)&"]]></Description>"&_
"<PicUrl><![CDATA["&Articles(i)(2)&"]]></PicUrl>"&_
"<Url><![CDATA["&Articles(i)(3)&"]]></Url>"&_
"</item>"
Next
str = str & "</Articles>"&_
"</xml>"
Response.Write str
End Function '文本消息
Function Return_Text(Content)
str = "<xml>"&_
"<ToUserName><![CDATA["&FromUserName&"]]></ToUserName>"&_
"<FromUserName><![CDATA["&ToUserName&"]]></FromUserName>"&_
"<CreateTime>"&DateDiff("s","1970-01-01 08:00:00",Now())&"</CreateTime>"&_
"<MsgType><![CDATA[text]]></MsgType>"&_
"<Content><![CDATA["&Content&"]]></Content>"&_
"</xml>"
Response.Write str
End Function '字典排序
Function Sort(ary)
Dim KeepChecking,I,FirstValue,SecondValue
KeepChecking = TRUE
Do Until KeepChecking = FALSE
KeepChecking = FALSE
For I = 0 to UBound(ary)
If I = UBound(ary) Then Exit For
If ary(I) > ary(I+1) Then
FirstValue = ary(I)
SecondValue = ary(I+1)
ary(I) = SecondValue
ary(I+1) = FirstValue
KeepChecking = TRUE
End If
Next
Loop
Sort = ary
End Function Function PostHTTPPage(url,data)
dim Http
set Http=server.createobject("MSXML2.SERVERXMLHTTP.3.0")
Http.open "POST",url,false
Http.setRequestHeader "CONTENT-TYPE", "application/x-www-form-urlencoded"
Http.send(data)
if Http.readystate<>4 then
exit function
End if
PostHTTPPage=Http.responseText
set http=nothing
if err.number<>0 then err.Clear
End Function Function SHA1(ByVal Str,ByVal Types)
Dim TAsc,Enc,Bytes,objXML,objXMLNode,Outstr
'Borrow some objects from .NET (supported from 1.1 onwards)
Set TAsc = Server.CreateObject("System.Text.UTF8Encoding")
Set Enc = Server.CreateObject("System.Security.Cryptography.SHA1CryptoServiceProvider")
'Convert the string to a byte array and hash it
Bytes = TAsc.GetBytes_4(Str)
Bytes = Enc.ComputeHash_2((Bytes))
'Convert the byte array to a hex or bsae64 string
Outstr = ""
If Types = "Base64" Then
Set objXML = Server.CreateObject("Msxml2.DOMDocument")
Set objXMLNode = objXML.createElement("a")
objXMLNode.DataType = "bin.base64"
objXMLNode.NodeTypedValue = Bytes
Outstr = Replace(objXMLNode.Text,Chr(10),"")
Set objXML = Nothing
Set objXMLNode = Nothing
ElseIf Types = "Hex" Then
Set objXML = Server.CreateObject("Msxml2.DOMDocument")
Set objXMLNode = objXML.createElement("a")
objXMLNode.DataType = "bin.hex"
objXMLNode.NodeTypedValue = Bytes
Outstr = Replace(objXMLNode.Text,Chr(10),"")
Set objXML = Nothing
Set objXMLNode = Nothing
End If
SHA1 = Outstr
Set Enc = Nothing
Set TAsc = Nothing
End Function Sub 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 %>

微信公众号生成带参数的二维码asp源码下载的更多相关文章

  1. Force.com微信开发系列(八)生成带参数的二维码

    为了满足用户渠道推广分析的需要,公众平台提供了生成带二维码的接口.使用该接口可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送.目前有两种类型的二维码,分别是临时二维码和永久二维码 ...

  2. 微信开发之——Php批量生成带参数的二维码

    带参数的二维码对于渠道营销推广来说是很有用的,可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送,可喜的是微信开通了这个接口,那下面就来研究一下吧. 具体接口说明请参见,微信公众平 ...

  3. C#微信公众号接口开发实例-高级接口-申请带参数的二维码

    最近公司涉及到微信绑定用户,做了高级接口-申请带参数的二维码,总结了下微信开发接口.微信接口开发都是除了消息用的xml 回复基本上都是用json的形式传递信息(post/get),开发的方法基本都是一 ...

  4. weixin-java-mp集成微信公众号自带客服功能

    电脑端登录公众号管理后台,[添加功能插件]开通客服功能,输入"人工客服"接入客服热线 底部有我的微信二维码,如有问题,可加好友进行技术交流! ​ ​ ​ ​ ​ ​ ​ weixi ...

  5. PHP生成带logo图像二维码的两种方法

    本文主要和大家分享PHP生成带logo图像二维码的两种方法,主要以文字和代码的形式和大家分享,希望能帮助到大家. 一.利用Google API生成二维码Google提供了较为完善的二维码生成接口,调用 ...

  6. C#生成带logo的二维码

    带logo的二维码生成分为两步骤:首先根据输入的内容生成二维码图片,然后读取本地的logo图片,通过图片处理生成带logo的二维码. 生成的二维码效果如下: 下面直接贴出二维码生成类   QRCode ...

  7. C#微信公众号开发系列教程六(被动回复与上传下载多媒体文件)

    微信公众号开发系列教程一(调试环境部署) 微信公众号开发系列教程一(调试环境部署续:vs远程调试) C#微信公众号开发系列教程二(新手接入指南) C#微信公众号开发系列教程三(消息体签名及加解密) C ...

  8. phpqrcode生成带logo的二维码图片及带文字的二维码图片

    <?php require_once "./phpqrcode/phpqrcode.php"; /** * 这样就可以生成二维码了,实际上在png这个方法里还有几个参数需要使 ...

  9. js生成带参的二维码

    最近项目中有需求生成带参的二维码,考虑过用JAVA后台生成返回前端展示,后面了解到用jquery的qrcode.js插件可以很好现实 引入js: require.config({ baseUrl : ...

随机推荐

  1. 开始Python学习

    主要结合ArcGIS进行空间数据处理 Python最讨厌的就是版本问题了 ArcGIS 10.5安装的时候已经安装了python2.7.13,但后来又安装了python3.6.1. 环境变量的设置: ...

  2. unsigned int reverse_bit(unsigned int value);

    /*编写函数 unsigned int reverse_bit(unsigned int value); 这个函数的返回值吧value的二进制位模式从左到右翻转后的值. 如在32位机器上25这个值包含 ...

  3. Linux上更换默认的java版本

    最近注意的一个问题: 在Server上和本地里都使用了相同版本的Tomcat,但是在Server上的tomcat日志里会出现很多java异常的错误, 但是本地的tomcat日志没有出现,初步判断应该是 ...

  4. 前端自动化构建工具--Gulp&&Webpack

    前端构建工具的作用可以认为是对源项目文件或资源进行文件级处理,将文件或资源处理成需要的最佳输出结构和形式. 在处理过程中,我们可以对文件进行模块化引入.依赖分析.资源合并.压缩优化.文件嵌入.路径替换 ...

  5. Python 特殊方法

    1 _int_ 定义在类中,创建类的实例的时候回先调用此方法,用于对该类的一些初始化(例如变量初始化) 2 _str_ def _str_(self): return "this is a ...

  6. Python基础:八、python基本数据类型

    一.什么是数据类型? 我们人类可以很容易的分清数字与字符的区别,但是计算机并不能,计算机虽然很强大,但从某种角度上来看又很傻,除非你明确告诉它,"1"是数字,"壹&quo ...

  7. 踩坑 —— Eclipse MAVEN编译

    一.踩坑 1.昨天download了Netty和SOFARPC工程的源码,Eclipse编译的时候报错了,信息如下: Plugin execution not covered by lifecycle ...

  8. centos7下安装nginx

    1.yum install epel-release(安装epel(Extra Packages for Enterprise Linux)) 2.yum repolist(确保epel添加到yum的 ...

  9. Go - WaitGroup

    package main import ( "fmt" "sync" ) //WaitGroup用于等待一组线程的结束.父线程调用Add方法来设定应等待的线程的 ...

  10. 关于地形altas的处理

    前几天在群里跟人讨论地形atlas的问题,因为Blade也是用的4x4的atlas(16张纹理),但是大概是几年前做的,所以一些细节忘记了,在这里做下备忘. 1.atlas就是图集,图册,把多个纹理打 ...