国产编程语言CBrother脚本
前段时间一直纠结使用何种编程语言开发自己的后台程序。因为干程序猿也好几个年头了,搞过C++、Java、Js等, 所以最初想选择Java框架或者NodeJs(Php语法不熟悉就忽略不计),但是作为一个初学者,Java框架开发难度大并不适合我这等初学者、同时也了解到NodeJs在开发方面CPU 和内存上有先天性的缺陷。所以经过一段时间的寻找,终于找个一个国内大神写的编程语言CBrother, 因为有语法基础,在加上大神详细的文档,让我的开发事半功倍。
CBrother官方网址:http://www.cbrother.net
创建工程
首先,从官网上下载对应的版本,解压到自己的目录。如我解压到了C:\webwork(因为我使用腾讯云Window2008R2, 下载的是cbrother-64.zip)
启动服务
在C:\webwork项目根目录,并新建txt文件,重命名为main.cb, 在main.cb文件里写入下面的代码, 启动服务。
import CBHttp.code
function main(parm) {
var httpServer = new HttpServer();
httpServer.startServer();
while(1) //主线程不能退出
{
Sleep(1000);
}
}
在命令行窗口输入如下:
C:\webwork\cbrother.exe -run -rootpath=C:\webwork\main-code=main.cb -parm=1
服务启动成功!!
实现动态登录接口
function main(parm)
{
var httpServer = new HttpServer();
httpServer.addAction("login.cb",new LoginAction()); //注册登录接口logIn.cb,响应类是LoginAction
/*
* 如上所示
*/
}
接下来实现LoginAction接口**(用于微信sdk登录)**
class LoginAction
{
var m_HttpServer = null;
function DoAction(req,respon)
{
m_HttpServer.Trace("LoginAction in!!!");
var data = req.GetData();
if (data == null)
{
var idata = new Json();
idata.add("status", SERVER_READ_FAILED);
respon.Write(idata.toJsonString());
respon.Flush();
return;
}
/* 微信登录 */
//解析json
var logjson = new Json(data);
var wxcode = logjson.get("code");
var rawData = logjson.get("rawData");
var signature = logjson.get("signature");
var encryptedData = logjson.get("encryptedData");
var iv = logjson.get("iv");
if(wxcode == null || wxcode == null || rawData == null || signature == null || encryptedData == null || iv == null)
{
idata = new Json();
idata.add("status", SERVER_READ_FAILED);
respon.Write(idata.toJsonString());
respon.Flush();
m_HttpServer.Trace("LoginAction out!!!");
return;
}
/* HttpClientRequest来主动访问微信第三方接口 */
var clientReq = new HttpClientRequest();
clientReq.SetMethod(HTTP_GET);
var requrl = "https://api.weixin.qq.com/sns/jscode2session?appid=" + APP_ID + "&secret=" + APP_SECRET + "&js_code=" + wxcode + "&grant_type=authorization_code";
clientReq.SetUrl(requrl);
var clientResponse = clientReq.Flush();
var staus = clientResponse.GetStaus();
if(staus != HTTP_OK)
{
idata = new Json();
idata.add("status", SERVER_READ_FAILED);
respon.Write(idata.toJsonString());
respon.Flush();
m_HttpServer.Trace("LoginAction out!!!");
return;
}
var wxdata = clientResponse.GetData();
var wxjson = new Json(wxdata);
var errcode = wxjson.get("errcode");
if(errcode != null)
{
idata = new Json();
idata.add("status", SERVER_READ_FAILED);
respon.Write(idata.toJsonString());
respon.Flush();
m_HttpServer.Trace("LoginAction out!!!");
return;
}
var openid = wxjson.get("openid");
var session_key = wxjson.get("session_key");
var unionid = wxjson.get("unionid");
/* 使用OpenSSL 加密算法 */
var sha1str = openssl_sha1(rawData + session_key);
if(sha1str != signature)
{
idata = new Json();
idata.add("status", SERVER_READ_FAILED);
respon.Write(idata.toJsonString());
respon.Flush();
m_HttpServer.Trace("LoginAction out!!!");
return;
}
var userdatajson = decryptData(APP_ID,session_key,iv,encryptedData);
if(userdatajson == null)
{
idata = new Json();
idata.add("status", SERVER_READ_FAILED);
respon.Write(idata.toJsonString());
respon.Flush();
m_HttpServer.Trace("LoginAction out!!!");
return;
}
var userjson = new Json(userdatajson);
var res = m_HttpServer.Command(m_UserDataIdx, LOGIN_USERDATA, userjson);
var result = new Json();
if(res > 0)
{
/* 服务器Cookie */
respon.SetCookie("" + res);
result.add("status", SERVER_CODE_SUCCESS);
result.add("uid",res);
respon.Write(result.toJsonString());
}
else
{
result.add("status", SERVER_CODE_FAILED);
respon.Write(result.toJsonString());
}
respon.Flush();
m_HttpServer.Trace("LoginAction out!!!");
}
是不是很简单!!!
MySQL的支持
之前对MySQL的了解不是很多,为了学习后台开发,专门花费了些许时间系统学习了MySQL,对一个新手来说困难可想而知,有一段时间都想放弃。但是自从遇到CBrother后,它对MySQL开发了扩展库,让我的学习成本一下降低了很多(强大的扩展库)
初学者建议
这是一门很不错的国产编程大神之作,也希望推荐给和我一样的初学者。
本人愚见,还请各位大神多多指教!!!
同时也感谢CBrother作者对于我项目的支持!!!
期待和大家分享下一篇关于CBrother脚本开发经验。