淘宝沙箱环境是淘宝开放平台(TOP)提供给独立软件开发商(ISV)的测试环境。数据完全独立,大部分API已经部署到该环境中供ISV进行API的功能测试,对于APP的调用量无限制,但获取大批量数据时,超时率会较线上环境更高。对于整个环境,我们力求做到:
沙箱中,提供了商品管理、交易管理、评价管理、退款管理、发货管理等核心功能的原始操作页面,方便ISV在测试的过程中准备数据。
沙箱中去除了对淘宝助理的依赖,而数据准备将以卖家管理后台的形式对外提供。
在整个测试过程中进行以下约定:
淘宝沙箱的域名是tbsandbox.com的,因此所有访问沙箱的地址可参考正式环境的地址,将域名后缀由taobao.com改成tbsandbox.com。下面是一些常用的地址入口:
在使用沙箱的过程中,根据不同的业务场景,我们需要对以下帐号类型有所了解:**日常环境注册服务不稳定,可使用下方公有账号**
淘宝帐号:
根据业务类型,淘宝帐号分:集市卖家帐号 和商城卖家帐号。集市卖家可购买商品,因此也可以作为买家帐号,商城卖家帐号不能购买商品。目前,可通过以下两种方式获取:
系统默认:系统默认帐号密码统一为:taobao1234 , 帐号如下:
个人注册:个人注册地址:沙箱注册,如下图:
普通用户表示集市卖家,可购买或发布商品,商城用户为商城卖家,不能购买商品,如果需要发布商品,则需要先授权品牌或者类目。
对于这些创建的用户,如果需要发货 ,请到物流地址库进行管理卖家发货地址和退货地址。否则将不能发货。
目前沙箱的测试APPKEY帐号,是通过线上帐号直接同步过来的,ISV测试过程中可在正式环境配置沙箱管理页面对APPKEY相关信息进行管理。同时,也提供一个默认的测试帐号:appkey:test , Secret:test。沙箱appkey帐号管理页面进入流程如下:
访问正式环境我的应用后台,选择一个我当前创建的应用进入,之后选择配置沙箱环境选项,进行配置沙箱管理页面,如下图:
SessionKey:Sessionkey 获取可参考应用授权获取。如果想快速获取,可使用Sessionkey获取进行。
物流宝帐号: 物流宝接口测试中用到的测试帐号,以及他们之间的管理,可到物流宝联调平台进行创建和维护。若在物流宝联调平台上创建的账户不能购买或者发布宝贝等,可到沙箱测试帐号修复页面进行修复。
分销帐号帐号:分销接口测试用到的账户关系如下:
一个供应商对应多个分销商:
多个供应商对应一个分销商:
根据业务功能到API文档上查看API入参和返回参数。
* 公开API可在文档上直接搜索到,对于有些增值API,需要申请相应的权限,到开发者中心查看。
* 从API文档上可以查看API的入参和返回参数,TOP目前支持JSON和XML两种协议的返回,返回的格式与API文档保持一致,具体说明可参考API 请求与响应。(部分API未满足)
TOP 为ISV提供了几种语言的 SDK,可自行下载下载SDK。我们建议大家使用我们提供的SDK,这样在调用上方便很多。
HTTP 调用的线上帮助文档:HTTP调用 , 代码实例:
import com.taobao.api.ApiException; import com.taobao.api.DefaultTaobaoClient; import com.taobao.api.request.UserGetRequest; import com.taobao.api.response.UserGetResponse; public class HttpCallTest { /** * @param args * @throws ApiException */ public static void main(String[] args) throws ApiException { String appKey="test"; String appSecret="test"; String serverUrl = "http://gw.api.tbsandbox.com/router/rest"; /**创建client**/ DefaultTaobaoClient client = new DefaultTaobaoClient(serverUrl , appKey , appSecret, "json"); UserGetRequest req = new UserGetRequest(); /**设置API业务入参**/ req.setFields("nick,email"); req.setNick("sandbox_c_1"); UserGetResponse resp = client.execute(req ); /**正常请求,获取用户信息,由于email是需要用户授权才能获取,因此返回的信息中不包含emaill信息**/ System.out.println(resp.getBody()); /**传入用户授权的sessionkey, 可获取用户 的email**/ resp = client.execute(req, "6101813112fbded1142381ece45b633a381c53976144a932074082786"); System.out.println(resp.getBody()); /**传入不存在的nick ,对错误进行处理****/ req.setNick("sandbox_nouser"); resp = client.execute(req); if(resp.isSuccess()) { System.out.println(resp.getBody()); } else { /**如果subCode 以isp开头,可重试,否则是由于业务错误,请不要重试。***/ if(resp.getSubCode() != null && resp.getSubCode().startsWith("isp")) resp = client.execute(req); else System.out.println(resp.getBody()); } } }
免签名调用和传统的HTTP调用方式调用原理是一致的,只是通过https的方式,采用国际oauth2.0的协议,免去签名的校验,确保数据在信道传输过程中的安全。
HTTPS 调用的线上帮助文档:HTTPS调用 。注意事项:
import java.io.IOException; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.TimeZone; import com.taobao.api.ApiException; import com.taobao.api.Constants; import com.taobao.api.internal.util.WebUtils; public class HttpsCallTest { /** * @param args * @throws ApiException * @throws IOException */ public static void main(String[] args) throws ApiException, IOException { /** * 访问 https://oauth.tbsandbox.com/authorize?response_type=code&client_id=1021035674&redirect_uri=http://mini.tbsandbox.com&state=1212&scope=item&view=web * 取到code , */ // Map params = new HashMap(); params.put("response_type", "code"); params.put("client_id", "1021035674"); params.put("redirect_uri", "http://mini.tbsandbox.com"); params.put("state", "1212"); params.put("scope", "item"); params.put("view", "web"); params.put("code", "v4OJpGaL6sZJtPAokVDanR0v162"); params.put("client_secret", "sandbox68cb8f35e1d06f8154c1551de"); params.put("grant_type", "authorization_code"); /** * 获取token 的值 * System.out.print(WebUtils.doPost("https://oauth.tbsandbox.com/token", params, 0, 0)); { "w2_expires_in": 1800, "taobao_user_id": "2074082786", "taobao_user_nick": "sandbox_c_1", "w1_expires_in": 31536001, "re_expires_in": 15552000, "r2_expires_in": 259200, "hra_expires_in": "1800", "expires_in": 31536001, "token_type": "Bearer", "refresh_token": "6200019ed08a5596aca6c6ccf8dfhbcd15582381d437a452074082786", "access_token": "620101925972b8f5b3c3bfb9bcdfhb722b64a660ce34e732074082786", "r1_expires_in": 31536001 } */ /** * 通过取到的token , 访问top */ Map paramss = new HashMap(); String serverUrl = "https://gw.api.tbsandbox.com/router/rest"; paramss.put("method", "taobao.user.get"); paramss.put("v", "2.0"); paramss.put("fields", "user_id,uid,nick,sex"); paramss.put("access_token", "620101925972b8f5b3c3bfb9bcdfhb722b64a660ce34e732074082786"); paramss.put("format", "json"); System.out.print(WebUtils.doPost(serverUrl, paramss , 0 , 0)); /** * {"user_get_response":{"user":{"nick":"sandbox_c_1","uid":"04551356471221876972373904922375","user_id":2074082786}}} */ } }