1. 程式人生 > >微信二維碼關注傳遞引數

微信二維碼關注傳遞引數

以往關注後會發一條歡迎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字串形式。