〇、项目背景
农银e管家收银台网页版收银模块未提供语音播报功能,本项目实践旨在于开发一个辅助软件来提供二维码收款语音播报功能。
扫码盒子收款时访问https://e.abchina.com/site/CashCollect/DirectCashCollect获取收款结果,收款结果响应内容格式为JSON,内容如下:
{
"Code": 0,
"Message": "成功",
"Proposal": "",
"Value":
{
"OrderNo": "190101234567890",
"ErrorMessage": null,
"IsWaiting": false
},
"SecAlg": null
}
一、技术选型
(一)Chrome浏览器插件
第一次考虑使用谷歌浏览器“扩展功能”(插件)的形式去辅助农银e管家相关的功能模块,插件可同时用于360极速浏览器、FireFox等浏览器,目的在于为可以安装专属的该类型浏览器,在桌面创建自动打开农银e管家的快捷方式方便客户使用。
根据谷歌浏览器插件开发的原则,插件能够获取网页的DOM内容,可以获取指定URL请求响应头的内容,但不能获取响应(Response) 的内容。因此放弃了Chrome浏览器插件作为技术选型。
(二)HTTP/HTTPS Proxy
开源平台上有Anyproxy、Whistler、Mitmproxy等网络代理服务器,可以对使用代理访问网络的浏览器进行监控、
根据调研选取Alibaba的Anyproxy作为基础进行二次开发。相关开发环境如下:
PC:Windows7 x64
Node.js :v8.15.1-x64
Anyproxy:v3.10.6
最新版的node(v10.15.3)和Anyproxy(v4.1.0)配合经常崩掉,不要问我为什么,退而求其次选择了历史稳定版本。
三、开发实战
(一)初始化node项目
新建项目文件夹后,在命令行打开,执行以下命令
npm init
#填写相关信息
npm i anyproxy@3.10.6 --save
(二)新建项目入口文件
根据填写的项目信息新建入口文件,一般为index.js
(三)index.js示例
const AnyProxy = require('anyproxy');
const options = {
port: 8001,
rule: require('./myRuleModule.js'),
disableWebInterface: false,
webPort: 8002,
throttle: 10000,
forceProxyHttps: false,
wsIntercept: false, // 不开启websocket代理
silent: false,
interceptHttps: true
};
if(!AnyProxy.isRootCAFileExists()){
console.log("RootCA File not Exists");
AnyProxy.generateRootCA(function(error, keyPath, crtPath){
console.log(error);
});
} else {
console.log("RootCA File Exists");
};
const proxyServer = new AnyProxy.proxyServer(options);
(四)myRuleModule.js示例
module.exports = {
replaceServerResDataAsync: function (req, res, serverResData, callback) {
if(req.url.indexOf("https://e.abchina.com/site/CashCollect/DirectCashCollect")){
console.log("+++++++++++++++++Start+++++++++++++++");
console.log(serverResData.toString());
console.log("++++++++++++++++++End++++++++++++++++");
}
callback(serverResData);
}
}
(五)设置浏览器代理并访问农银e管家收银台进行收款
1.运行自主研发辅助软件
node index
运行后会自动在“用户文件夹\.anyproxy_cert”下保存HTTPS监控所用的证书,双击该证书并添加至受信任根证书下,否则辅助软件将不能对HTTPS类型的请求进行监控。
2.安装chrome代理插件:SwitchyOmega
设置代理为127.0.0.1:8001,应用设置并运行代理插件
3.访问127.0.0.1:8002进入Anyproxy的GUI查看监听
4.访问农银e管家收银台进行收款
收款成功后cmd控制台将能看到以下输出
received request to : e.abchina.com/site/CashCollect/DirectCashCollect
==>will forward to real server by proxy
+++++++++++++++++Start+++++++++++++++
{"Code":0,"Message":"成功","Proposal":"","Value":{"OrderNo":"190101234567890"
sWaiting":false},"SecAlg":null}
++++++++++++++++++End++++++++++++++++
网友评论