跳转到: 导航, 搜索
 
(未显示1个用户的29个中间版本)
第1行: 第1行:
=电商服务商平台能力接口=
+
=电商平台能力接口=
  
 
<div class="wiki_txtJ">
 
<div class="wiki_txtJ">
提供给电商服务商的平台能力,目前包含订单能力接口、商品能力接口。
+
提供给电商服务商、自研商家的平台能力,目前包含订单能力接口、商品能力接口、和事件通知推送(仅限虚拟商家接入)。
 
</div>
 
</div>
  
第10行: 第10行:
  
 
<div class="wiki_txtJ">
 
<div class="wiki_txtJ">
调用电商服务商接口需带上验证签名的sign参数,其生成方法为:将调用接口的参数,过滤掉不参与签名的参数后,按照键名进行升序排序,之后转换为URL查询字符串(querystring),并在结尾拼接上秘钥(appkey 对应的 app secret),最后将得到的字符串进行md5,得到最终的sign值。
+
调用电商服务商接口需带上验证签名的sign参数,其生成方法为:将调用接口的参数,过滤掉不参与签名的参数后,按照键名进行升序排序,之后转换为URL查询字符串(querystring),并在结尾拼接上电商签名秘钥(示例中的 $key 参数),最后将得到的字符串进行md5,得到最终的sign值。
  
  
 
不参与签名的参数,参数名为sign、sign_type、access_token的参数,和参数值为空字符串的参数。
 
不参与签名的参数,参数名为sign、sign_type、access_token的参数,和参数值为空字符串的参数。
 +
 +
 +
需要特别注意的是:电商能力接口中的 appid 参数,指的是电商服务商身份标识,和获取授权时用到的开放平台 APPKEY 不同,电商服务商身份标识  appid ,与电商签名秘钥(示例中的 $key 参数),为一对一的一组,由微博电商分配,接入时在应用审核通过后,联系微博电商产品申请获取。
 
</div>
 
</div>
  
<div class="code_type">签名方法示例(PHP)</div>
+
 
 +
<div style="margin:15px 0;">
 +
签名方法示例:
 +
</div>
 +
 
 +
<div class="code_type">CODE:PHP</div>
 
<pre class="brush:js">
 
<pre class="brush:js">
 +
// 这里放实际调用接口时的参数 以下仅为示例
 +
$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 = ["",]) {
 
public static function getSign($data_list, $key, $filter_k_list = ["sign", "sign_type", "access_token",], $filter_v_list = ["",]) {
 
     // 过滤不参与签名的参数
 
     // 过滤不参与签名的参数
第38行: 第54行:
 
     $sign = md5($stringKey);
 
     $sign = md5($stringKey);
 
     return $sign;
 
     return $sign;
 +
}
 +
</pre>
 +
 +
 +
<div class="code_type">CODE:JAVA</div>
 +
<pre class="brush:js">
 +
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);
 +
        }
 +
    }
 +
}
 +
</pre>
 +
 +
 +
<div class="code_type">CODE:GO语言</div>
 +
<pre class="brush:js">
 +
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))
 
}
 
}
 
</pre>
 
</pre>
第52行: 第188行:
 
<table class="wiki_table" border="0" cellspacing="0" cellpadding="0" style="width:100%">
 
<table class="wiki_table" border="0" cellspacing="0" cellpadding="0" style="width:100%">
 
<tr>
 
<tr>
<th class="wiki_table_thfirst" style="width:180px">接口  
+
<th class="wiki_table_thfirst" style="width:180px">接口</th>
</th><th>说明
+
<th>说明</th>
</th></tr>
+
</tr>
 
<tr>
 
<tr>
<td class="wiki_table_tdfirst">[[Oauth2/authorize|OAuth2/authorize]]
+
<td class="wiki_table_tdfirst">[[2/proxy/eshop/open/order/retailerGetSubList|order/retailerGetSubList]]</td>
</td><td>请求授权Token
+
<td>获取子订单列表</td>
</td></tr>
+
</tr>
 
<tr>
 
<tr>
<td class="wiki_table_tdfirst">[[Oauth2/access_token|OAuth2/access_token]]
+
<td class="wiki_table_tdfirst">[[2/proxy/eshop/open/order/retailerGetSub|order/retailerGetSub]]</td>
</td><td>获取授权过的access_token
+
<td>获取子订单详情</td>
</td></tr>
+
</tr>
 
<tr>
 
<tr>
<td class="wiki_table_tdfirst">[[Oauth2/get_token_info|OAuth2/get_token_info]]
+
<td class="wiki_table_tdfirst">[[2/proxy/eshop/open/order/retailerSearchSub|order/retailerSearchSub]]</td>
</td><td>授权信息查询接口
+
<td>搜索子订单</td>
</td></tr>
+
</tr>
 +
<tr>
 +
<td class="wiki_table_tdfirst">[[2/proxy/eshop/open/order/retailerFinishSub|order/retailerFinishSub]]</td>
 +
<td>商家履约成功(仅限虚拟商家)</td>
 +
</tr>
 +
<tr>
 +
<td class="wiki_table_tdfirst">[[2/proxy/eshop/open/order/retailerCloseSub|order/retailerCloseSub]]</td>
 +
<td>商家履约失败(仅限虚拟商家)</td>
 +
</tr>
 +
<tr>
 +
<td class="wiki_table_tdfirst">[[2/proxy/eshop/open/order/retailerAddExpress|order/retailerAddExpress]]</td>
 +
<td>提交发货</td>
 +
</tr>
 +
<tr>
 +
<td class="wiki_table_tdfirst">[[2/proxy/eshop/open/order/retailerSetExpress|order/retailerSetExpress]]</td>
 +
<td>修改物流信息</td>
 +
</tr>
 +
<tr>
 +
<td class="wiki_table_tdfirst">[[2/proxy/eshop/open/order/retailerSetReceiverInfo|order/retailerSetReceiverInfo]]</td>
 +
<td>修改收货人信息</td>
 +
</tr>
 +
<tr>
 +
<td class="wiki_table_tdfirst">[[2/proxy/eshop/open/order/retailerSetRetailerRemark|order/retailerSetRetailerRemark]]</td>
 +
<td>修改商家备注信息</td>
 +
</tr>
 +
</table>
 +
</div>
 +
 
 +
 
 +
 
 +
==售后能力接口==
 +
 
 +
<div class="wiki_txtJ">
 +
商品售后相关的接口,详细见接口列表:
 +
</div>
 +
 
 +
<div style="margin:15px 0;">
 +
<table class="wiki_table" border="0" cellspacing="0" cellpadding="0" style="width:100%">
 +
<tr>
 +
<th class="wiki_table_thfirst" style="width:180px">接口</th>
 +
<th>说明</th>
 +
</tr>
 +
<tr>
 +
<td class="wiki_table_tdfirst">[[2/proxy/eshop/open/order/retailerSearchSold|order/retailerSearchSold]]</td>
 +
<td>搜索售后单</td>
 +
</tr>
 +
<tr>
 +
<td class="wiki_table_tdfirst">[[2/proxy/eshop/open/order/retailerGetSold|order/retailerGetSold]]</td>
 +
<td>获取售后单详情</td>
 +
</tr>
 +
<tr>
 +
<td class="wiki_table_tdfirst">[[2/proxy/eshop/open/order/retailerJudgeSold|order/retailerJudgeSold]]</td>
 +
<td>售后单审核</td>
 +
</tr>
 +
<tr>
 +
<td class="wiki_table_tdfirst">[[2/proxy/eshop/open/order/retailerDelaySold|order/retailerDelaySold]]</td>
 +
<td>售后单延长收货审核时间</td>
 +
</tr>
 +
<tr>
 +
<td class="wiki_table_tdfirst">[[2/proxy/eshop/open/order/retailerGetSoldRecordList|order/retailerGetSoldRecordList]]</td>
 +
<td>售后单协商历史</td>
 +
</tr>
 +
<tr>
 +
<td class="wiki_table_tdfirst">[[2/proxy/eshop/open/retailer/getAddressList|retailer/getAddressList]]</td>
 +
<td>获取商家地址列表</td>
 +
</tr>
 +
<tr>
 +
<td class="wiki_table_tdfirst">[[2/proxy/eshop/open/order/retailerGetSoldExpressList|order/retailerGetSoldExpressList]]</td>
 +
<td>获取售后包裹单</td>
 +
</tr>
 
</table>
 
</table>
 
</div>
 
</div>
第81行: 第286行:
 
<table class="wiki_table" border="0" cellspacing="0" cellpadding="0" style="width:100%">
 
<table class="wiki_table" border="0" cellspacing="0" cellpadding="0" style="width:100%">
 
<tr>
 
<tr>
<th class="wiki_table_thfirst" style="width:180px">接口  
+
<th class="wiki_table_thfirst" style="width:180px">接口</th>
</th><th>说明
+
<th>说明</th>
</th></tr>
+
</tr>
 
<tr>
 
<tr>
<td class="wiki_table_tdfirst">[[Oauth2/authorize|OAuth2/authorize]]
+
<td class="wiki_table_tdfirst">[[2/proxy/eshop/open/goods/online|goods/online]]</td>
</td><td>请求授权Token
+
<td>商品上架</td>
</td></tr>
+
</tr>
 
<tr>
 
<tr>
<td class="wiki_table_tdfirst">[[Oauth2/access_token|OAuth2/access_token]]
+
<td class="wiki_table_tdfirst">[[2/proxy/eshop/open/goods/offline|goods/offline]]</td>
</td><td>获取授权过的access_token
+
<td>商品下架</td>
</td></tr>
+
</tr>
 
<tr>
 
<tr>
<td class="wiki_table_tdfirst">[[Oauth2/get_token_info|OAuth2/get_token_info]]
+
<td class="wiki_table_tdfirst">[[2/proxy/eshop/open/goods/getGoodsInfo|goods/getGoodsInfo]]</td>
</td><td>授权信息查询接口
+
<td>根据商品ID查询商品信息</td>
</td></tr>
+
</tr>
 +
<tr>
 +
<td class="wiki_table_tdfirst">[[2/proxy/eshop/open/goods/getGoodsList|goods/getGoodsList]]</td>
 +
<td>根据商品更新时间查询商品信息</td>
 +
</tr>
 +
<tr>
 +
<td class="wiki_table_tdfirst">[[2/proxy/eshop/open/goods/getShopInfo|goods/getShopInfo]]</td>
 +
<td>获取商家信息</td>
 +
</tr>
 +
<tr>
 +
<td class="wiki_table_tdfirst">[[2/proxy/eshop/open/goods/getAllCateData|goods/getAllCateData]]</td>
 +
<td>获取商家类目</td>
 +
</tr>
 +
<tr>
 +
<td class="wiki_table_tdfirst">[[2/proxy/eshop/open/goods/getDraftExtendField|goods/getDraftExtendField]]</td>
 +
<td>获取商品扩展类目</td>
 +
</tr>
 +
<tr>
 +
<td class="wiki_table_tdfirst">[[2/proxy/eshop/open/goods/setGoodsInfo|goods/setGoodsInfo]]</td>
 +
<td>修改商品</td>
 +
</tr>
 +
<tr>
 +
<td class="wiki_table_tdfirst">[[2/proxy/eshop/open/goods/setGoodsInfoPin|goods/setGoodsInfoPin]]</td>
 +
<td>使用PIN码作为标识来修改商品</td>
 +
</tr>
 +
<tr>
 +
<td class="wiki_table_tdfirst">[[2/proxy/eshop/open/goods/setGoodsStockSkuid|goods/setGoodsStockSkuid]]</td>
 +
<td>使用SKU ID作为标识来修改商品库存</td>
 +
</tr>
 +
<tr>
 +
<td class="wiki_table_tdfirst">[[2/proxy/eshop/open/goods/setGoodsStockPin|goods/setGoodsStockPin]]</td>
 +
<td>使用PIN码作为标识来修改商品库存</td>
 +
</tr>
 +
<tr>
 +
<td class="wiki_table_tdfirst">[[2/proxy/eshop/open/goods/setGoodsPriceSkuid|goods/setGoodsPriceSkuid]]</td>
 +
<td>使用SKU ID作为标识来修改商品价格</td>
 +
</tr>
 +
<tr>
 +
<td class="wiki_table_tdfirst">[[2/proxy/eshop/open/goods/setGoodsPricePin|goods/setGoodsPricePin]]</td>
 +
<td>使用PIN码作为标识来修改商品价格</td>
 +
</tr>
 +
<tr>
 +
<td class="wiki_table_tdfirst">[[2/proxy/eshop/open/goods/getGoodsVerifyInfo|goods/getGoodsVerifyInfo]]</td>
 +
<td>获取商品二次审核详情</td>
 +
</tr>
 +
<tr>
 +
<td class="wiki_table_tdfirst">[[2/proxy/eshop/open/goods/applyGoodsVerify|goods/applyGoodsVerify]]</td>
 +
<td>提交商品二次审核</td>
 +
</tr>
 +
<tr>
 +
<td class="wiki_table_tdfirst">[[2/proxy/eshop/open/goods/revertGoodsVerify|goods/revertGoodsVerify]]</td>
 +
<td>撤销商品二次审核</td>
 +
</tr>
 +
<tr>
 +
<td class="wiki_table_tdfirst">[[2/proxy/eshop/open/goods/delGoodsVerify|goods/delGoodsVerify]]</td>
 +
<td>删除商品二次审核</td>
 +
</tr>
 +
<tr>
 +
<td class="wiki_table_tdfirst">[[2/proxy/eshop/open/goods/getDraftList|goods/getDraftList]]</td>
 +
<td>获取商品草稿列表</td>
 +
</tr>
 +
<tr>
 +
<td class="wiki_table_tdfirst">[[2/proxy/eshop/open/goods/getDraftInfo|goods/getDraftInfo]]</td>
 +
<td>获取商品草稿详情</td>
 +
</tr>
 +
<tr>
 +
<td class="wiki_table_tdfirst">[[2/proxy/eshop/open/goods/addDraft|goods/addDraft]]</td>
 +
<td>创建商品到草稿</td>
 +
</tr>
 +
<tr>
 +
<td class="wiki_table_tdfirst">[[2/proxy/eshop/open/goods/setDraftInfo|goods/setDraftInfo]]</td>
 +
<td>编辑商品草稿</td>
 +
</tr>
 +
<tr>
 +
<td class="wiki_table_tdfirst">[[2/proxy/eshop/open/goods/delDrafts|goods/delDrafts]]</td>
 +
<td>删除商品草稿</td>
 +
</tr>
 +
<tr>
 +
<td class="wiki_table_tdfirst">[[2/proxy/eshop/open/goods/applyDraftVerify|goods/applyDraftVerify]]</td>
 +
<td>提交商品草稿审核</td>
 +
</tr>
 +
<tr>
 +
<td class="wiki_table_tdfirst">[[2/proxy/eshop/open/goods/revertDraftVerify|goods/revertDraftVerify]]</td>
 +
<td>撤销商品草稿审核</td>
 +
</tr>
 +
<tr>
 +
<td class="wiki_table_tdfirst">[[2/proxy/eshop/open/goods/getTplList|goods/getTplList]]</td>
 +
<td>获取运费模版列表</td>
 +
</tr>
 +
<tr>
 +
<td class="wiki_table_tdfirst">[[2/proxy/eshop/open/goods/getTplInfo|goods/getTplInfo]]</td>
 +
<td>获取运费模版详情</td>
 +
</tr>
 +
<tr>
 +
<td class="wiki_table_tdfirst">[[2/proxy/eshop/open/goods/addTpl|goods/addTpl]]</td>
 +
<td>添加运费模版</td>
 +
</tr>
 +
<tr>
 +
<td class="wiki_table_tdfirst">[[2/proxy/eshop/open/goods/updateTpl|goods/updateTpl]]</td>
 +
<td>更新运费模版</td>
 +
</tr>
 +
<tr>
 +
<td class="wiki_table_tdfirst">[[2/proxy/eshop/open/goods/delTpl|goods/delTpl]]</td>
 +
<td>删除运费模版</td>
 +
</tr>
 
</table>
 
</table>
 
</div>
 
</div>
第101行: 第410行:
  
  
=附录=
+
==事件通知推送==
 +
 
 +
<div class="wiki_txtJ">
 +
事件通知是由微博电商平台通知接入的商家,目前主要为订单事件通知,仅限虚拟商家接入。
 +
</div>
 +
 
 +
 
 +
<div class="wiki_taglist">
 +
<ul class="clearfix">
 +
<li style="font-size:14px;">[[eshop/push|事件通知推送]]</li>
 +
</ul>
 +
</div>
 +
 
 +
 
 +
 
 +
==附录==
 +
 
 +
<div class="wiki_txtJ">
 +
订单能力接口中需要用到的各种编码对照表。
 +
</div>
 +
 
 +
 
 +
<div class="wiki_taglist">
 +
<ul class="clearfix">
 +
<li style="font-size:14px;width:160px;">[[ecs/code_index|订单类型对照表]]</li>
 +
<li style="font-size:14px;width:160px;">[[ecs/code_index|订单状态码对照表]]</li>
 +
<li style="font-size:14px;width:160px;">[[ecs/code_index|快递公司编码对照表]]</li>
 +
<li style="font-size:14px;width:160px;">[[ecs/code_index|充值账号类型对照表]]</li>
 +
<li style="font-size:14px;width:160px;">[[ecs/code_index|履约方式对照表]]</li>
 +
<li style="font-size:14px;width:160px;">[https://js.t.sinajs.cn/t6/ec/statics/cmn/sources/regions_mainland.json 微博电商地址库]</li>
 +
</ul>
 +
</div>
  
  

2024年3月26日 (二) 16:23的最后版本

电商平台能力接口

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


电商服务商接口验证签名

调用电商服务商接口需带上验证签名的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 获取商家地址列表
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 删除运费模版


事件通知推送

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



附录

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






文档更新时间: 2024-03-26