平台上个星期上线了下载APP送随机话费的活动,下载后完成注册即可抽取1~10元话费红包。经过筛选,最终选择了互亿无线,第一有详细的计费明细,第二失败了确实有退款,第三有非常完整的接口文档和技术服务客服,分享一下他们家的文档,后续小伙伴搞话费充值功能时也可以参考下。
话费接口服务商:互亿无线()
1.单号码充值话费
请求(POST 或者GET)
类型
参数名称
参数值描述
参数
action
recharge
参数
username
用户名(签名)
参数
mobile
手机号码(签名)
参数
package
套餐数额(签名)
参数
orderid
订单ID(签名)
参数
timestamp
时间戳(签名)
格式如:yyyyMMddHHmmss
允许 10 分钟 统一以东 8 时间
参数
sign
签名
返回值(JSON格式)
命名
类型
描述
code
int
代码(1为提交成功)
message
string
消息描述
taskid
string
任务id,提交失败则没有
2.帐号余额查询
请求(POST 或者GET)
类型
参数名称
参数值描述
参数
action
getbalance
参数
username
用户名(签名)
参数
timestamp
时间戳(签名)
格式如:yyyyMMddHHmmss
允许 10 分钟 统一以东 8 时间
参数
sign
签名
返回值(JSON格式)
命名
类型
描述
code
int
代码
message
string
消息描述
balance
float
剩余余额
3.充值状态查询
请求(POST 或者GET)
类型
参数名称
参数值描述
参数
action
getreports
参数
username
用户名(签名)
参数
count
一次取数量(签名)
参数
timestamp
时间戳(签名)
格式如:yyyyMMddHHmmss
允许 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
手机号码已加入黑名单
不支持的地区
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 = "/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 {
//提交错误处理
//.....
}