电商平台能力接口
提供给电商服务商、自研商家的平台能力,目前包含订单能力接口、商品能力接口、和事件通知推送(仅限虚拟商家接入)。
电商服务商接口验证签名
调用电商服务商接口需带上验证签名的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/retailerSetReceiverInfo | 修改收货人信息 |
order/retailerSetRetailerRemark | 修改商家备注信息 |
商品能力接口
商品业务相关的接口,详细见接口列表:
接口 | 说明 |
---|---|
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-02-06