首页 > 代码库 > 十分钟接入WO+能力共享平台

十分钟接入WO+能力共享平台

   本文以最基本的『计费能力2.0版』为例,利用开源的WoPlus.SDK为基础,简述接入WO+能力共享平台的开发过程。


一、准备工作(3分钟)


在进行技术接入之前,你需要先在http://open.wo.com.cn注册成为开发者,并创建应用。注册成为开发者的过程我就不说了,下面只谈创建应用的过程,以及如何获取几个技术接入需要的参数。


登录WO+能力平台,在『首页-开发者-我的APP-WEB服务端应用』,点击+号创建一个WEB应用。创建应用时,必须填写的字段如下图,其中应用名称将会出现在计费的短信中,并发送给用户,所以,请使用真实的应用名称。之后,别忘了选择API包,选择本例需要使用的『计费能力2.0版』。

如果在弹出的选择框中没找到这个能力,说明你还没有签约它,请在商城中找到这个能力并签约(签约该能力是免费的)。 

技术分享

技术分享

之后,你能得到以下两个参数:AppKey(即App标识)和AppSecret(即App密钥)。

技术分享

技术分享

然后,你需要将应用提交审批,一旦通过,你就可以开始进入技术接入环节了。



二、开发环境


【必须】,本文讨论的接入均是以Java为例,所以,你应该具备Java的开发环境。

【必须】,WoPlus.SDK是基于Maven的项目,所以,你需要安装Maven环境。

【可选】,WoPlus.SDK是托管于OSChina的Git项目,所以,建议你安装Git环境。


访问 http://git.oschina.net/sharetop/,其中WoPlus.SDK.Java是一个使用HttpClient实现的开发包,而WoPlus.SDK.Spring则是用于Spring环境的开发包。你可以根据自己的项目选择合适的SDK。 

技术分享技术分享

本文以使用Spring的开发为例。获取WoPlus.SDK.Spring的源码后,使用Maven编译并install。


三、接入代码开发(5分钟)


现在进入正题,打开Eclipse,使用Maven创建一个基于Spring框架的WebApp。本例中创建的应用名称为:spring-web。

技术分享

技术分享

1)修改Maven的配置文件pom.xml,增加Spring的支持包(本文略,可参考SDK中的示例工程),并增加WoPlus.SDK.Spring的支持包。 

	<dependency>
		<groupId>com.fasterxml.jackson.core</groupId>
  		<artifactId>jackson-core</artifactId>
  		<version>2.4.3</version>
	</dependency>
	<dependency>
		<groupId>com.fasterxml.jackson.core</groupId>
  		<artifactId>jackson-databind</artifactId>
  		<version>2.4.3</version>
	</dependency>
	<dependency>
		<groupId>cn.chinaunicom.woplus.openapi.spring</groupId>
  		<artifactId>open.spring</artifactId>
 		<version>0.0.1</version>
	</dependency>


2)在Spring框架的applicationContext.xml中增加WoPlus.SDK的装配项。其中参数0为AppKey,而参数1为AppSecret。(以下这两个参数需根据你的应用实际修改)

	<bean id=“woplusClient” class="cn.chinaunicom.woplus.openapi.spring.WoPlusClient">
		<constructor-arg index="0" value=http://www.mamicode.com/"492edbd25e65c7fc6113544e86e9f0d87b9eaae9" />>

3)现在可以在代码中调用WO+的能力接口了。看看我们的示例代码,首先是Spring中的控制类DemoController,你需要使用自动装配的WoPlusClient,所有对WO+接口的访问都是通过这个类来实现的。 

@Autowired
WoPlusClient woplusClient;
	
@RequestMapping(
value=http://www.mamicode.com/“/api/paymentcodesms",>

『计费能力2.0版』是需要二次确认的,所以,我们构建两个URL请求,分别对应『获取验证码』和『确认扣费』两步。这个写法完全是Spring的标准代码,个中含义就不细说了。下面,才是见证奇迹的时刻。


先看第一个接口,获取验证码。根据API文档获取验证码需要的参数包括:待接收验证码的手机号(paymentUser),计费类型(paymentType)必须为0,订单号(outTradeNo),支付帐户类型(paymentAcount)必须为『001』,商品名称(subject)和扣费金额(totalFee)。其它可选项就不用填了。


务必注意各个参数的类型,数字或字符串。此外注意,这个接口不用签名。

@RequestMapping(/*见上段代码示例*/)
public @ResponseBody WoPlusResponse paymentcodesms(/*见上段代码示例*/){
		
	WoPlusResponse resp = new WoPlusResponse();
		
	String api_url="https://open.wo.com.cn/openapi/rpc/paymentcodesms/v2.0";
		
	HashMap<String,Object> params = new HashMap<String,Object>();
		
	long num=new Random().nextLong();
	params.put("paymentUser", mobile);
	params.put("paymentType", 0);
	params.put("outTradeNo",Long.toString(num));
	params.put("paymentAcount", "001");
	params.put("subject", "金币一堆");
	params.put("totalFee", 0.01f);
		
	try {
		resp = woplusClient.post(api_url, params,false);
		if(resp.resultCode.equals("0")){
		request.getSession().setAttribute("paymentcodesms_param", params);
		}
			
	} catch (Exception e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	
	return resp;
}






代码很简单,api_url就是要访问的API接口地址,而params是一个HashMap,就是我们的参数集合。不管哪个接口,也不管参数如何变化,我们要做的事情就是设置正确的api_url并填写params中的各个参数。然后,用woplusClient中的post方法提交请求。

 

其中 resp = woplusClient.post(api_url,params,false)中的最后一个参数含义即是无须签名。并且,因为在确认支付时还需要这些参数,所以,我们一旦提交成功,将这些参数保存在session中,以备后用。


resp是一个WoPlusResponse实例,其中的resultCode封装了接口的响应码。我们可以根据这个响应码对接口调用结果进行处理。


接下来,我们再补充apppayment的函数体代码,这里要做的事情就是再构造相应的参数集合,并调用另一个计费接口『按次类支付接口』。

@RequestMapping(/*见上段代码示例*/)
public @ResponseBody WoPlusResponse apppayment(/*见上段代码示例*/){
		
	WoPlusResponse resp = new WoPlusResponse();
		
	String api_url="https://open.wo.com.cn/openapi/rpc/apppayment/v2.0";
		
	@SuppressWarnings("unchecked")
	HashMap<String,Object> params =(HashMap<String,Object>) (request.getSession().getAttribute("paymentcodesms_param"));
		
	if(!params.get("paymentUser").equals(mobile))
		return resp;
		
	params.put("paymentcodesms",Long.decode(vcode).longValue());
	params.put("timeStamp", 
new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()));
		
	params.remove("paymentType");
		
	try {
		resp = woplusClient.post(api_url, params);
		
	} catch (Exception e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
		
	return resp;
}


代码与前一个函数类似,先从session中取出params参数集合,补充两个参数paymentcodesms和timeStamp,并移除paymentType参数。同样woplusClient的post方法,此时,需要签名,所以只有两个参数api_url和params(post方法缺省是带签名的)。

 

紧接着,我们再实现对DemoController的调用。我在示例中选择bootstrap作WEB样式,用jQuery作为前端脚本对Controller进行异步调用。


你完全可以选择其它技术方法来实现对DemoController的调用,因此,这方面我不细说了。基本的代码参考SDK包中的源码即可。

$(“#paymentcodesms").click(function(){
	var mobileStr=$(“#mobile”).val();
	$.ajax({
		url:’api/paymentcodesms?mobile='+mobileStr,
		type:'get',
		contentType:”application/json;charset=utf-8",
		datatype:'json',
		success:function(data){
			var str=JSON.stringify(data.content);
			$("#resultDesc").val(str);
		}
		});
		
});
	
$("#apppayment").click(function(){
		
	var mobileStr=$("#mobile").val();
	var vcode=$("#vcode").val();
		
	$.ajax({
		url:'api/apppayment?mobile='+mobileStr+"&vcode="+vcode,
		type:'get',
		contentType:"application/json;charset=utf-8",
		datatype:’json',
		success:function(data){	
			var str=JSON.stringify(data.content);
			$("#resultDesc").val(str);
		}
});

到此,所有的代码开发即告完成。




四、调测(2分钟)


下面我们来看看执行效果,先启动WebApp应用,我们看到这样的页面:

技术分享


输入你的手机号,点击『发送验证码』,你的手机会收到一个6位数字的验证码,在下面的框中填写验证码,点击『确认支付』,此时,你的手机会收到支付成功的通知短信,那么,恭喜你,你已成功接入WO+能力共享平台,并完成了一次话费小额支付操作。 

技术分享






十分钟接入WO+能力共享平台