创建如下两个类,并运行,即完成了调用接口(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; } }
注:代码转自淘宝开放平台开发文档