WO+开放平台:API调用开发手记(话费计费接口2.0)
2014-10-11 13:28
423 查看
WO+能力共享平台(http://open.wo.com.cn)是中国联通推出的开放平台,拥有的丰富电信能力资源以及深度整合挖掘的第三方能力资源等,WO+平台提供的API均为简洁优雅的RESTful风格,极大的方便了开发者的使用。
上段为废话,现在言归正传,我会用一个简单的示例来说明WO+平台的API是如何地简单,如何地好用。
本文代码请参见:https://github.com/sharetop/WoPlus_Java_SDK
A:确认流程
以调用量最大的『计费能力2.0』为例,先来看看流程。
从用户操作层面来看,小额计费分两步,第一步,输入手机号获取验证码,第二步,输入验证码,确认支付。
对应WO+平台,我们需要两个API:发送支付验证码和按次支付接口。
B:研读文档
然后,我们需要对接口进行研读,以第一个API为例,发送支付验证码。
根据文档(http://open.wo.com.cn/aep/consumerCapDetail.html?apiPackageId=00000000-0000-0000-0000-500000801000)的描述,可以看出,它是一个POST请求,HTTP头要声明一下ContentType和Accept,这个很Easy。主要是那个Authorization有点不一样了,这是一个签权字段,里面需要填写一个appKey和token,appKey是在WO+平台创建应用之后得到的应用标识,而token则需要根据appKey和appSecret来获取(涉及另一个接口)。
消息体,就更简单了,我们需要将一个Map弄成一个JSON字串,作为StringEntity发出去,就OK。
所以,我们想到的最简单的方案就是,用HttpClient来封装调用逻辑。
C:编写代码
方案确定了,代码就来了。参见示例工程中的WoPlusClient中的postJSONEntity方法。
三个参数,第一个是请求的URL,即文档中的请求URI,第二个是Authorization串中的两个字段,appKey和token,第三个就是请求的消息体了,同样用Map封装。
appKey和token需要组装成一个字符串,作为Authorization的值;
消息体用Map封装,借助JSON工具可以方便地输出为String类型。
是不是很简单?
至于第二个API,举一反三即可!
上段为废话,现在言归正传,我会用一个简单的示例来说明WO+平台的API是如何地简单,如何地好用。
本文代码请参见:https://github.com/sharetop/WoPlus_Java_SDK
A:确认流程
以调用量最大的『计费能力2.0』为例,先来看看流程。
从用户操作层面来看,小额计费分两步,第一步,输入手机号获取验证码,第二步,输入验证码,确认支付。
对应WO+平台,我们需要两个API:发送支付验证码和按次支付接口。
B:研读文档
然后,我们需要对接口进行研读,以第一个API为例,发送支付验证码。
根据文档(http://open.wo.com.cn/aep/consumerCapDetail.html?apiPackageId=00000000-0000-0000-0000-500000801000)的描述,可以看出,它是一个POST请求,HTTP头要声明一下ContentType和Accept,这个很Easy。主要是那个Authorization有点不一样了,这是一个签权字段,里面需要填写一个appKey和token,appKey是在WO+平台创建应用之后得到的应用标识,而token则需要根据appKey和appSecret来获取(涉及另一个接口)。
消息体,就更简单了,我们需要将一个Map弄成一个JSON字串,作为StringEntity发出去,就OK。
所以,我们想到的最简单的方案就是,用HttpClient来封装调用逻辑。
C:编写代码
方案确定了,代码就来了。参见示例工程中的WoPlusClient中的postJSONEntity方法。
static synchronized WoPlusResponse postJSONEntity(String api_url,HashMap<String,String> auth,HashMap<String,Object> params) throws Exception { //将消息体参数转成字符串,JSON格式 String body=JSON.toJSONString(params,SerializerFeature.WriteNullNumberAsZero); //我们用StringEntity来包装请求 StringEntity entity = new StringEntity(body, "utf-8"); CloseableHttpClient httpclient = HttpClients.createDefault(); HttpPost httppost = new HttpPost(api_url); //对应文档中对请求HTTP头的要求 httppost.addHeader("Content-Type", "application/json;charset=UTF-8"); httppost.addHeader("Accept","application/json"); StringBuilder sb=new StringBuilder(); for(String k : auth.keySet()){ sb.append(",") .append(k) .append("=\"") .append(auth.get(k)) .append("\""); } try{ //再增加那个Authorization字段 httppost.addHeader("Authorization",sb.toString().substring(1)); httppost.setEntity(entity); logger.debug(EntityUtils.toString(entity)); CloseableHttpResponse response = httpclient.execute(httppost); try{ HttpEntity respEntity = response.getEntity(); if (respEntity != null) { body = EntityUtils.toString(respEntity); logger.debug(body); } } finally { response.close(); } } finally{ httpclient.close(); } return _transObject(JSON.parseObject(body)); }
三个参数,第一个是请求的URL,即文档中的请求URI,第二个是Authorization串中的两个字段,appKey和token,第三个就是请求的消息体了,同样用Map封装。
appKey和token需要组装成一个字符串,作为Authorization的值;
消息体用Map封装,借助JSON工具可以方便地输出为String类型。
是不是很简单?
至于第二个API,举一反三即可!
相关文章推荐
- WO+开放平台:API调用开发手记(话费计费接口2.0)
- WO+开放平台:API调用开发手记(关于签名字段)
- 手机话费充值接口开发指南(含API文档,充值移动、联通、电信话费)
- 调用CSDN的开发API——>博客接口——>获取博客系统分类【1】
- zabbix 二次开发之调用api接口获取历史数据
- java微信开发API第三步 微信获取以及保存接口调用凭证
- PHP7.0微信公众平台开发3: API接口的调用代码模板
- api 接口开发理论 在php中调用接口以及编写接口
- 即时通讯开发之调用API接口快速在IOS平台的即时通讯应用开发
- asp.net mvc短信接口调用——阿里大于API开发心得
- 调用CSDN的开发API——>博客接口——>获取博主基本信息【2】
- java微信开发API解析(三)-高级功能的前奏----获取以及保存接口调用凭证 标签: 微信java办微信开发微信文档解析 2016-04-06 20:50 1101人阅读 评论(0) 收藏 举报
- java微信开发API解析(三)-高级功能的前奏----获取以及保存接口调用凭证
- 调用API接口开发跨平台音视频应用
- 即时通讯开发之调用API接口快速在IOS平台的即时通讯应用开发
- 关于微信公众号开发调用jssdk接口以及腾讯地图API
- 自动化(Automation)基础概念:二次开发接口(API)与插件(Addin)
- 13.13 sqlite3 -- DB-API 2.0 SQLite数据库接口[Python参考库翻译]
- 自动化(Automation)基础概念:二次开发接口(API)与插件(Addin)
- 协议开发 中移动CMPP2.0协议API(三)