# 注意:本文档后期不在跟新,新文档迁移到:[http://www.openkit.cc/docs/openkit/#/](http://www.openkit.cc/docs/openkit/#/)
# 首先感谢使用OpenKit工具包
## 反馈交流QQ群:696279396
|更新时间|版本|作者|
|:--:|:--:|:--:|
|2018-1-26 17:56|V1.1.3|贲海龙|
### 首先你需要新建一个话费的配置文件
```java
// 你可以new一个空对象,然后使用set方法
HuafeiConfig huafeiConfig = new HuafeiConfig();
// 你也可以在创建对象的时候直接将必传参数传进去
HuafeiConfig huafeiConfig = HuafeiConfig(String key, String openId)
```
> 具体参数说明,如果有需要,自己使用set方法设置
|属性|是否必传|说明|
|:--:|:--:|--|
|key|是|申请的接口Appkey|
|openId|是|在个人中心查询|
|telCheckUrl|否|检测手机号码和金额是否能充值地址|
|telQueryUrl|否|根据手机号码和面值查询商品信息地址|
|onlineUrl|否|根据用户提供的请求为指定手机直接充值地址|
|yueUrl|否|查询账户余额地址|
|orderstaUrl|否|订单状态查询地址|
|orderListUrl|否|历史订单列表地址|
### 接下来,我们来看看对应的方法(所有参数必传)
- 1、检测手机号码是否能充值接口
> 调用:HuafeiService.telCheck(HuafeiConfig huafeiConfig, String phone, int cardnum)
> 入参
|属性|数据类型|是否必传|说明|
|:--:|:--:|:--:|--|
|huafeiConfig|HuafeiConfig|是|配置信息|
|phone|String|是|手机号码|
|cardnum|int|是|充值金额,目前可选:5、10、20、30、50、100、300|
> 返回值
|属性|数据类型|是否必传|说明|
|:--:|:--:|:--:|--|
|--|int|是|返回错码,0为允许充值的手机号码及金额,其他为不可以或其他错误|
- 2、根据手机号和面值查询商品信息
> 调用:HuafeiService.telQuery(HuafeiConfig huafeiConfig, String phone,int cardnum)
> 入参
|属性|数据类型|是否必传|说明|
|:--:|:--:|:--:|--|
|huafeiConfig|HuafeiConfig|是|配置信息|
|phone|String|是|手机号码|
|cardnum|int|是|充值金额,目前可选:5、10、20、30、50、100、300|
> 返回值
|属性|数据类型|是否必传|说明|
|:--:|:--:|:--:|--|
|--|String|是|String类型结果|
- 3、依据用户提供的请求为指定手机直接充值
> 调用:HuafeiService.onlineOrder(HuafeiConfig huafeiConfig, String phone,int cardnum,String orderid)
> 入参
|属性|数据类型|是否必传|说明|
|:--:|:--:|:--:|--|
|huafeiConfig|HuafeiConfig|是|配置信息|
|phone|String|是|手机号码|
|cardnum|int|是|充值金额,目前可选:5、10、20、30、50、100、300|
|orderid|String|是|商家订单号,8-32位字母数字组合,自定义|
> 返回值
|属性|数据类型|是否必传|说明|
|:--:|:--:|:--:|--|
|--|String|是|String类型结果|
- 4、查询账户余额
> 调用:HuafeiService.yuE(HuafeiConfig huafeiConfig)
> 入参
|属性|数据类型|是否必传|说明|
|:--:|:--:|:--:|--|
|huafeiConfig|HuafeiConfig|是|配置信息|
> 返回值
|属性|数据类型|是否必传|说明|
|:--:|:--:|:--:|--|
|--|String|是|String类型结果|
- 5、订单状态查询
> 调用:HuafeiService.orderSta(HuafeiConfig huafeiConfig, String orderid)
> 入参
|属性|数据类型|是否必传|说明|
|:--:|:--:|:--:|--|
|huafeiConfig|HuafeiConfig|是|配置信息|
|orderid|String|是|商家订单号|
> 返回值
|属性|数据类型|是否必传|说明|
|:--:|:--:|:--:|--|
|--|String|是|订单结果|
- 6、历史订单列表
> 调用:HuafeiService.orderList(HuafeiConfig huafeiConfig)
> 入参
|属性|数据类型|是否必传|说明|
|:--:|:--:|:--:|--|
|huafeiConfig|HuafeiConfig|是|配置信息|
> 返回值
|属性|数据类型|是否必传|说明|
|:--:|:--:|:--:|--|
|--|String|是|列表结果|
### 错误码说明
#### 服务级错误码参照(error_code):
|错误码 |说明|
|:--:|:--:|
|208501 |不允许充值的手机号码及金额|
|208502| 请求手机号和面值查询商品信息失败,请重试|
|208503 |运营商地区维护,暂不能充值|
|208504| 请求手机号和面值查询商品信息错误,具体请参考reasoon|
|208505 |错误的手机号码|
|208506 |错误的充值金额|
|208507 |充值失败,具体请参考reason|
|208508| 请求充值失败,请重试|
|208509| 错误的订单号|
|208510| 请求订单状态失败,请重试|
|208513 |查询订单失败,具体参照reason说明|
|208514| 不合规范的订单号(8-32位)|
|208515| 校验值sign错误|
|208516 |重复的订单号|
|208517| 当前账户可用余额不足|
#### 系统级错误码参照:
|错误码| 说明| 旧版本(resultcode)
|:--:|:--:|:--:|
|10001| 错误的请求KEY| 101|
|10002 |该KEY无请求权限| 102|
|10003| KEY过期 |103|
|10004| 错误的OPENID |104|
|10005 |应用未审核超时,请提交认证| 105|
|10007| 未知的请求源 |107|
|10008| 被禁止的IP |108|
|10009 |被禁止的KEY |109|
|10011| 当前IP请求超过限制| 111||
|10012| 请求超过次数限制 |112|
|10013 |测试KEY超过请求限制| 113|
|10014 |系统内部异常(调用充值类业务时,请务必联系客服或通过订单查询接口检测订单,避免造成损失)| 114|
|10020| 接口维护| 120|
|10021| 接口停用| 121|
#### 错误码格式说明(示例:200201):
|2| 002| 01|
|:--:|:--:|:--:|
|服务级错误(1为系统级错误)| 服务模块代码(即数据ID)| 具体错误代码|
### 回调地址规范
- 回调显示:post
- 推送参数内容格式(普通参数键值对,非json):
|名称|类型|说明|
|:--:|:--:|:--:|
|sporder_id|string|聚合订单号|
|orderid|string|用户自定义的单号|
|sta|int|充值状态1:成功 9:失败|
|sign|string|校验值,md5(appkey+sporder_id+orderid) 32位小写,用于校验请求合法性|
|err_msg|string|状态描述信息(暂只支持油卡业务)|
- 处理成功请返回:success 或 任意字符串
- 重试机制:聚合数据在请求回调地址时,如果无任何内容返回或无响应,会重新发起最多3次,间隔3s左右
- 本回调推送内容格式适用于话费充值、油卡充值、流量充值等增值服务,如果需要状态回调的用户,如接口其他已经调试完毕,请将账号和回调地址发给在线客服,我们将回调地址配置线上。
```java
/***************servlet接收示例**************************/
@WebServlet("/callerBack")
public class CallerBackDemo extends HttpServlet {
public static final long serialVersionUID =1L;
String appkey = "";//您 申请的数据的APIKEY
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String sporder_id = req.getParameter("sporder_id");//聚合订单号
String orderid = req.getParameter("orderid ");//商家订单号
String sta = req.getParameter("sta ");//充值状态
String sign = req.getParameter("sign"); //校验值
String local_sign = MD5Util.strToMD5(appkey+sporder_id+orderid);//本地sign校验值
if(sign ==local_sign){
if(sta=="1"){
//充值成功,根据自身业务逻辑进行后续处理
}else if(sta=="9"){
//充值失败,根据自身业务逻辑进行后续处理
}
}
return "SUCCESS";
}
/***************Spring接收示例**************************/
@RequestMapping(value="/callerBack",method=RequestMethod.POST)
public void callerBack(@RequestParam("sporder_id") String sporder_id,@RequestParam("orderid") String orderid,
@RequestParam("sta") String sta,@RequestParam("sign") String sign ){
String local_sign = MD5Util.strToMD5(appkey+sporder_id+orderid);//本地sign校验值
if(sign ==local_sign){
if(sta=="1"){
//充值成功,根据自身业务逻辑进行后续处理
}else if(sta=="9"){
//充值失败,根据自身业务逻辑进行后续处理
}
}
return "SUCCESS";
}
```
## 反馈交流QQ群:696279396
## 赞助
![](https://box.kancloud.cn/bf6f9c0e4f5a786c20d02c56b56a0eaf_600x500.png)