WO+开放平台:API调用开发手记(话费计费接口2.0)
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:编写代码
方案确定了,代码就来了。參见演示样例project中的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类型。
是不是非常easy?
至于第二个API。举一反三就可以!
WO+开放平台:API调用开发手记(话费计费接口2.0)的更多相关文章
- 微信开放平台--》网站应用开发 微信登录网站接口(https://open.weixin.qq.com/)
地址:https://open.weixin.qq.com/ 手册:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&am ...
- 百度AI开放平台- API实战调用
百度AI开放平台- API实战调用 一. 前言 首先说一下项目需求. 两个用户,分别上传了两段不同的文字,要计算两段文字相似度有多少,匹配数据库中的符合条件的数据,初步估计列出来会有60-1 ...
- Java对接拼多多开放平台API(加密上云等全流程)
前言 本文为[小小赫下士 blog]原创,搬运请保留本段,或请在醒目位置设置原文地址和原作者. 作者:小小赫下士 原文地址:Java对接拼多多开放平台API(加密上云等全流程) 本文章为企业ERP(I ...
- 微信开放平台API开发资料
微信大概两年前开启了微信公众平台的API供开发者使用,从账号登陆.消息发送.用户账号管理.公众号菜单.客服接口.微信商店接口.用户卡券接口 以及微信支付接口.可以说是全方面覆盖了电商所需要的要素,与阿 ...
- Android—基于微信开放平台v3SDK,开发微信支付填坑。
接触微信支付之前听说过这是一个坑,,,心里已经有了准备...我以为我没准跳坑出不来了,没有想到我填上了,调用成功之后我感觉公司所有的同事都是漂亮的,隔着北京的大雾霾我仿佛看见了太阳~~~好了,装逼结束 ...
- Navi.Soft30.开放平台.腾讯.开发手册
1系统简介 1.1功能简述 现在是一个信息时代,并且正在高速发展.以前获取信息的途径非常少,可能只有电视台,收音机等有限的来源,而现在的途径数不胜数,如:QQ,微信,官方网站,个人网站等等 本开发手册 ...
- 各开放平台API接口通用 SDK 前言
最近两年一直在做API接口相关的工作,在平时工作中以及网上看到很多刚接触API接口调用的新人一开始会感到很不适应,包括自己刚开始做API接口调用的相关工作时,也是比较抓狂的,所有写一序列文章把之前的工 ...
- 各开放平台API接口通用SDK序列文章 前言
最近两年一直在做API接口相关的工作,在平时工作中以及网上看到很多刚接触API接口调用的新人一开始会感到很不适应,要看的文档一大堆,自己要调用的接口找不着,或都找着了不知道怎么去调用,记得包括自己刚开 ...
- 如何使用OLAMI自然语言理解开放平台API制作自己的智能对话助手小程序
我们经常在电影中看到机器和人对答如流,随着越来越多自然语言开放平台的出现,IT爱好者制作一个自己的APP或者小玩具等逐渐可以变为现实. 自然语言对话即你的APP或者你制作的工具.机器人等能够对用户输入 ...
随机推荐
- Java面试题之hashmap中用什么hash算法解决碰撞的?
查了一下源码(jdk8),记录一下吧,能记住就记一下吧! static final int hash(Object key) { int h; return (key == null) ? 0 : ( ...
- VMware Storage VMotion概述及功能
可以跨存储阵列实时迁移虚拟机磁盘文件.VMware Storage VMotion 使您可以在共享存储位置之间和跨共享存储位置重新分配虚拟机磁盘文件,同时保证连续的服务供应和事务处理的完整性. 1.可 ...
- js实时监听input中值得变化
<!DOCTYPE html> <html> <head> <title>zepto</title> <meta name=" ...
- [bzoj 2216] [Poi2011] Lightning Conductor
[bzoj 2216] [Poi2011] Lightning Conductor Description 已知一个长度为n的序列a1,a2,-,an. 对于每个1<=i<=n,找到最小的 ...
- OpenGL 之 坐标变换
http://www.cnblogs.com/irvinow/archive/2009/11/20/1606496.html 创建OpenGL模型过程: OPENGL坐标变换很有特点,为了简单描述先定 ...
- 关于java1.7集合源码阅读
工作中每天都会和java集合打交道,虽然以前也看过jdk源码的实现,但有些东西时间长了还是会遗忘,或者有些实现在新版本中有了新的变化,俗话说"温故而知新",所以打算再阅读一下相关源 ...
- 【linux高级程序设计】(第十章)Linux异步信号处理机制 3
信号屏蔽 信号忽略:系统仍然传递该信号,只是相应的进程不做任何处理 信号屏蔽:进程不捕获信号,信号处于未决状态,当不再屏蔽信号时可以捕获之前被屏蔽的信号. 信号集数据结构定义: typedef __s ...
- hdu 5146(水题)
Sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- hdu 5105(数学题)
Math Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- cmake add_executable 与 include_directories
在cmake里add_executable里如果没有包含.cpp文件,该.cpp文件就不适用include_directories包含文件