陳昀++楊鎧銘++孟潔
摘要:為解決教學(xué)中多人共享微信公眾賬號(hào)進(jìn)行二次開發(fā)的需求,通過掃描帶參數(shù)的二維碼區(qū)分微信用戶并進(jìn)行XML數(shù)據(jù)的轉(zhuǎn)發(fā),使用PHP開發(fā)出一個(gè)可供多人同時(shí)進(jìn)行微信二次開發(fā)的中轉(zhuǎn)平臺(tái),滿足教學(xué)和企業(yè)中多人共享微信公眾賬號(hào)進(jìn)行二次開發(fā)的要求。
關(guān)鍵詞:微信;公眾賬號(hào);多人二次開發(fā);中轉(zhuǎn)平臺(tái);PHP
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2016)01-0128-02
微信是騰訊公司于2011年1月21日推出的一個(gè)為智能終端提供即時(shí)通訊服務(wù)的免費(fèi)應(yīng)用程序,微信支持跨通信運(yùn)營商、跨操作系統(tǒng)平臺(tái)通過網(wǎng)絡(luò)快速發(fā)送免費(fèi)語音短信、視頻、圖片和文字。因其貼合大眾日常生活需求,程序界面簡單實(shí)用,現(xiàn)已成為亞洲地區(qū)最大用戶群體的移動(dòng)即時(shí)通訊軟件。微信提供的公眾平臺(tái),讓個(gè)人和企業(yè)可以打造一個(gè)微信的公眾號(hào),可以進(jìn)行服務(wù)、產(chǎn)品推廣,以及和用戶進(jìn)行互動(dòng)。
微信公眾平臺(tái)是為微信用戶提供服務(wù)的平臺(tái),而公眾平臺(tái)開發(fā)接口則是提供服務(wù)的基礎(chǔ),開發(fā)者在公眾平臺(tái)網(wǎng)站中創(chuàng)建公眾號(hào)、獲取接口權(quán)限后,可以通過接口文檔來幫助開發(fā)。而微信公眾平臺(tái)開發(fā)接口的高級(jí)功能需要繳納一定費(fèi)用進(jìn)行認(rèn)證后才能得到開通,在微信公眾平臺(tái)的二次開發(fā)教學(xué)環(huán)節(jié)中,以及在企業(yè)的開發(fā)流程中都需要能夠讓多人共享一個(gè)微信公眾賬號(hào)進(jìn)行二次開發(fā)、測(cè)試等操作。
通過掃描帶參數(shù)的二維碼來區(qū)分用戶,并將微信服務(wù)器POST過來的用戶XML數(shù)據(jù)轉(zhuǎn)發(fā)給對(duì)應(yīng)的開發(fā)人員,從而實(shí)現(xiàn)多個(gè)開發(fā)人員能同時(shí)共享一個(gè)微信公眾賬號(hào)進(jìn)行各自對(duì)立的開發(fā)、測(cè)試工作。
圖1 中轉(zhuǎn)平臺(tái)轉(zhuǎn)發(fā)XML數(shù)據(jù)
1 生成帶參數(shù)二維碼
微信公眾平臺(tái)提供有生成帶參數(shù)二維碼的接口,通過該接口,可以在二維碼中加入開發(fā)者ID等參數(shù)。如圖2就是一個(gè)包含參數(shù)1的二維碼,微信用戶掃描該二維碼,并加關(guān)注就能觸發(fā)微信服務(wù)器傳送帶有參數(shù)1的XML數(shù)據(jù)給開發(fā)者。
圖2 帶參數(shù)1的二維碼
2 建立用戶與開發(fā)人員關(guān)系
每個(gè)開發(fā)人員在進(jìn)行獨(dú)立微信公眾賬號(hào)二次開發(fā)時(shí),需要有一個(gè)接收用戶XML數(shù)據(jù)的服務(wù)器地址:developer_url,這個(gè)地址可以是內(nèi)部網(wǎng)絡(luò)的服務(wù)器地址,也可以是公眾網(wǎng)絡(luò)的服務(wù)器地址,而且端口不必限定為80,只要能被中轉(zhuǎn)平臺(tái)訪問到即可。該地址專門用來接收處理中轉(zhuǎn)平臺(tái)轉(zhuǎn)發(fā)過來的XML數(shù)據(jù)。
表1 開發(fā)者與微信用戶關(guān)系表
微信用戶掃描帶有開發(fā)人員ID值的二維碼并加關(guān)注,其XML數(shù)據(jù)中就包含了微信用戶openid和開發(fā)人員ID值。實(shí)現(xiàn)判斷的PHP代碼如下:
$postStr = file_get_contents("php://input");
if (!empty($postStr)){
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
If(!empty($postObj-> EventKey)){
$developer_id = str_replace('qrscene_', '', $postObj->EventKey);
// 將微信用戶openid($postObj->FromUserName)存入到表1中
// $developer_id對(duì)應(yīng)的行,這樣就建立了微信用戶和開發(fā)者的關(guān)系。
// 并將接收到的XML數(shù)據(jù)($postStr)轉(zhuǎn)發(fā)給對(duì)應(yīng)開發(fā)者developer_url。
}
}
3 轉(zhuǎn)發(fā)XML數(shù)據(jù)
微信用戶掃描帶參數(shù)的二維碼并加關(guān)注后,表中就存儲(chǔ)了微信用戶和開發(fā)人員之間的關(guān)系,之后中轉(zhuǎn)平臺(tái)就可以根據(jù)微信服務(wù)器發(fā)送過來的XML數(shù)據(jù)有針對(duì)性的進(jìn)行轉(zhuǎn)發(fā)。
表2 開發(fā)者與微信用戶關(guān)系表
實(shí)現(xiàn)XML數(shù)據(jù)轉(zhuǎn)發(fā)的PHP代碼如下:
// 判斷openid和哪個(gè)開發(fā)者有對(duì)應(yīng)關(guān)系,將XML數(shù)據(jù)轉(zhuǎn)發(fā)給對(duì)應(yīng)developer_url。
$options = array(
'http'=>array(
'method' => POST,
'header' => 'Content-type: text/raw\r\n',
'content' => $postStr
));
$context = stream_context_create($options);
$xml = file_get_contents($developer_url, false, $context);
// 將開發(fā)者被動(dòng)響應(yīng)的XML數(shù)據(jù)返回給微信服務(wù)器。
echo $xml;
4 結(jié)論
此中轉(zhuǎn)平臺(tái)在教學(xué)上使用以來,解決了教學(xué)上多人共享微信公眾賬號(hào)進(jìn)行二次開發(fā)、測(cè)試的問題。學(xué)生們可以在不互相干擾的情況下,獨(dú)立對(duì)自己的程序接口進(jìn)行開發(fā)、調(diào)試。而且此中轉(zhuǎn)平臺(tái)也可以應(yīng)用到企業(yè)的實(shí)際開發(fā)環(huán)境中,解決多開發(fā)者共享微信公眾賬號(hào)進(jìn)行二次開發(fā)的問題。
本文表格中的實(shí)例體現(xiàn)的開發(fā)者和微信用戶之間是1對(duì)1的關(guān)系,通過對(duì)中轉(zhuǎn)平臺(tái)程序的改進(jìn)也可以建立1對(duì)多的關(guān)系,即一個(gè)開發(fā)人員對(duì)應(yīng)多個(gè)微信用戶,甚至可以實(shí)現(xiàn)更復(fù)雜的多對(duì)多關(guān)系。此中轉(zhuǎn)平臺(tái)的機(jī)制也同樣可以應(yīng)用于易信、飛信等公眾賬號(hào)的多人共享二次開發(fā)。
參考文獻(xiàn):
[1] 微信 [EB/OL].(2015-03-13).[2015-12-21].http://baike.baidu.com/view/5117297.htm,
[2] 微信公眾平臺(tái)開發(fā)文檔 [EB/OL]. (2015-03-03).[2015-12-21].http://mp.weixin.qq.com/wiki/,
[3] php:// — Accessing various I/O streams [EB/OL]. (2015-03-16).[2015-12-21].http://php.net/manual/en/wrappers.php.php.