Merge branch 'master' of ssh://source.supwisdom.com:12388/epayment/epayapidocs
diff --git "a/source/_posts/\344\270\200\345\215\241\351\200\232v5\345\234\210\345\255\230\345\257\271\346\216\245\345\211\215\347\275\256\346\216\245\345\217\243\346\226\207\346\241\243.md" "b/source/_posts/\344\270\200\345\215\241\351\200\232v5\345\234\210\345\255\230\345\257\271\346\216\245\345\211\215\347\275\256\346\216\245\345\217\243\346\226\207\346\241\243.md"
index b90d185..e87bb55 100644
--- "a/source/_posts/\344\270\200\345\215\241\351\200\232v5\345\234\210\345\255\230\345\257\271\346\216\245\345\211\215\347\275\256\346\216\245\345\217\243\346\226\207\346\241\243.md"
+++ "b/source/_posts/\344\270\200\345\215\241\351\200\232v5\345\234\210\345\255\230\345\257\271\346\216\245\345\211\215\347\275\256\346\216\245\345\217\243\346\226\207\346\241\243.md"
@@ -8,10 +8,19 @@
 |日期         |版本      |作者        |说明              |
 |------------:|---------:|-----------:|------------------|
 |2015-4-14    |V1.0     | 汤成        | 初稿             |
+|2017-2-13    |V1.1     | 夏凯祥       | V1.1             |
 
 
 ## 背景
-在项目中进行银行圈存对接开发时需要对悦校与一卡通同时支持,
+在项目中进行银行圈存对接开发时需要对悦校与一卡通同时支持。此文档为一卡通系统与银行圈存前置的对接规范,用户可根据实际情况实现前置与银行业务的对接。
+
+
+## 约定 ##
+
+1.	传输编码统一为utf-8
+2. 请求数据都用HAMC签名加密,收到请求参数后可验证数据正确性,秘钥共同约定。**`SIGN_ALGORITHMS ="HmacSHA1"`**;
+3. **retcode** 等于"0"(字符串)表示成功,其他表示失败,失败具体信息查看 **retmsg**
+
 
 ## 接口定义
 
@@ -19,34 +28,36 @@
 * **URL: /bankservice/bankquery**
 
 * **请求方式**
-`GET`, `POST`
+`POST`
 
-查询银行余额,根据银行实际情况不是所有银行都支持
+*查询银行余额,根据银行实际情况不是所有银行都支持*
 
-* **请求**
-`bankaccount` - 银行账号
-`custname` - 用户名,必须是该用户在银行的开户名(可选)
-`stuempno` - 学工号,可选
-`termid` - 发起终端号
-`tradetime` - 发起方时间,格式 yyyyMMddHHmmss
-`seqno` - 发起方流水号(可选)
-`timeout` - (可选)前置机与银行通讯的超时时间,单位秒,范围 1 ~ 90 , 默认值为10
+* **请求参数**
+- `bankcardno` - 银行账号(银行卡号)
+- `custname` - 用户姓名,必须是该用户在银行的开户名(可选)
+- `stuempno` - 系统唯一号,如学工号、客户号(可选)
+- `idno` - 身份证号(可选)
+- `termid` - 发起终端号(可选)
+- `tradetime` - 发起方时间,格式 yyyyMMddHHmmss
+- `seqno` - 发起方流水号(可选)
+- `timeout` - (可选)前置机与银行通讯的超时时间,单位秒,范围 1 ~ 90 , 默认值为10
+- `sign` - 签名。除sign的非空字段按上述顺序拼接进行签名加密,如(bankcardno+stuempno+termid+tradetime+timeout)。
 
 * **返回**
-`ret` - "00"标识操作成功,其余为异常情况
-`retmsg` - 返回信息
-`money` - 银行卡余额,单位元
+- `retcode` - "0" 标识操作成功,其余为异常情况
+- `retmsg` - "msg" 返回信息
+- `money` - 银行卡余额,单位元
 
 ```json
 {
-    "ret":"00",
+    "retcode":"0",
     "retmsg":"msg", // 异常原因
-    "money":12.3 //单位(元)
+    "money":412.3 //单位(元)
 }
 ```
 
 ### 2. 圈存请求
-* **URL: /bankservice/load**
+* **URL: /bankservice/charge**
 
 * **请求方式**
 `POST`
@@ -54,25 +65,27 @@
 银行圈存请求,通过该请求完成银行卡转账业务
 
 * **请求**
-`bankaccount`   -   银行卡号
-`seqno` - 悦校/一卡通交易参考号
-`stuempno` - (可选)学工号
-`custname` - (可选)客户姓名
-`amount` - 圈存金额,单位元
-`termid` - (可选)终端编号
-`tradetime` - 请求时间, 格式yyyyMMddHHmmss
-`timeout` - (可选)前置机与银行通讯的超时时间,单位秒,范围 1 ~ 90 , 默认值为10
+- `bankcardno` - 银行卡号
+- `refno` - 系统交易参考号
+- `stuempno` - 系统唯一号,如学工号、客户号
+- `custname` - 客户姓名(可选)
+- `idno` - 客户姓名(可选)
+- `amount` - 圈存金额,单位分(整数)
+- `termid` - 终端编号(可选)
+- `tradetime` - 请求时间, 格式yyyyMMddHHmmss
+- `timeout` - (可选)前置机与银行通讯的超时时间,单位秒,范围 1 ~ 90 , 默认值为10
+- `sign` 签名。除sign的非空字段按上述顺序拼接进行签名加密,如(bankcardno+refno+stuempno+custname+idno+amount+termid+ tradetime+timeout)。
 
 * **返回**
-`ret` - "00"标识操作成功,其余为异常情况
-`bankseqno` - (可选)返回银行端流水号,但不是所有银行都支持返回银行端流水号
-`retmsg` - 返回信息
+- `retcode` - "0" 标识操作成功,其余为异常情况
+- `retmsg` - "msg" 返回信息
+- `bankseqno` - (可选)返回银行端流水号,但不是所有银行都支持返回银行端流水号
 
 ```json
 {
-    "ret":"00",
+    "retcode":"0",
+    "retmsg":"msg", // 返回信息 
     "bankseqno": "1231", // 如果银行支持,返回银行端流水号
-    "retmsg":"msg" // 返回信息
 }
 ```
     
@@ -80,65 +93,118 @@
 * **URL: /bankservice/transquery**
 
 * **请求方式**
-`GET`, `POST`
+ `POST`
 
-查询圈存请求的结果,一般是圈存请求超时后通过这个接口判断银行交易是否成功,但不是所有银行都支持这个接口
+根据系统交易参考号查询圈存请求的结果,一般是圈存请求超时后通过这个接口判断银行交易是否成功,但不是所有银行都支持这个接口
 
 * **请求**
-`bankaccount`   -   银行卡号
-`seqno` - 悦校/一卡通交易参考号
-`loadseqno` - 前一笔圈存交易的参考号
-`stuempno` - (可选)学工号
-`custname` - (可选)客户姓名
-`amount` - 圈存金额,单位元
-`termid` - (可选)终端编号
-`tradetime` - 请求时间, 格式yyyyMMddHHmmss
-`timeout` - (可选)前置机与银行通讯的超时时间,单位秒,范围 1 ~ 90 , 默认值为10
+- `bankcardno`   -   银行卡号
+- `refno` - 系统交易参考号
+- `stuempno` - (可选)学工号
+- `custname` - (可选)客户姓名
+- `idno` - (可选)身份证号码
+- `amount` - 圈存金额,单位分(整数)
+- `termid` - (可选)终端编号
+- `tradetime` - 请求时间, 格式yyyyMMddHHmmss
+- `timeout` - (可选)前置机与银行通讯的超时时间,单位秒,范围 1 ~ 90 , 默认值为10
+- `sign` - 签名。除sign的非空字段按上述顺序拼接进行签名加密。
 
 * **返回**
-`ret` - "00" 标识查询到指定的圈存流水,"01" 标识无指定流水,其它表示错误
-`bankseqno` - (可选)如果查询到圈存流水则返回银行端流水号,但不是所有银行都支持返回银行端流水号
-`retmsg` - 返回信息
+- `retcode` - "0" 标识查询到指定的圈存流水,并交易成功;"01" 标识无指定流水,其它表示错误
+- `retmsg` -"msg" 返回信息
+- `bankseqno` - (可选)如果查询到圈存流水则返回银行端流水号,但不是所有银行都支持返回银行端流水号
 
 ```json
 {
-    "ret":"00",
-    "bankseqno": 123, // 银行端流水号
+    "retcode":"0",
     "retmsg":"msg" // 返回信息
+    "bankseqno": 123, // 银行端流水号
 }
 ```
 
-### 4. 圈存冲正
-* **URL: /bankservice/loadcancel**
+### 4. 圈存冲正(退款)
+* **URL: /bankservice/chargereverse**
 
 * **请求方式**
-`GET`, `POST`
+`POST`
 
 圈存冲正接口,一般是圈存请求超时后通过这个接口冲正前面一笔圈存交易,但不是所有银行都支持这个接口
 
 * **请求**
-`bankaccount`   -   银行卡号
-`seqno` - 悦校/一卡通交易参考号
-`loadseqno` - 前一笔圈存交易的参考号
-`stuempno` - (可选)学工号
-`custname` - (可选)客户姓名
-`amount` - 圈存金额,单位元
-`termid` - (可选)终端编号
-`tradetime` - 请求时间, 格式yyyyMMddHHmmss
-`timeout` - (可选)前置机与银行通讯的超时时间,单位秒,范围 1 ~ 90 , 默认值为10
+- `bankcardno` - 银行卡号
+- `refno` - 系统交易参考号
+- `reverserefno` - 前一笔要冲正的圈存交易的参考号
+- `stuempno` - (可选)学工号
+- `custname` - (可选)客户姓名
+- `idno` - (可选)身份证号
+- `amount` - 金额,单位分(整数)
+- `termid` - (可选)终端编号
+- `tradetime` - 请求时间, 格式yyyyMMddHHmmss
+- `timeout` - (可选)前置机与银行通讯的超时时间,单位秒,范围 1 ~ 90 , 默认值为10
+- `sign` 签名。除sign的非空字段按上述顺序拼接进行签名加密
 
 * **返回**
-`ret` - "00" 标识冲正成功,其它表示错误
-`bankseqno` - (可选)返回银行端流水号,但不是所有银行都支持返回银行端流水号
-`retmsg` - 返回信息
+- `retcode` - "0" 标识冲正成功,其它表示错误
+- `retmsg` - 返回信息
+- `bankseqno` - (可选)返回银行端流水号,但不是所有银行都支持返回银行端流水号
 
 ```json
 {
-    "ret":"00",
+    "retcode":"00",
     "retmsg":"msg", // 返回信息
-    "bankseqno" : 12
+    "bankseqno":"122121"
 }
 ```
 
+### 5. 圈存对账
+* **URL: /bankservice/chargedtlchk**
+
+* **请求方式**
+`POST`
+
+圈存流水对账接口,一卡通系统每天定时的访问这个接口查询前一天或过去某一天的全部圈存流水(交易成功),与系统记录的圈存流水进行比对,不一致时进行业务处理。
+
+* **请求**
+- `transdate` - 查询日期,yyyyMMdd
+- `bankid` - 银行标识
+- `billtype` - 查询类型,有的银行圈存转账和退款可能是分开的。"ALL"-查询圈存和冲正(退款)所有交易成功的流水;"SUCCESS"-查询圈存交易成功的流水;"REFUND"-查询冲正(退款)所有交易成功的流水。
+- `offset` - 偏移量,int型,初始为0
+- `tradetime` - 请求时间, 格式yyyyMMddHHmmss
+- `timeout` - (可选)前置机与银行通讯的超时时间,单位秒,范围 1 ~ 90 , 默认值为10
+- `sign` 签名。除sign的非空字段按上述顺序拼接进行签名加密
+
+* **返回**
+- `retcode` - "0" 标识冲正成功,其它表示错误
+- `retmsg` -"msg" 返回信息
+- `hasnext` - true或false。是否继续查询的标志。true继续查询,false结束查询
+- `offset` - 继续查询时的偏移量,int型。
+- `data` - 流水数据集合。
+	- `transdate` - 交易日期 yyyyMMdd
+	- `transtime` - 交易时间 HHmmss
+	- `stuempno` - 系统唯一号,如学工号、客户号
+	- `bankcardno` - 银行账号
+	- `refno` - 系统交易参考号,
+	- `bankseqno` - 银行端流水号
+	- `amount` - 交易金额,单位元
+
+
+```json
+{
+    "retcode":"0",
+    "retmsg":"msg", // 返回信息
+    "hasnext":true,
+    "offset":99,
+    "data":[
+    			{
+    				"transdate":"20160901",
+    				"tramsdate":"142328",
+    				"stuempno":"20170001",
+    				"bankcardno":"6022111001004394733",
+    				"refno":"20160901142328000023",
+    				"bankseqno":"1020160901142328130713",
+    				"amount":50.0
+    			},...]
+}
+```
 
 
diff --git "a/source/_posts/\344\270\200\345\215\241\351\200\232v5\347\224\265\346\216\247\345\257\271\346\216\245\345\211\215\347\275\256\346\216\245\345\217\243\346\226\207\346\241\243.md" "b/source/_posts/\344\270\200\345\215\241\351\200\232v5\347\224\265\346\216\247\345\257\271\346\216\245\345\211\215\347\275\256\346\216\245\345\217\243\346\226\207\346\241\243.md"
new file mode 100644
index 0000000..60f66da
--- /dev/null
+++ "b/source/_posts/\344\270\200\345\215\241\351\200\232v5\347\224\265\346\216\247\345\257\271\346\216\245\345\211\215\347\275\256\346\216\245\345\217\243\346\226\207\346\241\243.md"
@@ -0,0 +1,260 @@
+---
+title: 一卡通v5电控对接前置接口文档
+date: 2017-02-13 13:45:23
+tags:
+---
+
+
+|日期         |版本      |作者        |说明              |
+|------------:|---------:|-----------:|------------------|
+|2017-2-13    |V1.0     | 夏凯祥       | 初稿             |
+
+
+## 背景
+悦校/一卡通系统与电控系统的对接需要经过电控前置服务。此文档为一卡通系统与电控前置的对接规范,用户可根据实际情况实现前置与电控系统的业务对接。
+
+
+## 约定 ##
+
+1.	传输编码统一为utf-8
+2. **retcode** 等于"0"(字符串)表示成功,其他表示失败,失败具体信息查看 **msg**
+3. 宿舍房间在悦校/一卡通中规定了五级,校区(area)/区域(district)/楼栋(build)/楼层(floor)/房间(room)。级别不符合的请修改适应此规则。
+
+
+## 接口定义
+
+### 1. 查询所有校区
+* **URL: /elec/getareas**
+
+* **请求方式**
+`POST`
+
+*查询所有校区信息*
+
+* **请求参数**
+无
+
+* **返回**
+- `retcode` - "0" 标识操作成功,其余为异常情况
+- `msg` - "msg" 返回信息
+- `data` - 校区数据集合
+	- areaId - 校区ID
+	- areaName - 校区名称
+
+```json
+{
+    "retcode":"0",
+    "msg":"成功", // 异常原因
+    "data":[{
+    			"areaId":"1",
+    			"areaName":"邯郸校区"
+    		  },{
+    			"areaId":"2",
+    			"areaName":"枫林校区"
+    		}]
+}
+```
+
+### 2. 查询所有区域
+* **URL: /elec/getdistricts**
+
+* **请求方式**
+`POST`
+
+*查询某一校区下的所有区域*
+
+* **请求参数**
+- `area` - 查询校区返回的areaId
+
+* **返回**
+- `retcode` - "0" 标识操作成功,其余为异常情况
+- `msg` - "msg" 返回信息
+- `data` - 区域数据集合
+	- districtId - 区域ID
+	- districtName - 区域名称
+
+```json
+{
+    "retcode":"0",
+    "msg":"成功", // 异常原因
+    "data":[{
+    			"districtId":"01",
+    			"districtName":"一期公寓"
+    		  },{
+    			"districtId":"02",
+    			"districtName":"二期公寓"
+    		  }]
+}
+```
+    
+### 3. 查询楼栋信息
+* **URL: /elec/getbuis**
+
+* **请求方式**
+ `POST`
+
+*根据校区、区域查询楼栋*
+
+* **请求**
+- `area`   - 查询校区返回的areaId
+- `district` - 查询区域返回的districtId
+
+* **返回**
+- `retcode` - "0" 标识操作成功,其余为异常情况
+- `msg` - "msg" 返回信息
+- `data` - 数据集合
+	- buiId - 楼栋ID
+	- buiName - 楼栋名称
+
+```json
+{
+    "retcode":"0",
+    "msg":"成功", // 异常原因
+    "data":[{
+    			"buiId":"010",
+    			"buiName":"男生公寓10栋"
+    		  },{
+    			"buiId":"020",
+    			"buiName":"女生公寓20栋"
+    		  }]
+}
+```
+
+### 4. 查询楼层信息
+* **URL: /elec/getfloors**
+
+* **请求方式**
+ `POST`
+
+*根据校区、区域、楼栋查询楼层*
+
+* **请求**
+- `area`   - 查询校区返回的areaId
+- `district` - 查询区域返回的districtId
+- `bui` - 查询楼栋返回的buiId
+
+* **返回**
+- `retcode` - "0" 标识操作成功,其余为异常情况
+- `msg` - "msg" 返回信息
+- `data` - 数据集合
+	- floorId - 楼层ID
+	- floorName - 楼层名称
+
+```json
+{
+    "retcode":"0",
+    "msg":"成功", // 异常原因
+    "data":[{
+    			"floorId":"1",
+    			"floorName":"一楼"
+    		  },{
+    			"floorId":"2",
+    			"floorName":"二楼"
+    		  },...]
+}
+```
+
+### 5. 查询所有房间信息
+* **URL: /elec/getrooms**
+
+* **请求方式**
+ `POST`
+
+*查询房间信息*
+
+* **请求**
+- `area`   - 查询校区返回的areaId
+- `district` - 查询区域返回的districtId
+- `bui` - 查询楼栋返回的buiId
+- `floor` - 查询楼层返回的floorId
+
+* **返回**
+- `retcode` - "0" 标识操作成功,其余为异常情况
+- `msg` - "msg" 返回信息
+- `data` - 数据集合
+	- roomId - 房间ID
+	- roomName - 房间名称
+
+```json
+{
+    "retcode":"0",
+    "msg":"成功", // 异常原因
+    "data":[{
+    			"roomId":"1010",
+    			"roomName":"1010室"
+    		  },{
+    			"roomId":"2009",
+    			"roomName":"2009室"
+    		  },{
+    			"roomId":"2",
+    			"roomName":"2025室"
+    		  },...]
+}
+```
+
+### 6. 查询房间电量信息
+* **URL: /elec/getroom**
+
+* **请求方式**
+ `POST`
+
+*查询房间信息*
+
+* **请求**
+- `area`   - 查询校区返回的areaId
+- `bui` - 查询楼栋返回的buiId
+- `room` - 查询房间返回的roomId
+
+* **返回**
+- `retcode` - "0" 标识操作成功,其余为异常情况
+- `msg` - "msg" 返回信息
+- `data` - 数据类
+	- areaId - 校区ID
+	- buiId - 楼栋ID
+	- roomId - 房间ID
+	- roomName - 房间名
+	- restElecDegree - 剩余电量
+
+```json
+{
+    "retcode":"0",
+    "msg":"成功", // 异常原因
+    "data":{
+    			"areaId":"2",
+    			"buiId":"20",
+    			"roomId":"2010",
+    			"roomName":"2010室",
+    			"restElecDegree":12.0
+    		 }
+}
+```
+
+### 7. 电费转账(充值)
+* **URL: /elec/buyelec**
+
+* **请求方式**
+ `POST`
+
+*查询房间信息*
+
+* **请求**
+- `area`   - 查询校区返回的areaId
+- `bui` - 查询楼栋返回的buiId
+- `room` - 查询房间返回的roomId
+- `cust` - 系统唯一号,学工号或客户号
+- `amount` - 转账金额,单位分
+- `transtime` - 交易时间
+- `transno` - 系统的交易参考号 
+- `sign` - 按上面参数顺序拼接最后加上秘钥进行MD5加密。(area + bui + room + cust + amount + transtime + transno + elec_key)
+
+* **返回**
+- `retcode` - "0" 标识操作成功,其余为异常情况
+- `msg` - "msg" 返回信息
+
+
+```json
+{
+    "retcode":"0",
+    "msg":"成功", // 异常原因
+}
+```
diff --git "a/source/_posts/\344\270\200\345\215\241\351\200\232v5\347\263\273\347\273\237\345\256\211\350\243\205\351\203\250\347\275\262\346\211\213\345\206\214.md" "b/source/_posts/\344\270\200\345\215\241\351\200\232v5\347\263\273\347\273\237\345\256\211\350\243\205\351\203\250\347\275\262\346\211\213\345\206\214.md"
index 1093a0f..d6f5d5f 100644
--- "a/source/_posts/\344\270\200\345\215\241\351\200\232v5\347\263\273\347\273\237\345\256\211\350\243\205\351\203\250\347\275\262\346\211\213\345\206\214.md"
+++ "b/source/_posts/\344\270\200\345\215\241\351\200\232v5\347\263\273\347\273\237\345\256\211\350\243\205\351\203\250\347\275\262\346\211\213\345\206\214.md"
@@ -9,37 +9,88 @@
 | 修改日期  | 版本  | 修改内容 | 修改人 |
 |----------|-------|--------|--------|
 | 2015-10-06| v1.0 |  建立    | 夏凯祥 |
-| 2016-06-22| v1.1 | 增加服务环境配置要求等内容 | 汤成 |
+| 2016-06-22| v1.1 | 增加服务器环境配置要求等内容 | 汤成 |
+| 2016-10-28| v1.2 | 增加服务器 ulimit 配置要求 | 汤成 |
 
 ## 部署环境
 * **系统拓扑图**
 ![网络拓扑图](https://ykt.supwisdom.com/yktdocs/imgs/一卡通在线支付平台.png)
 
 * **数据库**
-数据库包括一卡通核心交易数据库(Oracle 11g)和缓存服务数据库(Redis)。交易数据库安装配置有专门DBA负责;缓存数据库由实施工程师负责安装配置,缓存服务器要求 4核CPU,8G 内存,500G 硬盘,一块千兆网卡。
+
+    数据库包括一卡通核心交易数据库(Oracle 11g)和缓存服务数据库(Redis)。交易数据库安装配置有专门DBA负责;缓存数据库由实施工程师负责安装配置,缓存服务器要求 4核CPU,8G 内存,500G 硬盘,一块千兆网卡。
+    
+    Redis 缓存服务安装采用 yum 从软件中心安装。
 
 * **应用服务器**
-应用服务器提供一卡通服务门户、一卡通管理平台业务功能。一般需要部署两台服务器作为应用集群。服务器要求 4核CPU,8G 内存,200G硬盘,一块千兆网卡。操作系统为 [`CentOS 7`](http://www.centos.org) 或 [`OracleLinux 7`](https://www.oracle.com/linux/index.html) 64 位。
+
+    应用服务器提供一卡通服务门户、一卡通管理平台业务功能。一般需要部署两台服务器作为应用集群。服务器要求 4核CPU,8G 内存,200G硬盘,一块千兆网卡。操作系统为 [`CentOS 7`](http://www.centos.org) 或 [`OracleLinux 7`](https://www.oracle.com/linux/index.html) 64 位。
 
 * **API 服务器**
-API 服务器提供一卡通平台业务服务API,提供给包括设备前置、第三方应用前置、支付宝微信等充值服务前置接入的 API 服务。至少部署两台服务器作为应用集群,现场需要根据实际负载情况考虑增加 API 服务器数量。服务器要求 4核CPU,8G 内存,200G硬盘,一块千兆网卡。操作系统为 `CentOS 7` 或 `OracleLinux 7` 64 位。
+
+    API 服务器提供一卡通平台业务服务API,提供给包括设备前置、第三方应用前置、支付宝微信等充值服务前置接入的 API 服务。至少部署两台服务器作为应用集群,现场需要根据实际负载情况考虑增加 API 服务器数量。服务器要求 4核CPU,8G 内存,200G硬盘,一块千兆网卡。操作系统为 `CentOS 7` 或 `OracleLinux 7` 64 位。
 
 * **nginx 代理服务器**
-nginx 代理服务器提供了对应用服务、API服务的反向代理服务。从安全性的要求,需要提供一卡通外网访问地址,并且服务器需要启用 HTTPS 安全访问方式。推荐使用学校申请的 HTTPS 安全证书,如果环境不具备可以选择自行颁发不受信证书。
 
-	服务器要求 2核CPU,4G 内存,200G硬盘,两块千兆网卡。操作系统为 `CentOS 7` 或 `OracleLinux 7` 64 位。
+    nginx 代理服务器提供了对应用服务、API服务的反向代理服务。从安全性的要求,需要提供一卡通外网访问地址,并且服务器需要启用 HTTPS 安全访问方式。推荐使用学校申请的 HTTPS 安全证书,如果环境不具备可以选择自行颁发不受信证书。
+
+	服务器要求 2核CPU,4G 内存,200G硬盘,两块千兆网卡。操作系统为 `CentOS 7` 或 `OracleLinux 7` 64 位。nginx 服务使用 yum 从软件中心安装。
 
 	nginx 服务必须提供容错和负载功能,有两种部署方案:
 	* CDN 域名解析
 	* LVS + Keepalived 容错服务
 
 
-
-* **各种前置服务**
+* **前置服务**
 前置服务包括消费前置、门禁前置、微信支付宝充值服务前置、圈存前置等等。前置服务需要根据现场使用情况进行配置,无特殊要求下,前置服务器配置:2核CPU,4G 内存,200G硬盘,一块千兆网卡,操作系统为 `CentOS 7` 或 `OracleLinux 7` 64 位。
 
 	`消费前置`- 消费前置可以部署两台实现容错。消费网关可以配置连接两台消费前置,网关会自动判断请求正常的消费前置。
 
+## 服务器要求
+**所有**的服务器必须按照下面要求进行配置。
+
+* **字符集**
+
+    要求所有服务器必须采用 UTF-8 字符集。
+    
+* **SELinux**
+    
+    服务器需要关闭 SELinux 。修改 /etc/selinux/config 文件, 将SELINUX=enforcing改为SELINUX=disabled,然后重启服务器。 
+    **注意**:需要仔细检查是否拼写正确,否则服务器将无法启动。
+    
+* **系统参数 ulimit**
+
+    需要调整服务器 ulimit 限制参数, 可以修改 /etc/security/limits.conf 增加以下几行:
+    
+~~~bash
+* soft nofile 65536
+* hard nofile 65536
+* soft nproc 131072
+* hard nproc 131072
+~~~
+
+修改完成后需要重新登录服务器,然后通过 ulimit -a 命令检查配置,正确的配置如下, 只要注意检查 open files 和 max user processes 参数值即可。
+
+```
+$ ulimit -a

+core file size          (blocks, -c) 0

+data seg size           (kbytes, -d) unlimited

+scheduling priority             (-e) 0

+file size               (blocks, -f) unlimited

+pending signals                 (-i) 62620

+max locked memory       (kbytes, -l) 64

+max memory size         (kbytes, -m) unlimited

+open files                      (-n) 65536

+pipe size            (512 bytes, -p) 8

+POSIX message queues     (bytes, -q) 819200

+real-time priority              (-r) 0

+stack size              (kbytes, -s) 10240

+cpu time               (seconds, -t) unlimited

+max user processes              (-u) 131072

+virtual memory          (kbytes, -v) unlimited

+file locks                      (-x) unlimited
+```
+
 ## 安装说明
 
 ### Redis 服务安装配置
@@ -87,7 +138,7 @@
 export JAVA_HOME=/usr/java/jdk7
 export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
 export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH
-export JAVA_ENV=-Dfile.encoding=utf-8
+export JAVA_ENV=-Dfile.encoding=UTF-8
 ~~~
 
 为了简化配置,我们提供了标准配置好的 Tomcat 包,请通[这里下载](http://localhost/)。下载后安装步骤如下:
@@ -129,16 +180,12 @@
 
 ~~~bash
 #user  nobody;
-worker_processes  2;
-
-#error_log  logs/error.log;
-#error_log  logs/error.log  notice;
-#error_log  logs/error.log  info;
-
-#pid        logs/nginx.pid;
+worker_processes  auto;
 
 events {
+    use epoll;
     worker_connections  1024;
+    multi_accept on;
 }
 
 http {
@@ -148,13 +195,14 @@
     proxy_headers_hash_bucket_size 6400;
 
     log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
-                      '$status $body_bytes_sent "$http_referer" '
+                      '$status $request_time "$http_referer" '
                       '"$http_user_agent" "$http_x_forwarded_for"';
 
-    access_log  /var/log/nginx-access.log  main;
+    access_log  /var/log/nginx/access.log  main;
 
-    sendfile        on;
+    sendfile          on;
     tcp_nopush     on;
+    tcp_nodelay    on;
 
     keepalive_timeout  65;
 
@@ -162,15 +210,16 @@
 
     upstream epay_balance {
       # 每个server表示一个服务地址
-      server app1:8080 weight=5;
-      server app2:8080 weight=5;
+      ip_hash;
+      server app1:8080;
+      server app2:8080;
       keepalive 20;
     }
 
     upstream epayapi_balance {
       # 每个server表示一个服务地址
-      server api1:8080 weight=5;
-      server api2:8080 weight=5;
+      server api1:8080 fail_timeout=30s;
+      server api2:8080 fail_timeout=30s;
       keepalive 20;
     }
 
@@ -190,7 +239,7 @@
         ssl_prefer_server_ciphers  on;
 
         location = / {
-          rewrite ^ https://$host:$server_port/epay/ permanent;
+          rewrite ^ /epay/ permanent;
         }
         rewrite ^/epayapi/services/api/(.*)$ /epay/api/$1 break;
         
@@ -201,7 +250,9 @@
             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    
             proxy_set_header X-Forwarded-Proto $scheme;
             proxy_pass http://epay_balance;
+            proxy_next_upstream;
             proxy_redirect http:// https://;
+            proxy_connect_timeout 25s;
         }
 
         location /epayapi {
@@ -211,9 +262,14 @@
             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    
             proxy_set_header X-Forwarded-Proto $scheme;
             proxy_pass http://epayapi_balance;
+            proxy_next_upstream;
             proxy_redirect http:// https://;
+            proxy_connect_timeout 25s;
         }
     }
+    match server_ok {
+        status 200;
+    }
 }
 ~~~
 
@@ -239,8 +295,6 @@
 
 在服务器上安装好tomcat,上传epayapi的发布包,并解压生成epayapi文件夹。
 
-修改epayapi配置文件。路径:tomcat/webapps/epayapi/WEB-INF/classes下的ksconfig.properties文件。修改对应前面安装的redis的ip和端口信息。
-
 正常启动后,打开浏览器输入`http://ip:port/epayapi/services/common/getsystemversion`(ip为部署服务器的ip,端口port为默认8080的端口)会返回主机名+"-version"字样。
 
 * **发布epay**
diff --git "a/source/_posts/\344\270\200\345\215\241\351\200\232v5\347\275\221\350\264\271\345\257\271\346\216\245\345\211\215\347\275\256\346\216\245\345\217\243\346\226\207\346\241\243.md" "b/source/_posts/\344\270\200\345\215\241\351\200\232v5\347\275\221\350\264\271\345\257\271\346\216\245\345\211\215\347\275\256\346\216\245\345\217\243\346\226\207\346\241\243.md"
new file mode 100644
index 0000000..48e1952
--- /dev/null
+++ "b/source/_posts/\344\270\200\345\215\241\351\200\232v5\347\275\221\350\264\271\345\257\271\346\216\245\345\211\215\347\275\256\346\216\245\345\217\243\346\226\207\346\241\243.md"
@@ -0,0 +1,81 @@
+---
+title: 一卡通v5网费对接前置接口文档
+date: 2017-02-13 13:45:23
+tags:
+---
+
+
+|日期         |版本      |作者        |说明              |
+|------------:|---------:|-----------:|------------------|
+|2017-2-13    |V1.0     | 夏凯祥       | 初稿             |
+
+
+## 背景
+悦校/一卡通系统与网费系统的对接需要经过网费前置服务。此文档为一卡通系统与网费前置的对接规范,用户可根据实际情况实现前置与网费系统的业务对接。
+
+
+## 约定 ##
+
+1.	传输编码统一为utf-8
+2. 请求数据都用HAMC签名加密,收到请求参数后可验证数据正确性,秘钥共同约定。**`SIGN_ALGORITHMS ="HmacSHA1"`**;
+3. **retcode** 等于"0"(字符串)表示成功,其他表示失败,失败具体信息查看 **retmsg**
+
+
+## 接口定义
+
+### 1. 查询网费账号余额
+* **URL: /net/srun4k/query**
+
+* **请求方式**
+`POST`
+
+*查询剩余网费金额*
+
+* **请求参数**
+- `payacc` - 网费账号
+- `netpwd` - 密码(可选),现支持无密码查询
+- `timestamp` - 请求时间,yyyyMMddHHmmss
+- `sign` - 签名,按上面参数顺序拼接进行HAMC加密(payacc+ timestamp)。
+
+* **返回**
+- `retcode` - "0" 标识操作成功,其余为异常情况
+- `retmsg` - "msg" 返回信息
+- `balance` - 剩余金额,字符串
+
+```json
+{
+    "retcode":"0",
+    "retmsg":"成功", // 异常原因
+    "balance": "6.5"
+}
+```
+
+### 2. 网费充值
+* **URL: /net/srun4k/query**
+
+* **请求方式**
+`POST`
+
+*查询剩余网费金额*
+
+* **请求参数**
+- `refno` - 系统交易参考号
+- `payacc` - 网费账号
+- `amount` - 充值金额,单位分
+- `timestamp` - 请求时间,yyyyMMddHHmmss
+- `sign` - 签名,按上面参数顺序拼接进行HAMC加密(refno+payacc+amount+timestamp)。
+
+* **返回**
+- `retcode` - "0" 标识操作成功,其余为异常情况
+- `retmsg` - "msg" 返回信息
+- `balance` - 剩余金额,字符串
+- `billno` - 网费系统的流水号
+
+```json
+{
+    "retcode":"0",
+    "retmsg":"成功", // 异常原因
+    "balance":"30.5",
+    "billno":"022017021412321100123"
+}
+```