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

  1. <%
  2. '**********************************************
  3. '注意事项
  4. 'ASP文件需要以UTF-8的格式保存,否则乱码.
  5. '作者wx :18611436777
  6. '**********************************************
  7. dim Signature '微信加密签名
  8. dim Timestamp '时间戳
  9. dim Nonce '随机数
  10. dim Echostr '随机字符串
  11. dim Token '与微信后台设置的token一致
  12. dim encrypt_type '加密类型
  13. dim msg_signature '签名
  14.  
  15. Token="7Gk0Ry2Wn"'
  16.  
  17. Signature = request.QueryString("signature")
  18. Nonce = request.QueryString("nonce")
  19. Timestamp = request.QueryString("timestamp")
  20. Echostr = request.QueryString("echostr")
  21. encrypt_type = request.QueryString("encrypt_type")
  22. msg_signature = request.QueryString("msg_signature")
  23.  
  24. '验证微信接口
  25. If EchoStr<>"" then
  26. '下面进行Token,TimesTamp,Nonce三个参数的字典排序
  27. dim str,i
  28. dim Myarray:Myarray=Sort(Array(Token,TimesTamp,Nonce))
  29. For i=0 To Ubound(Myarray)
  30. str=str&Myarray(i)
  31. Next
  32. if Lcase(SignaTure)=Lcase(SHA1(str,"Hex")) then
  33. Response.Write EchoStr '验证成功,返回正确EchoStr给微信,接通接口API
  34. Response.End()
  35. end if
  36. End if
  37.  
  38. '获取微信主动发送过来的内容
  39. Set xmldom = Server.CreateObject("MSXML2.DOMDocument")
  40. xmldom.load request
  41. xml = xmldom.documentElement.xml
  42. 'call CreateTextFile(request.QueryString&xml,"a.txt")
  43. If encrypt_type = "aes" Then
  44. res = ToAes(xml,0)
  45. xmldom.loadxml res
  46. End If
  47. ToUserName=xmldom.getelementsbytagname("ToUserName").item(0).text '接收者微信账号。即我们的公众平台账号。
  48. FromUserName=xmldom.getelementsbytagname("FromUserName").item(0).text '发送者微信账号Openid
  49. CreateTime=xmldom.getelementsbytagname("CreateTime").item(0).text
  50. MsgType=xmldom.getelementsbytagname("MsgType").item(0).text
  51. if (MsgType="event") then
  52. strEventType=xmldom.getelementsbytagname("Event").item(0).text '微信事件
  53. if strEventType="subscribe" then '表示订阅微信公众平台
  54. EventKey=xmldom.getelementsbytagname("EventKey").item(0).text
  55. Content="感谢关注"
  56. if EventKey<>"" then
  57. EventKey=replace(EventKey,"qrscene_","")
  58. Content = "你的上线ID:"&EventKey
  59. Else
  60. EventKey= 0
  61. Content = "感谢关注"
  62. end if
  63. Call Login(EventKey,FromUserName)
  64. Call Return_Text(Content)
  65. ElseIf strEventType="unsubscribe" Then'取消关注
  66. Content="取消关注"
  67. Call Return_Text(Content)
  68. ElseIf strEventType="CLICK" Then'点击菜单获取关键字,获取
  69. EventKey=xmldom.getelementsbytagname("EventKey").item(0).text
  70. Content=EventKey
  71. Call Return_Text(Content)
  72. ElseIf strEventType="VIEW" Then'点击菜单获取关键字,跳转到链接
  73. EventKey=xmldom.getelementsbytagname("EventKey").item(0).text
  74. Content=EventKey
  75. Call Return_Text(Content)
  76. ElseIf strEventType="SCAN" Then '扫描二维码
  77. EventKey=xmldom.getelementsbytagname("EventKey").item(0).text
  78. Content= "欢迎再次光临"
  79. Call Return_Text(Content)
  80. ElseIf strEventType="scancode_push" or strEventType="scancode_waitmsg" Then '点击菜单,调用扫码推事件的事件推送
  81. EventKey=xmldom.getelementsbytagname("EventKey").item(0).text
  82. ScanResult=xmldom.getelementsbytagname("ScanResult").item(0).text
  83. Content=ScanResult
  84. Call Return_Text(Content)
  85. ElseIf strEventType="pic_sysphoto" or strEventType="pic_photo_or_album" or strEventType="pic_weixin" Then '点击菜单,调用系统拍照发图
  86. EventKey=xmldom.getelementsbytagname("EventKey").item(0).text
  87. Counts=xmldom.getelementsbytagname("Count").item(0).text
  88. Content="拍照发图,接收【"&Counts&"】张图片"
  89. Call Return_Text(Content)
  90. ElseIf strEventType="location_select" Then '点击菜单,调用位置发送
  91. EventKey=xmldom.getelementsbytagname("EventKey").item(0).text
  92. Location_X=xmldom.getelementsbytagname("Location_X").item(0).text
  93. Location_Y=xmldom.getelementsbytagname("Location_Y").item(0).text
  94. Scale=xmldom.getelementsbytagname("Scale").item(0).text
  95. Label=xmldom.getelementsbytagname("Label").item(0).text
  96. Content="发送位置"&EventKey
  97. Call Return_Text(Content)
  98. ElseIf strEventType="LOCATION" Then'获取用户地理位置,当用户打开对话框时,自动获取微信用户的实时地址。本功能需要配合服务号的LEB接口。
  99. Latitude=xmldom.getelementsbytagname("Latitude").item(0).text
  100. Longitude=xmldom.getelementsbytagname("Longitude").item(0).text
  101. Precision=xmldom.getelementsbytagname("Precision").item(0).text
  102. '记录用户LEB信息
  103. end if
  104. else
  105. MsgId=xmldom.getelementsbytagname("MsgId").item(0).text
  106. End If
  107. If MsgType="text" then'接收文本信息
  108. Content=xmldom.getelementsbytagname("Content").item(0).text
  109. Call Return_Text(Content)
  110. elseif MsgType="image" then'接收图片信息
  111. MediaId=xmldom.getelementsbytagname("MediaId").item(0).text
  112. PicUrl=xmldom.getelementsbytagname("PicUrl").item(0).text
  113. Content=PicUrl
  114. Call Return_Text(Content)
  115. elseif MsgType="voice" then'"接收语音信息
  116. MediaId=xmldom.getelementsbytagname("MediaId").item(0).text
  117. Format=xmldom.getelementsbytagname("Format").item(0).text
  118. Content=MediaId
  119. Call Return_Text(Content)
  120. elseif MsgType="video" then'接收视频信息
  121. MediaId=xmldom.getelementsbytagname("MediaId").item(0).text
  122. ThumbMediaId=xmldom.getelementsbytagname("ThumbMediaId").item(0).text
  123. Content=MediaId
  124. Call Return_Text(Content)
  125. elseif MsgType="location" then'接收位置信息
  126. Location_X=xmldom.getelementsbytagname("Location_X").item(0).text
  127. Location_Y=xmldom.getelementsbytagname("Location_Y").item(0).text
  128. Scale=xmldom.getelementsbytagname("Scale").item(0).text
  129. Label=xmldom.getelementsbytagname("Label").item(0).text
  130. Content="地理位置"&Location_X&","&Location_Y&"你发的是地址信息:"&Label
  131. Call Return_Text(Content)
  132. elseif MsgType="link" then'接收链接信息
  133. Title=xmldom.getelementsbytagname("Title").item(0).text
  134. Descriptions=xmldom.getelementsbytagname("Description").item(0).text
  135. Url=xmldom.getelementsbytagname("Url").item(0).text
  136. Content=Url
  137. Call Return_Text(Content)
  138. end if
  139. set xmldom=Nothing
  140.  
  141. '多图文消息
  142. Function Return_News(Articles)
  143. ArticleCount = Ubound(Articles)+1
  144. str = "<xml>"&_
  145. "<ToUserName><![CDATA["&FromUserName&"]]></ToUserName>"&_
  146. "<FromUserName><![CDATA["&ToUserName&"]]></FromUserName>"&_
  147. "<CreateTime>"&DateDiff("s","1970-01-01 08:00:00",Now())&"</CreateTime>"&_
  148. "<MsgType><![CDATA[news]]></MsgType>"&_
  149. "<ArticleCount>"&ArticleCount&"</ArticleCount>"&_
  150. "<Articles>"
  151. For i = 0 To ArticleCount-1
  152. str = str & "<item>"&_
  153. "<Title><![CDATA["&Articles(i)(0)&"]]></Title>"&_
  154. "<Description><![CDATA["&Articles(i)(1)&"]]></Description>"&_
  155. "<PicUrl><![CDATA["&Articles(i)(2)&"]]></PicUrl>"&_
  156. "<Url><![CDATA["&Articles(i)(3)&"]]></Url>"&_
  157. "</item>"
  158. Next
  159. str = str & "</Articles>"&_
  160. "</xml>"
  161. Response.Write str
  162. End Function
  163.  
  164. '文本消息
  165. Function Return_Text(Content)
  166. str = "<xml>"&_
  167. "<ToUserName><![CDATA["&FromUserName&"]]></ToUserName>"&_
  168. "<FromUserName><![CDATA["&ToUserName&"]]></FromUserName>"&_
  169. "<CreateTime>"&DateDiff("s","1970-01-01 08:00:00",Now())&"</CreateTime>"&_
  170. "<MsgType><![CDATA[text]]></MsgType>"&_
  171. "<Content><![CDATA["&Content&"]]></Content>"&_
  172. "</xml>"
  173. Response.Write str
  174. End Function
  175.  
  176. '字典排序
  177. Function Sort(ary)
  178. Dim KeepChecking,I,FirstValue,SecondValue
  179. KeepChecking = TRUE
  180. Do Until KeepChecking = FALSE
  181. KeepChecking = FALSE
  182. For I = 0 to UBound(ary)
  183. If I = UBound(ary) Then Exit For
  184. If ary(I) > ary(I+1) Then
  185. FirstValue = ary(I)
  186. SecondValue = ary(I+1)
  187. ary(I) = SecondValue
  188. ary(I+1) = FirstValue
  189. KeepChecking = TRUE
  190. End If
  191. Next
  192. Loop
  193. Sort = ary
  194. End Function
  195.  
  196. Function PostHTTPPage(url,data)
  197. dim Http
  198. set Http=server.createobject("MSXML2.SERVERXMLHTTP.3.0")
  199. Http.open "POST",url,false
  200. Http.setRequestHeader "CONTENT-TYPE", "application/x-www-form-urlencoded"
  201. Http.send(data)
  202. if Http.readystate<>4 then
  203. exit function
  204. End if
  205. PostHTTPPage=Http.responseText
  206. set http=nothing
  207. if err.number<>0 then err.Clear
  208. End Function
  209.  
  210. Function SHA1(ByVal Str,ByVal Types)
  211. Dim TAsc,Enc,Bytes,objXML,objXMLNode,Outstr
  212. 'Borrow some objects from .NET (supported from 1.1 onwards)
  213. Set TAsc = Server.CreateObject("System.Text.UTF8Encoding")
  214. Set Enc = Server.CreateObject("System.Security.Cryptography.SHA1CryptoServiceProvider")
  215. 'Convert the string to a byte array and hash it
  216. Bytes = TAsc.GetBytes_4(Str)
  217. Bytes = Enc.ComputeHash_2((Bytes))
  218. 'Convert the byte array to a hex or bsae64 string
  219. Outstr = ""
  220. If Types = "Base64" Then
  221. Set objXML = Server.CreateObject("Msxml2.DOMDocument")
  222. Set objXMLNode = objXML.createElement("a")
  223. objXMLNode.DataType = "bin.base64"
  224. objXMLNode.NodeTypedValue = Bytes
  225. Outstr = Replace(objXMLNode.Text,Chr(10),"")
  226. Set objXML = Nothing
  227. Set objXMLNode = Nothing
  228. ElseIf Types = "Hex" Then
  229. Set objXML = Server.CreateObject("Msxml2.DOMDocument")
  230. Set objXMLNode = objXML.createElement("a")
  231. objXMLNode.DataType = "bin.hex"
  232. objXMLNode.NodeTypedValue = Bytes
  233. Outstr = Replace(objXMLNode.Text,Chr(10),"")
  234. Set objXML = Nothing
  235. Set objXMLNode = Nothing
  236. End If
  237. SHA1 = Outstr
  238. Set Enc = Nothing
  239. Set TAsc = Nothing
  240. End Function
  241.  
  242. Sub Login(genKey,openid)
  243. Set Rs = Conn.ExeCute("Select * From [Wx_user] Where openid='"&openid&"'")
  244. If Rs.Eof Then
  245. UserInfo = Wx.Get_UserInfo(openid)
  246. nickname = UserInfo(0)
  247. sex = UserInfo(1)
  248. icon = UserInfo(2)
  249. province = UserInfo(4)
  250. city = UserInfo(5)
  251. 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&")")
  252. End If
  253. End Sub
  254.  
  255. %>

微信公众号生成带参数的二维码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. 2018上C语言程序设计(高级)作业- 第3次作业成绩

    作业地址 https://edu.cnblogs.com/campus/hljkj/CS2017-01/homework/1779 评分准则 第一次作业各项成绩包括三项: 完成PTA所有题目:13分 ...

  2. Elasticsearch CURL命令

    1.查看集群状态 curl '10.18.37.223:9200/_cat/health?v'绿色表示一切正常, 黄色表示所有的数据可用但是部分副本还没有分配,红色表示部分数据因为某些原因不可用 2. ...

  3. Ubuntu下部分Java软件字体渲染问题解决方法

    On ubuntu or in general Linux OS, fonts in some Java software(like Geogebra, Arduino) looks terriabl ...

  4. Java中switch对整型/字符型/字符串型具体实现细节

    转自:http://www.hollischuang.com/archives/61 Java7中switch中支持的数据类型有: byte short int char String类型 其实swi ...

  5. 计算机原码、补码、反码与java移位运算符(<</>>/>>>)

    一.机器值和真值 1.机器值 一个数在计算机中的二进制表示形式,  叫做这个数的机器数.机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1. 比如,十进制中的数 +3 ,计算机 ...

  6. 返回上一页面带数据 getCurrentPages 使用

    https://blog.csdn.net/She_lock/article/details/81099449

  7. 蓝桥杯——X星球居民问题

    [问题描述] X星球居民小区的楼房全是一样的,并且按矩阵样式排列.其楼房的编号为1,2,3... 当排满一行时,从下一行相邻的楼往反方向排号. 比如:当小区排号宽度为6时,开始情形如下: 1  2  ...

  8. Web 建站技术中,HTML、HTML5、XHTML、CSS、SQL、JavaScript、PHP、ASP.NET、Web Services 是什么(转)

    Web 建站技术中,HTML.HTML5.XHTML.CSS.SQL.JavaScript.PHP.ASP.NET.Web Services 是什么?修改 建站有很多技术,如 HTML.HTML5.X ...

  9. Elasticsearch2.3.4使用手册(使用存储过程做增量同步的探索)

    一.工具安装 访问官网https://www.elastic.co/downloads/elasticsearch和http://xbib.org/repository/org/xbib/elasti ...

  10. 解决OSError: cannot identify image file <_io.BytesIO object at 0x000001ABB1D9DE60>

    解决方法: 不支持.jpg文件,用opencv将文件转为png格式即可.