提供给电商服务商、自研商家的平台能力,目前包含订单能力接口、商品能力接口、和事件通知推送(仅限虚拟商家接入)。
调用电商服务商接口需带上验证签名的sign参数,其生成方法为:将调用接口的参数,过滤掉不参与签名的参数后,按照键名进行升序排序,之后转换为URL查询字符串(querystring),并在结尾拼接上电商签名秘钥(示例中的 $key 参数),最后将得到的字符串进行md5,得到最终的sign值。
不参与签名的参数,参数名为sign、sign_type、access_token的参数,和参数值为空字符串的参数。
需要特别注意的是:电商能力接口中的 appid 参数,指的是电商服务商身份标识,和获取授权时用到的开放平台 APPKEY 不同,电商服务商身份标识 appid ,与电商签名秘钥(示例中的 $key 参数),为一对一的一组,由微博电商分配,接入时在应用审核通过后,联系微博电商产品申请获取。
签名方法示例:
// 这里放实际调用接口时的参数 以下仅为示例
$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;
}
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);
}
}
}
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 | 获取商家地址列表 |
| order/retailerGetSoldExpressList | 获取售后包裹单 |
商品业务相关的接口,详细见接口列表:
| 接口 | 说明 |
|---|---|
| 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 | 删除运费模版 |
事件通知是由微博电商平台通知接入的商家,目前主要为订单事件通知,仅限虚拟商家接入。
订单能力接口中需要用到的各种编码对照表。