微信二维码关注传递参数

以往关注后会发一条欢迎XXX的信息给我。

最近遇到一个如为我生成了一个二维码关注后会提示XXX你是谁谁谁推荐的客户

不仅获取了当前用户信息还有推荐人的信息。

所以就有了本文:

文档:

http://mp.weixin.qq.com/wiki/18/8a8bbd4f0abfa3e58d7f68ce7252c0d6.html

https://mp.weixin.qq.com/debug/cgi-bin/apiinfo?t=index&type=向用户发送消息&form=发送客服消息接口%20/message/custom/send

http://mp.weixin.qq.com/wiki/18/c66a9f0b5aa952346e46dc39de20f672.html

http://mp.weixin.qq.com/wiki/14/d9be34fe03412c92517da10a5980e7ee.html

原理:在二维码Url上添加了参数,如用户md5id。

当扫成功后微信分析此url 获取到参数。并且回调给公众号上 基本配置里的url地址。

是以post 传递给我们服务器

参数是xml:

<xml>
 <ToUserName><![CDATA[toUser]]></ToUserName>
 <FromUserName><![CDATA[fromUser]]></FromUserName> 
 <CreateTime>1348831860</CreateTime>
 <MsgType><![CDATA[text]]></MsgType>
 <Content><![CDATA[this is a test]]></Content>
 <MsgId>1234567890123456</MsgId>
 </xml>

扫码参数:

<xml><ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[FromUser]]></FromUserName>
<CreateTime>123456789</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[subscribe]]></Event>
<EventKey><![CDATA[qrscene_123123]]></EventKey>
<Ticket><![CDATA[TICKET]]></Ticket>
</xml>
参数 描述
ToUserName 开发者微信号
FromUserName 发送方帐号(一个OpenID)
CreateTime 消息创建时间 (整型)
MsgType 消息类型,event
Event 事件类型,subscribe
EventKey 事件KEY值,qrscene_为前缀,后面为二维码的参数值
Ticket 二维码的ticket,可用来换取二维码图片
这里有当前关注的openid 和ticket信息。

用openid来获取当前用户信息,用ticket来得到谁推荐的。

最后响应请求返回发送消息数据

<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[你好]]></Content>
</xml>
参数 是否必须 描述
ToUserName 接收方帐号(收到的OpenID)
FromUserName 开发者微信号
CreateTime 消息创建时间 (整型)
MsgType text
Content 回复的消息内容(换行:在content中能够换行,微信客户端就支持换行显示)

实现:

1、生成参数的关注二维码:

需要先请求获取到access_token

post 请求传递参数获取生成的二维码url 和ticket

临时二维码请求说明

http请求方式: POST
URL: https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=TOKEN
POST数据格式:json
POST数据例子:{"expire_seconds": 604800, "action_name": "QR_SCENE", "action_info": {"scene": {"scene_id": 123}}}

永久二维码请求说明

http请求方式: POST
URL: https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=TOKEN
POST数据格式:json
POST数据例子:{"action_name": "QR_LIMIT_SCENE", "action_info": {"scene": {"scene_id": 123}}}
或者也可以使用以下POST数据创建字符串形式的二维码参数:
{"action_name": "QR_LIMIT_STR_SCENE", "action_info": {"scene": {"scene_str": "123"}}}

参数说明

参数 说明
expire_seconds 该二维码有效时间,以秒为单位。 最大不超过2592000(即30天),此字段如果不填,则默认有效期为30秒。
action_name 二维码类型,QR_SCENE为临时,QR_LIMIT_SCENE为永久,QR_LIMIT_STR_SCENE为永久的字符串参数值
action_info 二维码详细信息
scene_id 场景值ID,临时二维码时为32位非0整型,永久二维码时最大值为100000(目前参数只支持1--100000)
scene_str 场景值ID(字符串形式的ID),字符串类型,长度限制为1到64,仅永久二维码支持此字段

返回说明

正确的Json返回结果:

{"ticket":"gQH47joAAAAAAAAAASxodHRwOi8vd2VpeGluLnFxLmNvbS9xL2taZ2Z3TVRtNzJXV1Brb3ZhYmJJAAIEZ23sUwMEmm3sUw==","expire_seconds":60,"url":"http:\/\/weixin.qq.com\/q\/kZgfwMTm72WWPkovabbI"}
参数 说明
ticket 获取的二维码ticket,凭借此ticket可以在有效时间内换取二维码。
expire_seconds 该二维码有效时间,以秒为单位。 最大不超过2592000(即30天)。
url 二维码图片解析后的地址,开发者可根据该地址自行生成需要的二维码图片

返回里得到ticket url 

用记扫描关注:

二、得到openid ticket 并回复用户

对于单个用记直接send 输出xml就可以了。

node 获取二维码和ticket

var request=require('request');

var http=require('http');
http.createServer(function(req,res){
	if(req.url=='/'){
		 res.writeHead(200,{'Content-Type':'text/html'});
		 //先获取token
		 request('http://123.103.22.208/token?appId=wxf7a88566a83b58cf',function(err,res1,body){
			console.log(body);
			res.write(body);
			var token=body;
			//post 提交二维码上的参数值  得到ticket 和url
			request.post({
				headers:{
					'content-type':'application/json',
					'encoding':'utf-8'
				},
				url:'https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token='+token,
				//form 可以是一个对象也可以是字符串
				form:'{"expire_seconds":604800,"action_name":"QR_SCENE","action_info":{"scene":{"scene_id":123}}}'
			},function(err,res1,body){
				console.log(body)
				res.end(body);
			})
			/*https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=
			 * 根据tocket 获取url二维码图片
			 */
			
		});
	}
}).listen(3010,function(){
	console.log('绑定成功')
})
以上是源码,需要注意的是post到微信生成二维友的接口它只接收json字符串数据。所以form写成了Json字符串形式。




你可能感兴趣的:(微信二维码关注传递参数)