创建如下两个类,并运行,即完成了调用接口(taobao.user.get)的过程
其中包括:
- 参数加密
- 请求接口调用服务
- 调用返回结果
- 注:该接口是在沙箱环境下调用,获取的数据,也是沙箱中数据。若要获取线上环境,请填写自己创建应用获取过来的appkey,appsecret,并更改调用接口的环境地址,同时修改nick为淘宝登陆名
数据获取
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;
public class APITest {
protected static String testUrl = "http://gw.api.tbsandbox.com/router/rest";//沙箱环境调用地址
protected static String appkey = "test";
protected static String secret = "test";
public static String testUserGet(){
TreeMap<String, String> apiparamsMap = new TreeMap<String, String>();
apiparamsMap.put("format", "xml");
apiparamsMap.put("method", "taobao.user.get");
apiparamsMap.put("sign_method","md5");
apiparamsMap.put("app_key",appkey);
apiparamsMap.put("v", "2.0");
//apiparamsMap.put("session",request.getParameter("session"));他用型需要sessionkey
String timestamp =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
apiparamsMap.put("timestamp",timestamp);
apiparamsMap.put("fields","user_id,uid,nick");//需要获取的字段
apiparamsMap.put("nick","andyy_tan");
//生成签名
String sign = Util.md5Signature(apiparamsMap,secret);
apiparamsMap.put("sign", sign);
StringBuilder param = new StringBuilder();
for (Iterator<Map.Entry<String, String>> it = apiparamsMap.entrySet()
.iterator(); it.hasNext();) {
Map.Entry<String, String> e = it.next();
param.append("&").append(e.getKey()).append("=").append(e.getValue());
}
return param.toString().substring(1);
}
public static void main(String[] args) {
String result = Util.getResult(testUrl,testUserGet());
System.out.print(result);
}
}
Util类
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.MessageDigest;
import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;
public class Util {
/**
* 新的md5签名,首尾放secret。
* @param secret 分配给您的APP_SECRET
*/
public static String md5Signature(TreeMap<String, String> params, String secret) {
String result = null;
StringBuffer orgin = getBeforeSign(params, new StringBuffer(secret));
if (orgin == null)
return result;
orgin.append(secret);
try {
MessageDigest md = MessageDigest.getInstance("MD5");
result = byte2hex(md.digest(orgin.toString().getBytes("utf-8")));
} catch (Exception e) {
throw new java.lang.RuntimeException("sign error !");
}
return result;
}
/**
* 二行制转字符串
*/
private static String byte2hex(byte[] b) {
StringBuffer hs = new StringBuffer();
String stmp = "";
for (int n = 0; n < b.length; n++) {
stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));
if (stmp.length() == 1)
hs.append("0").append(stmp);
else
hs.append(stmp);
}
return hs.toString().toUpperCase();
}
/**
* 添加参数的封装方法
*/
private static StringBuffer getBeforeSign(TreeMap<String, String> params, StringBuffer orgin) {
if (params == null)
return null;
Map<String, String> treeMap = new TreeMap<String, String>();
treeMap.putAll(params);
Iterator<String> iter = treeMap.keySet().iterator();
while (iter.hasNext()) {
String name = (String) iter.next();
orgin.append(name).append(params.get(name));
}
return orgin;
}
/**连接到TOP服务器并获取数据*/
public static String getResult(String urlStr, String content) {
URL url = null;
HttpURLConnection connection = null;
try {
url = new URL(urlStr);
connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setRequestMethod("POST");
connection.setUseCaches(false);
connection.connect();
DataOutputStream out = new DataOutputStream(connection.getOutputStream());
out.write(content.getBytes("utf-8"));
out.flush();
out.close();
BufferedReader reader =
new BufferedReader(new InputStreamReader(connection.getInputStream(), "utf-8"));
StringBuffer buffer = new StringBuffer();
String line = "";
while ((line = reader.readLine()) != null) {
buffer.append(line);
}
reader.close();
return buffer.toString();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (connection != null) {
connection.disconnect();
}
}
return null;
}
}
注:代码转自淘宝开放平台开发文档
分享到:
相关推荐
《深入解析南瑞104规约:基于IEC104协议的通信实现》 在电力自动化领域,IEC104规约是广泛应用的一种通信协议,它为电力系统设备间的远程通信提供了标准化的数据交换格式。南瑞,作为国内电力自动化行业的领军企业...
《深入理解IEC 104协议:基于C++的实现》 IEC 104,全称为“International Electrotechnical Commission 60870-5-104”,是电力自动化领域广泛采用的一种通信协议,主要用于远程终端单元(RTU)、智能电子设备(IED...
《104规约报文解析:初学者指南》 104协议,全称IEC 60870-5-104,是电力自动化领域广泛应用的一种通信协议,主要用于电力系统的SCADA(Supervisory Control And Data Acquisition)系统,实现远程终端单元(RTU)...
《Qtester104:深入理解IEC104调试工具》 在电力通信领域,IEC60870-5-104协议扮演着至关重要的角色,它是国际电工委员会(IEC)制定的一种标准,用于电力系统自动化设备之间的数据交换。Qtester104就是针对这一协议...
《ProIEC104Client1-5版:电力远动测试与101/104协议详解》 在电力系统自动化领域,通信协议扮演着至关重要的角色,其中IEC 101和IEC 104是两种广泛采用的标准。本文将围绕"ProIEC104Client1-5版"这一测试软件,...
IEC104Master IEC104NASlave.zip AppWizard has created this IEC104NAMaster DLL for you. This file contains a summary of what you will find in each of the files that make up your IEC104NAMaster ...
**IEC 104规约模拟器**是电力系统通信领域中的一种重要工具,主要用于模拟和测试基于IEC 60870-5-104标准的数据传输。这个标准,通常简称为IEC 104,是国际电工委员会制定的一种通讯协议,专门用于电力自动化系统中...
许继104规约,全称为IEC 60870-5-104,是电力系统自动化领域广泛应用的一种通信协议。这个规约是基于TCP/IP网络的,目的是实现电力系统的远动设备(RTU)与主站之间的数据交换。许继104协议文档通常包含了关于如何...
IEC 104协议是国际电工委员会制定的一种通信协议,主要用于电力系统自动化设备之间的数据交换,如变电站与调度中心、智能电表与主站等。本话题将围绕"IEC 104 主站模拟工具"和"IEC 104 客户端工具"展开,介绍其开发...
**IEC104协议详解** IEC104,全称是International Electrotechnical Commission 60870-5-104,是一种国际标准通信协议,主要用于电力系统自动化中的数据交换。该协议定义了设备间的通信规程,包括报文结构、数据...
《ProIEC104Client:一款可靠的104主站仿真工具》 在电力自动化领域,IEC 60870-5-104标准(简称104协议)是广泛应用的一种通信协议,主要用于电力系统变电站自动化设备之间的数据交换。本文将详细介绍ProIEC104...
Kepware公司的Kepserver是一款强大的OPC服务器软件,支持多种协议,包括104协议(也称为Modbus TCP)。本文将详细阐述如何配置Kepserver-104主站与104从站的对接流程。 首先,我们来看104从站的配置。104协议是一种...
IEC104模拟器是一种专门用于测试和模拟IEC60870-5-104协议的工具,该协议是国际电工委员会(IEC)制定的一种用于电力系统自动化设备之间通信的标准。这个“IEC104模拟器,亲测可用”可能包含了两个不同的测试组件,...
ZCU104 开发板原理图 ZCU104 开发板原理图是 Xilinx 官方提供的一份详细的设计文件,旨在帮助开发者快速了解 ZCU104 开发板的设计理念和实现方法。该文件包含了 ZCU104 开发板的详细设计信息,包括原理图、组件清单...
IEC104模拟器是针对电力自动化领域通信标准IEC 60870-5-104的一种仿真工具,它可以帮助开发者和工程师在VS2015环境下进行测试和调试工作。IEC104协议是国际电工委员会(IEC)制定的用于电力系统SCADA(Supervisory ...
《全面解析:模拟主站104调试技术与实践》 在工业自动化领域,通信协议是设备间数据交换的关键。104协议,全称IEC 60870-5-104,是一种广泛应用的电力系统远动通信协议,尤其在SCADA(Supervisory Control and Data...
《DL634.5104-2002(60870-5-104)- 104规约与101104协议详解》 在电力自动化领域,通信规约是实现远程终端单元(RTU)与主站系统之间数据交换的关键技术。DL634.5104-2002是根据国际电工委员会(IEC)60870-5-104...
电力104规约,全称为IEC60870-5-104,是国际电工委员会(IEC)制定的一种通信规约,主要用于电力系统自动化设备间的远动通信。这一规约是电力行业广泛应用的标准,尤其在调度中心与变电站之间的数据交换中起到关键...
电网104规约,全称为“IEC60870-5-104”,是电力系统中广泛使用的通信规约,主要用于自动化设备之间的数据交换,如SCADA(Supervisory Control and Data Acquisition)系统。这个规约是国际电工委员会(IEC)制定的...