新聞中心
如何基于Openshift進行微信公眾號開發(fā)
作者:kaige 2015-08-24 15:08:50
云計算 OpenShift是紅帽的云開發(fā)平臺即服務(wù)(PaaS)。本文介紹了一個利用OpenShift托管Node.js Web服務(wù)進行微信公眾號開發(fā)的過程。用戶只要關(guān)注該微信號,發(fā)送英文的消息,就能收到中文翻譯的回復(fù)。下面讓我們看一下詳細內(nèi)容。

柴桑網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、自適應(yīng)網(wǎng)站建設(shè)等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)從2013年創(chuàng)立到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。
最近寫了一個微信的翻譯機器人。用戶只要關(guān)注該微信號,發(fā)送英文的消息,就能收到中文翻譯的回復(fù)。后臺是用Node.js寫的,托管在 OpenShift的Paas平臺上。翻譯過程實際上是調(diào)用微軟的Bing translation API做的,代碼中用到了alexu84的bing-translate和JacksonTian的wechat這兩個npm模塊。下面把做的過程詳細說一下。
1. 微信公眾號開發(fā)
首先是要到 https://mp.weixin.qq.com 申請一個公眾號,并申請成為開發(fā)者。目前個人只能申請訂閱號,不過訂閱號也可以和用戶進行消息的交互,這對我們的應(yīng)用來說足夠了。
成為開發(fā)者后,微信會給你一個AppID和一個AppSecret,都是一長串的字符串。在開發(fā)我們這個應(yīng)用時,只要用到AppID。
微信客戶端會接受用戶輸入的消息,并把它們轉(zhuǎn)給我們的Web服務(wù)。所以微信會要求我們填寫我們Web服務(wù)的URL地址,Token(令牌),EncodingAESKey(消息加解密密鑰)。頁面如下圖所示:
大致上,填寫好信息并提交后,微信服務(wù)器會發(fā)送一個GET請求到我們的Web服務(wù),攜帶上Token和一個隨機字符串。我們的Web服務(wù)必須按照微信開發(fā)者文檔規(guī)定的方式處理這個請求,原樣返回這個隨機字符串,這樣微信服務(wù)器才認為我們的Web服務(wù)是符合它的接入要求的。微信服務(wù)器轉(zhuǎn)發(fā)消息給我們自己的Web服務(wù)時,是以一個POST消息攜帶上一個XML數(shù)據(jù)包,我們的web服務(wù)必須解析這個XML數(shù)據(jù)包才能取得用戶發(fā)的消息。同樣,當我們回復(fù)消息給微信服務(wù)器時,也要滿足其規(guī)定的要求。所有這些,在微信的開發(fā)者文檔中都有詳細的描述。
我們當然可以仔細閱讀微信的 開發(fā)者文檔 ,并自己按要求一一實現(xiàn)對應(yīng)的接口,不過這樣太麻煩了:-)。更方便的方式是使用 JacksonTian的微信開發(fā)Node.js模塊 。使用這個模塊,我們只需要填入我們的Token,APPID以及EncodingAESKey,它自動就幫我們處理好微信服務(wù)器的驗證請求,并允許我們直接獲取/回復(fù)用戶的字符串消息,使我們不用處理XML數(shù)據(jù)解析等細節(jié)問題。在下文我會詳細介紹如何使用這個模塊。
2. 利用OpenShift托管Node.js Web服務(wù)
首先,我們要知道如何用Node.js開發(fā)一個Web服務(wù)。本文不打算詳細介紹這部分內(nèi)容?;旧?,利用express模塊,只需幾行代碼就可以搭起一個Web服務(wù),像這樣:
- var express = require('express');
- var app = express();
- app.listen(80);
- app.get('/', function (req, res) {
- res.send("hello world');
- });
搭建好web服務(wù)后,我們需要一個擁有公有IP的服務(wù)器來運行這些代碼。在這方面,我們有很多選擇,本文使用OpenShift的應(yīng)用托管服務(wù)。
Youtube上有一個很好的 視頻 介紹如何利用OpenShift建立和發(fā)布一個Node.js應(yīng)用,step by step級別的,非常的詳細。我們只需要看前30分鐘就行了。基本上,Openshift使用git來管理代碼開發(fā)以及發(fā)布的過程。你建立一個應(yīng)用,OpenShift就在云端為你創(chuàng)建了一個Git倉庫,包含一個示例的Node.js應(yīng)用,并把它在云端運行起來了。我們只要把這個Git倉庫的代碼 Clone到本地,修改其中的server.js,并把修改好的代碼push到云端,Openshift就會自動幫我們停掉當前的示例服務(wù),重新編譯代碼,重新發(fā)布并把我們修改過后的服務(wù)運行起來。超級的簡單,是不是?
下面是稍微詳細一點的步驟:
1)安裝OpenShift的客戶端工具 rhc ,我們需要利用這個工具創(chuàng)建、發(fā)布Node.js應(yīng)用
2)在command line窗口運行 $ rhc app create nodejs-0.10。這個命令為我們在云端創(chuàng)建了一個Git倉庫,把內(nèi)含的示例應(yīng)用運行起來,并把代碼幫我們clone到了本地。
3)修改server.js,運行:
$ git commit -am
$ git push
我們自己的web服務(wù)就在云端運行起來了!
3. 使用bing-translate 和wechat NPM module
這一部分稍微詳細介紹一下如何修改server.js,也就是如何使用bing-translate和wechat這兩個NPM模塊的。
還是直接上代碼吧,因為總共就不到40行代碼。其中第18行展示了如何使用wechat,第23行展示了如何使用bing-translate。
- var express = require('express');
- var kutil = require('./util/kutil.js');
- var wechat = require('wechat');
- var server_port = process.env.OPENSHIFT_NODEJS_PORT || 8080
- var server_ip_address = process.env.OPENSHIFT_NODEJS_IP || '127.0.0.1'
- var client_id_secret = kutil.readJsonFromFile('./res/client_id_secret.json');
- var wechat_app_config = kutil.readJsonFromFile('./res/wechat_app_config.json');
- var bt = require('./util/bing-translate.js').init(client_id_secret);
- var app = express();
- app.listen(server_port, server_ip_address);
- // wechat API
- app.use(express.query());
- app.use('/wechat', wechat(wechat_app_config, function (req, res, next) {
- var message = req.weixin;
- if (message.MsgType == 'text') {
- var input_word = message.Content;
- bt.translate(input_word, 'en', 'zh-CHS', function (translate_err, translate_res) {
- if (translate_err) {
- res.reply({
- content: 'translation error',
- type: 'text'
- });
- return;
- }
- var translate_result = translate_res["translated_text"];
- res.reply({
- content: translate_result,
- type: 'text'
- });
- });
- }
- }));
因為我不想在開源的代碼中明文寫上我的微信APPID等敏感信息,我又寫了一個util從Json文件中讀取這些信息。第8行是讀Bing translation app的ID和secret,第9行是讀微信的APPID等信息。這些信息都分別寫在一個Json文件中,格式如下:
- {
- "client_id": "your-Bing-translator-app-client_id",
- "client_secret": "your-Bing-translator-app-client_secret"
- }
- {
- "token": "your_wechat_app_token",
- "appid": "your_wechat_app_appid",
- "encodingAESKey": "your_wechat_app_AESKey"
- }
另外,有人可能會注意到我沒有直接使用alexu84的bing-translate模塊,而是引用了一個本地的bing- translate.js文件。這是因為我對該模塊的源文件做了少量的改動,主要是在本地cache了一個Bing translation API的token,這樣就不用每次翻譯的時候都去調(diào)微軟的Web API重新拿token了,翻譯響應(yīng)的速度會大大提高。有空的時候我會把這個改動push給alexu84試試看。
4. 關(guān)于Microsoft Bing Translation API
大家都注意到在上一部分我們要填入Bing Translation的client ID和client secret。這是因為Bing Translation API也是一個Web服務(wù),我們需要到這個 頁面 去申請一個Bing Translation的app,申請好后,就有了我們自己的client ID 和 secret。當然這里可能涉及要注冊微軟的賬號什么的,這里就不贅述了。
***, 我的代碼都放到了 GitHub 上,除了把APPID和secret什么的替換成示例的字符串,其他的就和我在OpenShift上發(fā)布的代碼一模一樣了。
參考資源
1. Jose Annunziato 如何利用OpenShift 發(fā)布 Node.js應(yīng)用的視頻: https://www.youtube.com/watch?v=wnRtA7a0ST0
2. alexu84: Bing translation API 的Node.js wrapper https://github.com/alexu84/bing-translatehttps://github.com/alexu84/bing-translate
3. JacksonTian: 微信API的Node.js wrapper https://github.com/node-webot/wechat
4. Bing Translation API: http://blogs.msdn.com/b/translation/p/gettingstarted1.aspx
5. 我的代碼示例: https://github.com/kaige/KDict/tree/master/openshift_host_code/kdict
博文出處:http://www.cnblogs.com/kaige/p/4659989.html?utm_source=tuicool
當前文章:如何基于OpenShift進行微信公眾號開發(fā)
文章分享:http://www.5511xx.com/article/dhhdsgi.html


咨詢
建站咨詢
