文档中心 > 新零售联盟

沙箱环境测试

更新时间:2018/03/26 访问次数:6085

沙箱简介

淘宝沙箱环境是淘宝开放平台(TOP)提供给独立软件开发商(ISV)的测试环境。数据完全独立,大部分API已经部署到该环境中供ISV进行API的功能测试,对于APP的调用量无限制,但获取大批量数据时,超时率会较线上环境更高。对于整个环境,我们力求做到:

  • 业务全面&实时:新的沙箱环境,业务和正式环境保持实时同步更新,同时我们会逐步在沙箱中提供更多的功能,以便ISV可以进行全面测试.
  • 系统&业务稳定:我们会对系统、应用、业务进行监控,保证沙箱环境的高可用。
  • 操作易用:目前商品管理、交易管理、物流、退款、评价管理都提供了淘宝的原始页面。
  • 对于正式环境TOP提供的各种服务协议,沙箱环境的调用方式和线上一致,唯一不同的就是沙箱的访问地址和测试帐号

沙箱使用流程:

undefined

沙箱中,提供了商品管理、交易管理、评价管理、退款管理、发货管理等核心功能的原始操作页面,方便ISV在测试的过程中准备数据。
undefined
沙箱中去除了对淘宝助理的依赖,而数据准备将以卖家管理后台的形式对外提供。

测试约定

在整个测试过程中进行以下约定:

  • 沙箱所有注册账户均以sandbox_开头,否则登录将跳到错误页面。
  • 沙箱所有添加的商品,标题中必须包含沙箱测试,否则商品详情页将跳到错误页面。
  • 沙箱中老的使用Scope方式的短授权已经下线,对于访问短授权接口,必须升级到新的TOP平台安全体系进行。
  • 沙箱中所有需要用到验证码的地方,统一使用8888。
  • 测试appkey在沙箱中可以调所有的接口,同时没有流量限制。如果遇到有流量限制,则请到正式环境开发者中心的应用配置沙箱环境页面重新更新下即可。

访问地址

淘宝沙箱的域名是tbsandbox.com的,因此所有访问沙箱的地址可参考正式环境的地址,将域名后缀由taobao.com改成tbsandbox.com。下面是一些常用的地址入口:

  • TOP访问入口HTTP:http://gw.api.tbsandbox.com/router/rest
  • TOP访问入口HTTPS:https://gw.api.tbsandbox.com/router/rest
  • 容器授权入口TOP协议:http://container.api.tbsandbox.com/container
  • 容器授权入口OAuth2协议:https://oauth.tbsandbox.com/authorize
  • 沙箱分销商页面分销数据管理:http://fenxiao.tbsandbox.com/distributor/index.htm
  • 沙箱供应商页面分销数据管理:http://fenxiao.tbsandbox.com/supplier/index.htm
  • 物流宝联调平台物流宝数据管理:http://fbi.tbsandbox.com/
  • 支付宝沙箱页面支付宝接口数据准备:http://sandbox.alipaydev.com/

测试帐号创建

在使用沙箱的过程中,根据不同的业务场景,我们需要对以下帐号类型有所了解:**日常环境注册服务不稳定,可使用下方公有账号**

  • 淘宝帐号
    根据业务类型,淘宝帐号分:集市卖家帐号 和商城卖家帐号。集市卖家可购买商品,因此也可以作为买家帐号,商城卖家帐号不能购买商品。目前,可通过以下两种方式获取:

  • 系统默认:系统默认帐号密码统一为:taobao1234 , 帐号如下:

    • 商城卖家账号 -> sandbox_c_1 & sandbox_b_00~sandbox_b_29 -> 例如:sandbox_c_1 , sandbox_b_01
    • 集市卖家账号 -> sandbox_c_2~sandbox_c_20 -> 例如:sandbox_c_2
  • 个人注册:个人注册地址:沙箱注册,如下图:
    undefined

  • 普通用户表示集市卖家,可购买或发布商品,商城用户为商城卖家,不能购买商品,如果需要发布商品,则需要先授权品牌或者类目。

  • 沙箱的用户名必须以sandbox开头,否则将创建失败。
  • 在创建用户时,系统将默认创建支付宝账户,名称:Mini淘宝用户名@alipaydev.com,如:sandbox_c_11@alipaydev.com。支付宝登录密码和支付密码和淘宝帐号密码相同。可到我的支付宝进行管理。

对于这些创建的用户,如果需要发货 ,请到物流地址库进行管理卖家发货地址和退货地址。否则将不能发货。

  • AppKey帐号

目前沙箱的测试APPKEY帐号,是通过线上帐号直接同步过来的,ISV测试过程中可在正式环境配置沙箱管理页面对APPKEY相关信息进行管理。同时,也提供一个默认的测试帐号:appkey:test , Secret:test。沙箱appkey帐号管理页面进入流程如下:

访问正式环境我的应用后台,选择一个我当前创建的应用进入,之后选择配置沙箱环境选项,进行配置沙箱管理页面,如下图:

undefined

  • 该页面将展现沙箱环境中的appkey 和 Secret。
  • 回调URL是用户接收授权信息和消息通知,至于其他用处和线上保持一致。
  • 出于安全考虑,TOP将对短授权机制进行升级,统一切换到新的安全机制上来,而下面那些配置项,ISV可自行填写,从而获取更高级别的安全等级。老的安全机制在沙箱中已经禁用,如果测试短授权类接口,请升级到新的安全级别上。
  • SessionKey:Sessionkey 获取可参考应用授权获取。如果想快速获取,可使用Sessionkey获取进行。

  • 支付宝帐号:沙箱交易流程中,对与支付宝相关的操作都是直接mock,因此,沙箱中的支付宝帐号仅仅是为支付宝接口测试使用的。在注册淘宝账户时,系统会默认创建支付宝账户,同时用户也可以到我的支付宝页面进行管理。绑定的支付宝账户名称必须以淘宝账户名开头。

undefined

  • 物流宝帐号: 物流宝接口测试中用到的测试帐号,以及他们之间的管理,可到物流宝联调平台进行创建和维护。若在物流宝联调平台上创建的账户不能购买或者发布宝贝等,可到沙箱测试帐号修复页面进行修复。

  • 分销帐号帐号:分销接口测试用到的账户关系如下:

undefined

一个供应商对应多个分销商:
undefined

多个供应商对应一个分销商:
undefined

查看API文档

根据业务功能到API文档上查看API入参和返回参数。
* 公开API可在文档上直接搜索到,对于有些增值API,需要申请相应的权限,到开发者中心查看。
* 从API文档上可以查看API的入参和返回参数,TOP目前支持JSON和XML两种协议的返回,返回的格式与API文档保持一致,具体说明可参考API 请求与响应。(部分API未满足)

SDK下载

TOP 为ISV提供了几种语言的 SDK,可自行下载下载SDK。我们建议大家使用我们提供的SDK,这样在调用上方便很多。

  • api 如果未上线,需要联系阿里的API开发同学,将未上线的API沙箱SDK下载下来给到
  • api 如已上线,TOP 为ISV提供了几种语言的 SDK,可自行下载SDK

HTTP调用

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()); } } }

HTTPS调用

免签名调用和传统的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}}}
                                 */
                                }
                        }

FAQ

关于此文档暂时还没有FAQ
返回
顶部