电商周年庆,公司搞了一个关注微信公众号送小额话费的活动,送1元、2元、5元、10元、20元、50元等不同面值的。

为了实现话费充值服务,找了多家开通了话费接口服务,接入后测试。先是做接口整合的平台,PASS,等于我们多接一层,问题不可控。最后找了增值电信的服务商 互亿无线合作,门槛低,有详细的API开发文档可以参考,根据示例很快就搞定了。

分享给大家,希望后续做类似的话费充值功能可以用得到:

接口地址

http://f.ihuyi.com/phone

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

手机号码已加入黑名单

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&timestamp=%s&username=%s”,

$apikey,

$mobile,

$orderid,

$package,

date("YmdHis"),

$username));

GET方式地址如:

http://f.ihuyi.com/phone?action=recharge&username=testname&mobile=13800000000&orderid=xxxxxxxxx&package=10&timestamp=1457954906&sign=e08ecdcedac8f9e07b1727e1005b8d32

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&timestamp=%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 {

//提交错误处理

//.....

}

【加精】手机话费充值API接口(PHP版)的更多相关文章

  1. 调用手机话费充值API的SDK编写思路

    思路 通过将SDK方法中返回的数据划分为正常返回数据以及错误返回的数据两部分,让调用者更简单的对接口调用错误进行处理. 将SDK调用第三方服务接口的流程划分为: 数据准备,http请求,结果处理三部分 ...

  2. 必应API接口nodejs版

    近期,在研究百度.必应.API等的url提交API时,发现有用Go语言做工具的大佬的分享 利用 API 自动向搜索引擎提交网址(Go语言版) - pyList. 其中提到bing API提交方法,并给 ...

  3. 手机话费充值和手机流量充值 API

    最近正好需要用到手机充值和流量充值接口,网上找到的,记录并分享下. 聚合数据上面有手机充值的接口,也有流量充值的接口:注册以后可以使用它的OpenId和AppKey. 手机话费充值的接口:https: ...

  4. Spring Boot入门系列(二十一)如何优雅的设计 Restful API 接口版本号,实现 API 版本控制!

    前面介绍了Spring Boot 如何快速实现Restful api 接口,并以人员信息为例,设计了一套操作人员信息的接口.不清楚的可以看之前的文章:https://www.cnblogs.com/z ...

  5. Asp.Net支付宝手机网站支付接口API之C#版

    一.准备工作 1.使用企业支付宝签约手机网站支付 2.下载支付宝官方demo 文档地址:https://doc.open.alipay.com/doc2/detail?treeId=60&ar ...

  6. 浅谈使用 PHP 进行手机 APP 开发(API 接口开发)

    做过 API 的人应该了解,其实开发 API 比开发 WEB 更简洁,但可能逻辑更复杂,因为 API 其实就是数据输出,不用呈现页面,所以也就不存在 MVC(API 只有 M 和 C),那么我们来探讨 ...

  7. 示例浅谈PHP与手机APP开发,即API接口开发

    示例浅谈PHP与手机APP开发,即API接口开发 API(Application Programming Interface,应用程序接口)架构,已经成为目前互联网产品开发中常见的软件架构模式,并且诞 ...

  8. 浅谈PHP与手机APP开发即API接口开发

    API(Application Programming Interface,应用程序接口)架构,已经成为目前互联网产品开发中常见的软件架构模式,并且诞生很多专门API服务的公司,如:聚合数据(http ...

  9. hbase rest api接口链接管理【golang语言版】

    # go-hbase-resthbase rest api接口链接管理[golang语言版]关于hbase的rest接口的详细信息可以到官网查看[http://hbase.apache.org/boo ...

随机推荐

  1. MRC迁移ARC之__block

    今日帮着同事把老项目从MRC迁移至ARC,大部分工作无非是删除release,[super dealloc]等方法,只要关闭了MRC编译选项后,编译器能自动帮你检查,block就有一些不一样了,发现许 ...

  2. 复习(1)【Maven】

    终于开始复习旧知识了,有输入必然要有输出.输入和输出之间的内化过程尤为重要,在复习的同时,真正把学到的东西积淀下来,加深理解. Maven项目概念与配置 Maven是一个项目管理和综合工具.Maven ...

  3. 4541: [Hnoi2016]矿区

    学习了一下平面图剖分的姿势,orz cbh 每次只要随便选择一条边,然后不停尽量向左转就行 #include <bits/stdc++.h> #define N 1300000 #defi ...

  4. 大型App要搞的几个系统

    路由模块: 解耦各个业务,统一收敛页面跳转,动态决策跳转实现:   鉴权模块:收敛鉴权项目(比如登录.输入密码.短信验证.扫脸),后台动态控制鉴权项目:   收银台:收敛支付,统一到收银台:   开关 ...

  5. python基础八

    面向对象的好处 更容易扩展.提高代码使用效率,使你的代码组织性更强, 更清晰,更适合复杂项目的开发 封装 把功能的实现细节封装起来,只暴露调用接口 继承 多态 接口的继承 定义 类   ===> ...

  6. 《PHP中的Math函数》笔记

    ① abs() 绝对值; ② ceil() 向上取整; ③ floor() 向下取整; ④ fmod() 返回除法的浮点数余数; ⑤ getrandmax() 显示随机数最大的可能值; ⑥ is_fi ...

  7. sort()基础知识总结+超简短的英文名排序写法

    结合前些天学的箭头函数我想到一种非常简短的sort排序写法:(这可能是最短的英文名排序方法了) 贴出来大家一起探讨一下: [4,1,2,32].sort((x,y)=>x>y); //[1 ...

  8. php阳历转农历的类 谷歌到的

    <?phpclass Lunar {    var $MIN_YEAR = 1891;    var $MAX_YEAR = 2100;    var $lunarInfo = array(   ...

  9. React学习笔记-5-初始化阶段介绍

    初始化阶段可以使用的函数:getDefaultProps:只调用一次,实例之间共享引用.只有在组件的第一个实例被初始化的时候,才会调用他,然后react会把这个函数的返回结果保存起来,从第二个实例开始 ...

  10. ES6扫盲

    原文阅读请点击此处 一.let和const { // let声明的变量只在let命令所在的代码块内有效 let a = 1; var b = 2; } console.log(a); // 报错: R ...