跳转到: 导航, 搜索

电商平台能力接口

提供给电商服务商、自研商家的平台能力,目前包含订单能力接口、商品能力接口、和事件通知推送(仅限虚拟商家接入)。


电商服务商接口验证签名

调用电商服务商接口需带上验证签名的sign参数,其生成方法为:将调用接口的参数,过滤掉不参与签名的参数后,按照键名进行升序排序,之后转换为URL查询字符串(querystring),并在结尾拼接上电商签名秘钥(示例中的 $key 参数),最后将得到的字符串进行md5,得到最终的sign值。


不参与签名的参数,参数名为sign、sign_type、access_token的参数,和参数值为空字符串的参数。


需要特别注意的是:电商能力接口中的 appid 参数,指的是电商服务商身份标识,和获取授权时用到的开放平台 APPKEY 不同,电商服务商身份标识 appid ,与电商签名秘钥(示例中的 $key 参数),为一对一的一组,由微博电商分配,接入时在应用审核通过后,联系微博电商产品申请获取。


签名方法示例:

CODE:PHP
// 这里放实际调用接口时的参数 以下仅为示例
$data_list = ["goods_id"=>"371965", "appid"=> 100023, "sign_type"=>"md5"];
// 这个是电商签名秘钥 联系微博电商平台申请获取
$key = 'YOUR SIGN KEY';
// 开始生成签名并输出签名
echo getSign($data_list, $key);

// 根据算法获取签名
public static function getSign($data_list, $key, $filter_k_list = ["sign", "sign_type", "access_token",], $filter_v_list = ["",]) {
    // 过滤不参与签名的参数
    foreach ($data_list as $k => $v) {
        if (in_array($k, $filter_k_list, true) || in_array($v, $filter_v_list, true)) {
            unset($data_list[$k]);
        }
    }
    // 进行排序
    ksort($data_list);
    // 转换为查询字符串,注意过滤前后空格
    $parameter = [];
    foreach ($data_list as $k => $v) {
        $parameter[] = $k . "=" . trim($v);
    }
    $string = implode("&", $parameter);
    // 拼接密钥
    $stringKey = $string . $key;
    // 进行MD5得到最终签名
    $sign = md5($stringKey);
    return $sign;
}


CODE:JAVA
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

class Sign {

    public static final String[] filterKeys = new String[]{"sign", "sign_type", "access_token"};

    public static void main(String[] args) {
        Map<String, String> dataList = new HashMap<>();
        // 这里放实际调用接口时的参数 以下仅为示例
        dataList.put("goods_id", "371965");
        dataList.put("appid", "100023");
        dataList.put("sign_type", "md5");
        // 这个是电商签名秘钥 联系微博电商平台申请获取
        String secret = "YOUR SIGN KEY";
        // 开始生成签名
        String sign = getSign(dataList, secret);
        // 输出签名
        System.out.println(sign);
    }
    // 根据算法获取签名
    public static String getSign(Map<String, String> dataList, String secret) {
        Set<String> keySet = dataList.keySet();
        String[] keyArray = keySet.toArray(new String[0]);
        Arrays.sort(keyArray);
        StringBuilder sb = new StringBuilder();
        String prefix = "";
        for (int i = 0; i < keyArray.length; i++) {
            if (Arrays.asList(filterKeys).contains(keyArray[i])) {
                continue;
            }
            sb.append(prefix).append(keyArray[i]).append("=").append(dataList.get(keyArray[i]));
            prefix = "&";
        }
        sb.append(secret);
        return md5(sb.toString());
    }
    public static String md5(String input) {
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            byte[] messageDigest = md.digest(input.getBytes());
            BigInteger no = new BigInteger(1, messageDigest);
            String hashtext = no.toString(16);
            while (hashtext.length() < 32) {
                hashtext = "0" + hashtext;
            }
            return hashtext;
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException(e);
        }
    }
}


CODE:GO语言
package main

import (
	"crypto/md5"
	"encoding/hex"
	"fmt"
	"sort"
)

func main() {
	// 这里放实际调用接口时的参数 以下仅为示例
	dataList := map[string]string{"goods_id": "371965", "appid": "100023", "sign_type": "md5"}
	// 这个是电商签名秘钥 联系微博电商平台申请获取
	secret := "YOUR SIGN KEY"
	// 开始生成签名
	sign := getSign(dataList, secret)
	// 输出签名
	fmt.Println(sign)
}

// 根据算法获取签名
func getSign(dataList map[string]string, secret string) string {
	var keys []string
	prefix := ""
	str := ""
	// 过滤不参与签名的参数
	filterKList := [3]string{"sign", "sign_type", "access_token"}
	for k := range dataList {
		keys = append(keys, k)
	}
	// 进行排序
	sort.Strings(keys)
	// 转换为查询字符串,注意过滤前后空格
	for _, k := range keys {
		flag := false
		for _, filterK := range filterKList {
			if k == filterK {
				flag = true
				break
			}
		}
		if !flag {
			str += prefix + k + "=" + dataList[k]
			prefix = "&"
		}
	}
	// 拼接密钥
	str += secret
	// 进行MD5得到最终签名
	h := md5.New()
	h.Write([]byte(str))
	return hex.EncodeToString(h.Sum(nil))
}


订单能力接口

订单业务相关的接口,详细见接口列表:

接口 说明
order/retailerGetSubList 获取子订单列表
order/retailerGetSub 获取子订单详情
order/retailerSearchSub 搜索子订单
order/retailerFinishSub 商家履约成功(仅限虚拟商家)
order/retailerCloseSub 商家履约失败(仅限虚拟商家)
order/retailerAddExpress 提交发货
order/retailerSetExpress 修改物流信息
order/retailerSetReceiverInfo 修改收货人信息
order/retailerSetRetailerRemark 修改商家备注信息


售后能力接口

商品售后相关的接口,详细见接口列表:

接口 说明
order/retailerSearchSold 搜索售后单
order/retailerGetSold 获取售后单详情
order/retailerJudgeSold 售后单审核
order/retailerDelaySold 售后单延长收货审核时间
order/retailerGetSoldRecordList 售后单协商历史
retailer/getAddressList 获取商家地址列表


商品能力接口

商品业务相关的接口,详细见接口列表:

接口 说明
goods/online 商品上架
goods/offline 商品下架
goods/getGoodsInfo 根据商品ID查询商品信息
goods/getGoodsList 根据商品更新时间查询商品信息
goods/getShopInfo 获取商家信息
goods/getAllCateData 获取商家类目
goods/getDraftExtendField 获取商品扩展类目
goods/setGoodsInfo 修改商品
goods/setGoodsInfoPin 使用PIN码作为标识来修改商品
goods/setGoodsStockSkuid 使用SKU ID作为标识来修改商品库存
goods/setGoodsStockPin 使用PIN码作为标识来修改商品库存
goods/setGoodsPriceSkuid 使用SKU ID作为标识来修改商品价格
goods/setGoodsPricePin 使用PIN码作为标识来修改商品价格
goods/getGoodsVerifyInfo 获取商品二次审核详情
goods/applyGoodsVerify 提交商品二次审核
goods/revertGoodsVerify 撤销商品二次审核
goods/delGoodsVerify 删除商品二次审核
goods/getDraftList 获取商品草稿列表
goods/getDraftInfo 获取商品草稿详情
goods/addDraft 创建商品到草稿
goods/setDraftInfo 编辑商品草稿
goods/delDrafts 删除商品草稿
goods/applyDraftVerify 提交商品草稿审核
goods/revertDraftVerify 撤销商品草稿审核
goods/getTplList 获取运费模版列表
goods/getTplInfo 获取运费模版详情
goods/addTpl 添加运费模版
goods/updateTpl 更新运费模版
goods/delTpl 删除运费模版


事件通知推送

事件通知是由微博电商平台通知接入的商家,目前主要为订单事件通知,仅限虚拟商家接入。



附录

订单能力接口中需要用到的各种编码对照表。






文档更新时间: 2023-11-24