zoukankan      html  css  js  c++  java
  • 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。举一反三就可以!


  • 相关阅读:
    wcf第3步之报文分析及原生调用
    IBatis 批量插入数据之SqlBulkCopy
    MVC前后端数据被编码
    log4Net控制台输出
    这可能是由于服务终结点绑定未使用 HTTP 协议造成的 .这还可能是由于服务器中止了 HTTP 请求上下文
    IBatis存储过程返回值
    路由学习2
    restClient访问SSL
    hibernate多对多关系配置
    hibernate 一对多操作(级联操作)
  • 原文地址:https://www.cnblogs.com/mfmdaoyou/p/6760764.html
Copyright © 2011-2022 走看看