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或者你制作的工具.机器人等能够对用户输入 ...
随机推荐
- C++11 lambda表达式(19篇C++11文章)
C++11引入了lambda表达式,使得程序员可以定义匿名函数,该函数是一次性执行的,既方便了编程,又能防止别人的访问. Lambda表达式的语法通过下图来介绍: 这里假设我们定义了一个如上图的lam ...
- PDF工具
PDF打印工具 pdfcreator 可以将所有文件都打印为pdf PDF 阅读-编辑-打印工具 Adobe Acrobat DC 可以将所有文件都打印为pdf,并且支持编辑PDF与阅读,可以将PDF ...
- 通过hover修改其他元素
hover,我们都知道,是监听组件“悬停状态”的一个伪类. 我们一般通过hover来修改组件的背景什么的,很少涉及到太复杂的操作.也就是说我们一般只是对加了hover伪类的元素自身的样式进行改变,比如 ...
- Python学习杂记_11_函数(二)
函数的高级运用这部分知识的核心内容就是你要把“函数即变量”这个概念理解并运用得出神入化... 一.函数的递归调用 所谓递归调用就是函数自己调用自己,在Python中如果不做限制递归调用的死循环最多可循 ...
- 这篇 感觉很实用--DJANGO ORM
Django之model F/Q以及多对多操作 http://www.cnblogs.com/ccorz/p/5882400.html model之F/Q操作 F操作,使用查询条件的值 打个比方吧,有 ...
- 30 分钟学会 Flex 布局
30 分钟学会 Flex 布局 有酒 617 人赞同了该文章 为什么我要写这一篇关于 Flex 布局的教程? 因为它十分简单灵活,区区简单几行代码就可以实现各种页面的的布局,以前我在学习页面布局的 ...
- (5)java基础知识2
一.方法 方法相当于功能的实现. public static int max (int num1, int num2) {....................} ...
- MySQL读写分离-架构
MySQL读写分离-架构 简介 对于很多大型网站(pv值百万.千万)来说,在所处理的业务中,其中有70%的业务是查询(select)相关的业务操作(新闻网站,插入一条新闻.查询操作),剩下的则是写(i ...
- Codeforces 1029 E. Tree with Small Distances(树上dp)
题目直通车:http://codeforces.com/problemset/problem/1029/E 思路大意:在树上做dp,依次更新ar数组,ar[i]表示以i为根节点的子树对答案的最小贡献值 ...
- Maven笔记:
启动tomcat的时候报这样的错误:java.lang.ClassNotFoundException: org.springframework.web.filter.CharacterEncoding ...