接口地址
1.单号码充值话费
请求(POST 或者GET)
类型 | 参数名称 | 参数值描述 |
参数 | action | recharge |
参数 | username | 用户名(签名) |
参数 | mobile | 手机号码(签名) |
参数 | package | 套餐数额(签名) |
参数 | orderid | 订单ID(签名) |
参数 | timestamp | 时间戳(签名) 允许 10 分钟 统一以东 8 时间 |
参数 | sign | 签名 |
返回值(JSON格式)
命名 | 类型 | 描述 |
code | int | 代码(1为提交成功) |
message | string | 消息描述 |
taskid | string | 任务id,提交失败则没有 |
2.帐号余额查询
请求(POST 或者GET)
类型 | 参数名称 | 参数值描述 |
参数 | action | getbalance |
参数 | username | 用户名(签名) |
参数 | timestamp | 时间戳(签名) 允许 10 分钟 统一以东 8 时间 |
参数 | sign | 签名 |
返回值(JSON格式)
命名 | 类型 | 描述 |
code | int | 代码 |
message | string | 消息描述 |
balance | float | 剩余余额 |
3.充值状态查询
请求(POST 或者GET)
类型 | 参数名称 | 参数值描述 |
参数 | action | getreports |
参数 | username | 用户名(签名) |
参数 | count | 一次取数量(签名) |
参数 | timestamp | 时间戳(签名) 允许 10 分钟 统一以东 8 时间 |
参数 | sign | 签名 |
返回值(JSON格式)
命名 | 类型 | 描述 |
code | int | 代码(1为提交成功) |
message | string | 消息描述 |
reports+ | array | 报告 |
taskid | string | 任务id |
mobile | string | 手机号码 |
state | int | 状态(0失败, 1成功) |
message | string | 消息 |
注意:状态获取后服务器则会删除状态
4.充值状态推送
请求(POST方式推送到配置的网址)
类型 | 参数名称 | 参数值描述 |
参数 | taskid | 充值任务ID |
参数 | mobile | 手机号码(签名) |
参数 | state | 状态(签名) 1:成功 2:失败 |
参数 | message | 消息(签名) |
参数 | sign | 签名 |
注意:充值状态查询和充值状态推送两种方式只能选择其中一种
5. 获取话费包档位
请求(POST 或者GET)
类型 | 参数名称 | 参数值描述 |
参数 | action | getpackages |
参数 | username | 用户名(签名) |
参数 | timestamp | 时间戳(签名) |
参数 | sign | 签名 |
返回值(JSON格式)
命名 | 类型 | 描述 |
code | int | 代码 |
message | string | 消息描述 |
packages+ | float | 套餐 |
type | string | 类型(cncm:中国移动 cncu:中国联通 cnct:中国电信) |
name | string | 话费包 |
number | int | 数值(用于充值请求) |
state | int | 状态(1启用,0未启用) |
price | int | 单价 |
6.状态码
数值 | 描述 |
0 | 未知错误 |
1 | 提交成功 |
1000 | 无此操作类型(action为空或不存在) |
1001 | 用户名为空 |
1002 | 用户名错误 |
1003 | 手机号码为空 |
1004 | 手机号码为空 |
1005 | 套餐不能为空 |
1006 | 时间戳不能为空 |
1007 | 不存在的套餐 |
1008 | 签名不能为空 |
1009 | 签名错误 |
1010 | 签名过期 |
1011 | 账号被冻结 |
1012 | 余额不足 |
1013 | 访问ip与备案ip不相同 |
1014 | 订单ID不能为空 |
1015 | 订单ID已存在 |
2001 | 不支持的手机号码 |
2002 | 手机号码已加入黑名单 |
2003 | 不支持的地区 |
3001 | 扣费失败 |
4001 | 系统内部故障 |
7. 签名说明
需要把apikey(登录系统获取)放到要签名的键值对中,按照asc排序键值对参数名排序,拼接键值对字符串(参数名小写),再用32位md5加密
注意:用户名请使用小写
如:
sign=md5(aaaa=aaaa&bbbb=bbbb&cccc=cccc&dddd=dddd)
PHP充值签名代码如下:
$sign = md5(sprintf(“apikey=%s&mobile=%s&orderid=%s&package=%s×tamp=%s&username=%s”,
$apikey,
$mobile,
$orderid,
$package,
date("YmdHis"),
$username));
GET方式地址如:
8.PHP充值代码DEMO
$basicUrl
=
"http://f.ihuyi.com/phone?action=recharge&%s";
$username =
'testname';
$apikey =
'testapikey';
$mobile =
'18801850000';
$package =
1;
$orderId =
'TEST_'.date("YmdHis").mt_rand(100, 1000);
$dataGet = array();
$dataGet['package'] =
$package;
$dataGet['username'] =
$username;
$dataGet['timestamp'] =
date("YmdHis");
$dataGet['mobile'] =
$mobile;
$dataGet['orderid'] =
$orderId;
$dataGet['sign'] =
md5(sprintf(“apikey=%s&mobile=%s&orderid=%s&package=%s×tamp=%s&username=%s”,
$apikey,
$mobile,
$orderid,
$package,
date("YmdHis"),
$username));
$dataReturn = array();
foreach ($dataGet as $key => $row) {
$dataReturn[] = sprintf("%s=%s", $key, $row);
}
$urlGet = sprintf($basicUrl,
implode("&", $dataReturn));
$ch
= \curl_init();
curl_setopt($ch, CURLOPT_URL, $urlGet);
//定义表单提交地址
curl_setopt($ch, CURLOPT_RETURNTRANSFER,
1);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
//60秒
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_REFERER,
'http://' . $_SERVER['HTTP_HOST']);
curl_setopt($ch, CURLOPT_POST, 0);
$data = curl_exec($ch);
curl_close($ch);
$res = explode("\r\n\r\n", $data);
$dataRet = $res[1];
if ($dataRet['code'] == 1) {
//提交成功
$apiTaskid = $dataRet['taskid'];
} else {
//提交错误处理
//.....