WeChat公衆プラットフォーム(1)-nodejsで公衆プラットフォームを構築する
9916 ワード
今日はnodejsでWeChat公衆プラットフォームを構築する方法を紹介します.
まず、WeChatの公衆プラットフォームを紹介します.WeChatはみんな知っていますが、WeChatの公衆プラットフォームは特殊なマイクロ信号です.関心のあるWeChatユーザーに一斉にメッセージを送ることができます.関心のあるユーザーも自分でサービスを調べて情報を記入してサービスを完成します.
WeChat公衆プラットフォームは現在三つのアカウントに分けられています.購読番号、サービス番号、企業番号.
購読番号は主にメディアに対して、企業の宣伝で、サービス番号より情報を送る回数が多いのが特徴です.サービス番号は主にマイクロ商家、企業などに対して、ユーザーに関心を持ってサービスを提供するために使用されます.情報を送る回数は限られていますが、多くの購読番号がないインターフェースがあります.例えば、カスタマイズメニュー、WeChat決済などです.企業番号は最近発売されたもので、企業番号は多くのサービス番号の集合に相当しています.一つの企業番号で複数のサービスをカスタマイズできますが、企業番号は企業内の人員にサービスと情報を提供するだけで、企業番号は企業内の公衆番号に対応しています.
これからどうやってWeChat公衆番号を作成するサービスを話しますか?
1、WeChat公衆プラットフォーム(できればサービス番号)を作成し、開発者モードを選択する.
2、公衆プラットフォームの舞台裏を編纂し、サービスを開始する
3、開発者モードを開くときは、urlとtokenを記入する必要があります.
下に公衆プラットフォームのバックグラウンドの編纂にとって、公衆番号のバックグラウンドポートは80ポートでなければなりません.どんな言語でもいいです.公衆プラットフォームのバックグラウンドはウェブサーバーです.php、java、.net、nodejs、pythonは全部編纂できます.
下記はnodejsバージョンの検証インターフェースコードをお送りします.
一つはgetインターフェースで、インタフェースを検証するためのものです.このurlは微信公衆プラットフォーム管理インターフェースに記入する検証urlです.getインターフェースのtokenパラメータは管理インターフェースに記入されたtokenと一致しています.
もう一つのポストインタフェースはメッセージを送るためのものです.例えば、関心者からのWeChatが1つの「1」に送られてきました.実はこの要求はまずWeChatのサーバーに送信されました.その後、WeChatサーバが再度post要求を通じて私たちのバックグラウンドに転送します.バックグラウンドでデータを整理してWeChatのバックグラウンドに送ります.最後に関心者のユーザに戻ります.
次にセグメントコードを見ます.いくつかの異なるフォーマットのデータを返します.
まず、WeChatの公衆プラットフォームを紹介します.WeChatはみんな知っていますが、WeChatの公衆プラットフォームは特殊なマイクロ信号です.関心のあるWeChatユーザーに一斉にメッセージを送ることができます.関心のあるユーザーも自分でサービスを調べて情報を記入してサービスを完成します.
WeChat公衆プラットフォームは現在三つのアカウントに分けられています.購読番号、サービス番号、企業番号.
購読番号は主にメディアに対して、企業の宣伝で、サービス番号より情報を送る回数が多いのが特徴です.サービス番号は主にマイクロ商家、企業などに対して、ユーザーに関心を持ってサービスを提供するために使用されます.情報を送る回数は限られていますが、多くの購読番号がないインターフェースがあります.例えば、カスタマイズメニュー、WeChat決済などです.企業番号は最近発売されたもので、企業番号は多くのサービス番号の集合に相当しています.一つの企業番号で複数のサービスをカスタマイズできますが、企業番号は企業内の人員にサービスと情報を提供するだけで、企業番号は企業内の公衆番号に対応しています.
これからどうやってWeChat公衆番号を作成するサービスを話しますか?
1、WeChat公衆プラットフォーム(できればサービス番号)を作成し、開発者モードを選択する.
2、公衆プラットフォームの舞台裏を編纂し、サービスを開始する
3、開発者モードを開くときは、urlとtokenを記入する必要があります.
下に公衆プラットフォームのバックグラウンドの編纂にとって、公衆番号のバックグラウンドポートは80ポートでなければなりません.どんな言語でもいいです.公衆プラットフォームのバックグラウンドはウェブサーバーです.php、java、.net、nodejs、pythonは全部編纂できます.
下記はnodejsバージョンの検証インターフェースコードをお送りします.
var express = require('express');
var router = express.Router();
var processMessage = require('./wx/processMessage');
var crypto = require('crypto');
/* GET home page. */
router.get('/', function(req, res) {
var signature = req.param('signature');
var token = "xuepiaoqiyue";
var timestamp = req.param('timestamp');
var nonce = req.param('nonce');
var echostr = req.param("echostr");
var strArr = [token,timestamp,nonce];
strArr.sort();
var msg=strArr[0]+strArr[1]+strArr[2];
var shasum = crypto.createHash('sha1');
shasum.update(msg);
var sha1 = shasum.digest('hex');
console.log(sha1);
if(sha1 == signature){
res.send(echostr);
res.write(echostr);
}else{
res.send("error");
}
});
router.post('/', function(req, res) {
var response=res;
var formData="";
req.on("data",function(data){
formData+=data;
});
req.on("end",function(){
processMessage.processMessage(formData,response);
});
});
module.exports = router;
以上の二つはurlがip:80/wxの二つのインターフェースです.一つはgetインターフェースで、インタフェースを検証するためのものです.このurlは微信公衆プラットフォーム管理インターフェースに記入する検証urlです.getインターフェースのtokenパラメータは管理インターフェースに記入されたtokenと一致しています.
もう一つのポストインタフェースはメッセージを送るためのものです.例えば、関心者からのWeChatが1つの「1」に送られてきました.実はこの要求はまずWeChatのサーバーに送信されました.その後、WeChatサーバが再度post要求を通じて私たちのバックグラウンドに転送します.バックグラウンドでデータを整理してWeChatのバックグラウンドに送ります.最後に関心者のユーザに戻ります.
次にセグメントコードを見ます.いくつかの異なるフォーマットのデータを返します.
var xml=require("node-xml");
var messageSender=require("./messageSender");
function processMessage(data,response){
console.log("data");
console.log(data);
var ToUserName="";
var FromUserName="";
var CreateTime="";
var MsgType="";
var Content="";
var Location_X="";
var Location_Y="";
var Scale=1;
var Label="";
var PicUrl="";
var FuncFlag="";
var tempName="";
var parse=new xml.SaxParser(function(cb){
cb.onStartElementNS(function(elem,attra,prefix,uri,namespaces){
tempName=elem;
});
cb.onCharacters(function(chars){
chars=chars.replace(/(^\s*)|(\s*$)/g, "");
if(tempName=="CreateTime"){
CreateTime=chars;
/*}else if(tempName=="Location_X"){
Location_X=cdata;
}else if(tempName=="Location_Y"){
Location_Y=cdata;*/
}else if(tempName=="Longitude"){
Location_X=chars;
}else if(tempName=="Latitude"){
Location_Y=chars;
}else if(tempName=="Scale"){
Scale=chars;
}
});
cb.onCdata(function(cdata){
if(tempName=="ToUserName"){
ToUserName=cdata;
}else if(tempName=="FromUserName"){
FromUserName=cdata;
}else if(tempName=="MsgType"){
MsgType=cdata;
}else if(tempName=="Content"){
Content=cdata;
}else if(tempName=="PicUrl"){
PicUrl=cdata;
}else if(tempName=="Label"){
Label=cdata;
}
console.log("cdata:"+cdata);
});
cb.onEndElementNS(function(elem,prefix,uri){
tempName="";
});
cb.onEndDocument(function(){
console.log("onEndDocument");
tempName="";
var date=new Date();
var yy=date.getYear();
var MM=date.getMonth() + 1;
var dd=date.getDay();
var hh=date.getHours();
var mm=date.getMinutes();
var ss=date.getSeconds();
var sss=date.getMilliseconds();
var result=Date.UTC(yy,MM,dd,hh,mm,ss,sss);
var msg="";
console.log(Content);
if(MsgType=="text"){
msg=" , :"+Content;
messageSender.sendTextMessage(FromUserName,ToUserName,CreateTime,msg,Content.toString(),FuncFlag,response);
}else if (MsgType="location"){
msg=" : :"+Location_X+" :"+Location_Y;
messageSender.sendLocationMessage(FromUserName,ToUserName,msg,FuncFlag,response);
}else if (MsgType="p_w_picpath"){
msg=" :"+PicUrl;
messageSender.sendTextMessage(FromUserName,ToUserName,CreateTime,msg,Content.toString(),FuncFlag,response);
}else{
messageSender.sendTextMessage(FromUserName,ToUserName,CreateTime,msg,Content.toString(),FuncFlag,response);
}
});
});
parse.parseString(data);
}
module.exports.processMessage=processMessage;
var xml=require("node-xml");
var wxdata = require("./huahengdata");
var messageSender = {};
var sendTextMessage = function(FromUserName,ToUserName,CreateTime,msg,Content,FuncFlag,response){
//console.log(arguments);
var returnObj = {type:'text',content:' ×××: 1: , 2: , 3: '};
console.log(msg);
console.log(Content);
console.log(wxdata)
if(wxdata[Content]){
if(Content){
returnObj = wxdata[Content];
}
}
var time = new Date().getTime();
var resStr = "";
if(returnObj.type == "text"){
resStr = "" +
"" +
"" +
""+time+" " +
"" +
"" +
" ";
}else if(returnObj.type == "p_w_picpath"){
resStr = "" +
"" +
"" +
""+time+" " +
"" +
"" +
"" +
"" +
" ";
}else if(returnObj.type == "news"){
resStr = "" +
"" +
"" +
""+time+" " +
"" +
""+returnObj.articleCount+" " +
"";
for(var i in returnObj.items){
var newsItem = returnObj.items[i];
resStr = resStr + "- " +
"
" +
"<description/>" +
"<picurl/>" +
"<url/>" +
"</item>"
}
resStr = resStr + "</articles>" +
"</xml>";
}else{
resStr = "<xml>" +
"<tousername/>" +
"<fromusername/>" +
"<createtime>"+time+"</createtime>" +
"<msgtype/>" +
"<content/>" +
"</xml>";
}
console.log(resStr);
response.send(resStr);
}
var sendLocationMessage = function(FromUserName,ToUserName,content,FuncFlag,response){
var time = new Date().getTime();
var resStr = "";
resStr = "<xml>" +
"<tousername/>" +
"<fromusername/>" +
"<createtime>"+time+"</createtime>" +
"<msgtype/>" +
"<content/>" +
"</xml>";
response.send(resStr);
}
module.exports.sendTextMessage = sendTextMessage;
module.exports.sendLocationMessage = sendLocationMessage;</code></pre>
<p> , , , ,</p>
<p> , <span style="color:rgb(255,0,0);">sendLocationMessage<span style="line-height:0px;"/></span><span style="line-height:0px;"/> , , , , 。</p>
<p> , 。<br/></p>
<p><br/></p>
</div>
</div>
</div>
</div>