注意:以下文档只适用于TOP接口,请谨慎使用!

文档中心 > 全渠道

售货机接入说明

更新时间:2019/09/05 访问次数:13284

提前工作事项须知

商家提前须知:

  • 商家发布售货机/派样机 商品(https://iot.tmall.com/)。用旗舰店账号登录,发布商品的路径“商品管理->商品发布”
  • 授权ISV的应用

ISV提前须知:

 

业务流程说明

第一张图,消费者在售货机上选择需要的商品,售货机上出现二维码并引导用户扫码,生成二维码的接口tmall.device.trade.precreate

第二张图,消费者在手机淘宝/手机天猫上扫描二维码,进入到提交订单页面。(ISV后台会收到一条二维码被扫描的推送)

第三张图,消费者在手机淘宝/手机天猫上提交订单并完成支付。(ISV后台会收到一条支付成功的推送)

第四张图,售货机根据收到的支付成功的推送,机器出货

 

当前的业务玩法主要是:

        1)美妆商家通过吸引用户关注店铺,通过售货机低价派发样品;技术对接上主要用到的接口有关注店铺+售货机交易购买

        2)美妆/服饰商家通过售货机,做常态化销售;技术对接上主要用到的接口有售货机交易购买

 

开发数据准备

每个业务会有区别,详询对接的实施小二。

接口对接

智能硬件数据API

售货机交易购买API

售货机交易购买API对接。tmall.device.trade.precreate

1、接口参数说明

  • device_code

    设备业务编码

  • out_trade_id

    外部订单ID,下单要保证唯一。

  • item_list

    商品列表,如果是多个商品,要保证是同一个商家名下的商品。

    buy_amount : 购买件数,默认为1,可不传
    sku_id: 商品SKU ID ,默认为0,可不传
    item_id: 商品ID,注意非天猫国际等海外店铺商品 
    unit_price: 商品单价 

  • type

    交易状态类型。1,扫码后跳转下单页,创建订单,2,扫码后跳转收银台,直接支付

  • callback_url

    回调地址,当订单创建,付款成功后,会收到回调。必须是https地址,最好是 ews 域名。可不传

    用来接收回调数据的url,需要做urlencode。我们在订单创建、支付成功两个情况下会给该回调url回传数据,同时需要ISV响应我们推送的数据。

     eg:
    https://retail.tmall.com/checkpreload.htm?sign=A17007DDD19A0EBF591B280E63F1E3FF87206FAE0687639D208C38AB4264072B&action=trade-paid&outTradeId=12345678914&deviceCode=E62F465942&method=topNotify&timestamp=1535635291295

2、回调参数说明(平台通过callback_url通知到服务商的参数):

  1. deviceCode

    设备业务编码

  1. action

    订单状态,trade-created 为订单创建,trade-paid 为订单付款

  1. outTradeId

    外部订单ID

  1. tbTradeId

    淘宝订单Id

  1. timestamp

    回调时间

  1. method

    固定值,topNotify

  1. sign

    参数签名:action,deviceCode,method,outTradeId,timestamp 参数 kv排列,

    加密算法:HmacSHA256,密钥 appSecret

    例如上面的例子为 :

加密串:actiontrade-paiddeviceCodeE62F465942methodtopNotifyoutTradeId12345678914timestamp1535635291295
密钥 appsecret

 

2.2、回调返回说明:

      http 状态码 200
      http返回内容含 success

 

2.3 验签辅助代码

private static final String SIGN_ALGO = "HmacSHA256";
    private static final String CHARSET_NAME = "UTF-8";

    /**
     * 获取签名
     *
     * @param params
     * @return
     * @throws NoSuchAlgorithmException
     * @throws UnsupportedEncodingException
     */
    public String signParams(String secret,Map<String,String> params) throws IOException, UnsupportedEncodingException {

        // 第一步:检查参数是否已经排序
        String[] keys = params.keySet().toArray(new String[0]);
        Arrays.sort(keys);

        // 第二步:把所有参数名和参数值串在一起
        StringBuilder query = new StringBuilder();
        for (String key : keys) {
            String value = params.get(key);
            if (!StringUtils.isBlank(key) && !StringUtils.isBlank(value)) {
                query.append(key).append(value);
            }
        }

        return byte2hex(encryptHMACSHA256(query.toString(),secret));
    }
    public static byte[] encryptHMACSHA256(String data, String secret) throws IOException {
        byte[] bytes;
        try {
            SecretKey secretKey = new SecretKeySpec(secret.getBytes(CHARSET_NAME), SIGN_ALGO);
            Mac mac = Mac.getInstance(secretKey.getAlgorithm());
            mac.init(secretKey);
            bytes = mac.doFinal(data.getBytes(CHARSET_NAME));
        } catch (GeneralSecurityException gse) {
            throw new IOException(gse.toString());
        }
        return bytes;
    }

    /**
     * 把字节流转换为十六进制表示方式。
     */
    public static String byte2hex(byte[] bytes) {
        StringBuilder sign = new StringBuilder();
        for (int i = 0; i < bytes.length; i++) {
            String hex = Integer.toHexString(bytes[i] & 0xFF);
            if (hex.length() == 1) {
                sign.append("0");
            }
            sign.append(hex.toUpperCase());
        }
        return sign.toString();
    }

 

获取当前登陆用户信息

 

参考文档:https://open.taobao.com/doc.htm?docId=107161&docType=1

在使用该接口前,您需要在购买聚石塔机器的基础上,接入EWS创建*.ews.m.jaeapp.com格式的域名,在开发H5页面的时候,引入JSSDK

 

FAQ

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