微信二維碼關注傳遞引數
阿新 • • 發佈:2019-01-23
以往關注後會發一條歡迎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來得到誰推薦的。
最後響應請求返回傳送訊息資料
<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字串形式。