感谢您的反馈!
开发者需提供消息接收通道,接收推送形式为 HTTPS POST 请求。
使用消息服务,需要准备一个接收消息的回调接口。
消息示例 #1.正向交易信息示例(下单,付款,发货,收货等正向交易行为产生)
POST /example/uri HTTP/1.1
Host: www.example.com
Content-Type: application/json
Content-Length: 1238
Authorization: 34f7b258df045d4ed9341850ca85b866f34828fd7d51862f11137216294a894c
#消息体
{
"seller_id":"1234567", #卖家ID
"message_type":0,
"data":{
"order_status":"unpaid", #订单状态
"trade_order_id":"260422900198363", #主单Id
"trade_order_line_id":"260422900298363", #子单id
"status_update_time":1603698638 #订单状态更新时间 时间戳
},
"timestamp":1603766859530, #推送时间 时间戳
"site":"lazada_vn" # 站点信息
}
消息示例 #2.逆向交易信息示例(取消,退货退款,等逆向交易行为产生)
POST /example/uri HTTP/1.1
Host: www.example.com
Content-Type: application/json
Content-Length: 1238
Authorization: 34f7b258df045d4ed9341850ca85b866f34828fd7d51862f11137216294a894c
#消息体
{
"seller_id":"1000114855",
"message_type":0,
"data":{
"order_status":"canceled",
"reverse_order_id":"501977696648153", #逆向主单id
"reverse_order_line_id":"502491640048153", #逆向子单id
"status_update_time":1603703663,
"trade_order_id":"252883361348153", #关联正向单id
"trade_order_line_id":"252883361948153" #关联逆向单id
},
"timestamp":1603715010436,
"site":"lazada_vn"
}
建议开发者对收到的消息进行签名校验,以确保消息的合法性。
使用 AppKey 拼接请求 Body 作为消息体, 以 AppSecret 作为密钥,签名加密算法为 HMAC-SHA256。
签名产生 Sample Code
/*
其中Base = {your_app_key} + "{message_body_you_receieved}"
Secret = {your_app_Secret};
*/
Authorization = HEX_ENCODE(HMAC-SHA256(Base, Secret));
請使用下述代码生成签名与 Header 中的 「Authorization」 进行比较。
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
/**
* 签名工具类
* @author jianyan
* @date 2020/12/01
*/
public class SignatureUtil {
private static final String HMAC_SHA256 = "HmacSHA256";
private static final Logger LOGGER = LoggerFactory.getLogger(SignatureUtil.class);
/**
* 产生基于Hmac-SHA256,并经过16进制编码的签名。
* @param base {AppKey} + {messageBody}
* @param secret {AppSecret}
* E.g.: AppKey = 123456, AppSecret = 3412gyo124goi3124
* 收到的消息体Json :{"seller_id":"1234567", "message_type":0, "data":{...}..}
*
* base = "123456" + "{\"seller_id\":\"1234567\", \"message_type\":0, "data":{...}..}"
* secret = 3412gyo124goi3124
* signature = getSignature(base, secret);
* signature = f3d2ca947f16a50b577c036adecd18bec126ea19cadedd59816e255d3b6104ab
* @return 签名
*/
public static String getSignature(String base, String secret) {
try {
Mac sha256Hmac = Mac.getInstance(HMAC_SHA256);
SecretKeySpec secretKey = new SecretKeySpec(secret.getBytes(), HMAC_SHA256);
sha256Hmac.init(secretKey);
return byteArraytoHexString(sha256Hmac.doFinal(base.getBytes()));
} catch (Exception e) {
LOGGER.error("Failed to generate signature");
}
return null;
}
/**
* 十六进制Encode
* @param bytes
* @return
*/
private static String byteArraytoHexString(byte[] bytes) {
if(bytes == null) {
return null;
}
StringBuilder sb = new StringBuilder();
String stmp;
for (byte aByte : bytes) {
stmp = Integer.toHexString(aByte & 0XFF);
if (stmp.length() == 1) {
sb.append('0');
}
sb.append(stmp);
}
return sb.toString().toLowerCase();
}
}
数据將使用明文传输。