十分钟接入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="492edbd25e65c7fc6113544e86e9f0d87b9eaae9" />
		<constructor-arg index=“1" value="53f7862c8951bb9f14f229daa8a3b88b06b947e1" />
	</bean>

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

@Autowired
WoPlusClient woplusClient;

@RequestMapping(
value=“/api/paymentcodesms",
method=RequestMethod.GET,
headers = {"Accept=application/json"})
public @ResponseBody WoPlusResponse paymentcodesms(
HttpServletRequest request,
@RequestParam("mobile")String mobile)
{… …}

@RequestMapping(
value=“/api/apppayment",
method=RequestMethod.GET,
headers = {"Accept=application/json"})
public @ResponseBody WoPlusResponse apppayment(
HttpServletRequest request,
@RequestParam("mobile")String mobile,
@RequestParam("vcode")String vcode)
{… …}

『计费能力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+能力共享平台,并完成了一次话费小额支付操作。

时间: 2024-11-09 10:48:28

十分钟接入WO+能力共享平台的相关文章

【NLP】十分钟学习自然语言处理

十分钟学习自然语言处理概述 作者:白宁超 2016年9月23日00:24:12 摘要:近来自然语言处理行业发展朝气蓬勃,市场应用广泛.笔者学习以来写了不少文章,文章深度层次不一,今天因为某种需要,将文章全部看了一遍做个整理,也可以称之为概述.关于这些问题,博客里面都有详细的文章去介绍,本文只是对其各个部分高度概括梳理.(本文原创,转载注明出处:十分钟学习自然语言处理概述  ) 1 什么是文本挖掘? 文本挖掘是信息挖掘的一个研究分支,用于基于文本信息的知识发现.文本挖掘的准备工作由文本收集.文本分

教你十分钟掌握Linux文件系统管理

在第一天装系统的时候,我们已经知道了mount,即挂载的概念.装机时自己配置分区的小伙伴都知道,CentOS7的文件系统为xfs,CentOS6则是ext4,更早的CentOS5则是ext3.老师告诉我们这叫文件系统.不同的文件系统有不同的存储特色.如linux里ext2无日志,xfs可支持最高200T之类的,window里fat32无法支持大于4G文件的传输云云-- 稍等,好像有点跑题了. 总之,今天我们来说说基于CentOS平台的Linux文件管理. 先看下面这个题目. 创建一个2G的文件系

(转 )十分钟学习自然语言处理概述

(转 )十分钟学习自然语言处理概述 作者:白宁超 2016年9月23日00:24:12 摘要:近来自然语言处理行业发展朝气蓬勃,市场应用广泛.笔者学习以来写了不少文章,文章深度层次不一,今天因为某种需要,将文章全部看了一遍做个整理,也可以称之为概述.关于这些问题,博客里面都有详细的文章去介绍,本文只是对其各个部分高度概括梳理.(本文原创,转载注明出处:十分钟学习自然语言处理概述  ) 1 什么是文本挖掘? 文本挖掘是信息挖掘的一个研究分支,用于基于文本信息的知识发现.文本挖掘的准备工作由文本收集

茂名石化BPM应用实践 ——业务协同及服务共享平台建设和应用

一.茂名石化简介 茂名石化隶属于中国石油化工集团公司,创建于1955年,是国家"一五"期间156项重点项目之一.经过50多年的发展,茂名石化已成为我国生产规模最大的炼油化工企业之一.目前,公司原油一次加工能力超过2000万吨/年,乙烯生产能力100万吨/年,拥有动力.港口.铁路运输.原油和成品油输送管道.海上原油接卸系统等完善的配套设施.公司生产的炼油化工产品畅销全国,同时出口国际市场.公司年销售收入超过1000亿元,年上缴税金超过200亿元,是广东省著名的纳税大户. 二.茂名石化选择

十分钟的Python代码知识点总结

#-- 寻求帮助:dir(obj) # 简单的列出对象obj所包含的方法名称,返回一个字符串列表help(obj.func) # 查询obj.func的具体介绍和用法 #-- 测试类型的三种方法,推荐第三种if type(L) == type([]):print("L is list")if type(L) == list:print("L is list")if isinstance(L, list):print("L is list") #-

天池平台再升级,打造产业AI知识共享、技术共享平台

摘要: 天池发布"全球AI开发者计划",打造一站式人工智能知识共享平台,计划2年内在平台上集聚30万AI工程师.同时,阿里云天池正式升级,成为从产业机会到实施交付一站式解决的产业AI众智平台. 在5月23日的云栖大会·武汉峰会上,天池发布"全球AI开发者计划",打造一站式人工智能知识共享平台,计划2年内在平台上集聚30万AI工程师.同时,阿里云天池正式升级,成为从产业机会到实施交付一站式解决的产业AI众智平台. 杭州魔点科技有限公司CEO肖传宝.杭州数心网络科技有限

花十分钟,让你变成AI产品经理

花十分钟,让你变成AI产品经理 https://www.jianshu.com/p/eba6a1ca98a4 先说一下你阅读本文可以得到什么.你能得到AI的理论知识框架:你能学习到如何成为一个AI产品经理并且了解到AI产品经理如何在工作中发挥作用,以及AI产品经理需要从哪些方面锻炼能力.最重要的是,通过本文,一切都特别快(手打滑稽). PS:目前只针对弱人工智能(我喜欢简称,此处我们简称为"弱智")进行学习. 首先我们必须要掌握的是AI的专业知识框架,然后了解AI的市场情况,最后要明白

资料共享平台----nabcd

知识共享平台NABCD模型 N(need)需求 大一新生刚刚开始大学生活,不适应大学学习生活的节奏,并且课堂上知识容量大.密度高,学生不能立刻掌握所学知识点,同时,网上资料冗杂繁复,指向性不强,导致学生不能高效的学习,为了充分利用学生的课余时间,培养学生自学能力,辅助老师教学,他们需要一个过来人的引导,帮助他们理清学习的思路和知识的框架结构,快速高效的帮助他们掌握核心知识,增加学习的积极性和自信心.从这个角度来说,针对石家庄铁道大学教学特点开发的“知识共享平台”是乘势而来,是广大师生的共同呼唤.

十分钟学会Markdown(younghz原创)

younghz原创,转载请注明:http://blog.csdn.net/u012150179/article/details/26503779 原内容及代码托管在GitHub上,并持续更新,欢迎交流:https://github.com/younghz/Markdown 主要内容 MARKDOWN是什么? 谁发明可这么个牛X的东西? 为什么要使用它? 怎么使用? 都谁在用?没人用的东西我可不用. 感觉有意思?趁热打铁,推荐几个工具. 正文 1. MARKDOWN是什么? MARKDOWN是一种