签名说明
通用cookie要求:
字段 | 名称 | 字段类型 | 是否必填 | 字段说明 |
---|---|---|---|---|
_platform_num | 租户号 | Long | 是 | 租户号 |
请求签名
构造验签名串
1.
HTTP请求方法\n
URL\n
请求随机串\n
请求时间戳\n
请求报文主体\n
2.
3.
设置HTTP头
1.
Authorization: 认证类型 签名信息
1.1 认证类型,目前为META-SHA256-RSA2048
1.2 签名信息
注:以上4项签名信息,顺序要求不能变。
2.
Authorization: META-SHA256-RSA2048 nonce_str="373BEC0C930BF1AFGH40B4A08C8FB378",timestamp="1554208460",signature="uOVRnA4qG/MNnYzdQxJanN+zU+lTgIcnU9BxGw5dKjK+VdEUz2FeIoC+D5sB/LN+nGzX3hfZg6r5wT1pl2ZobmIc6p0ldN7J6yDgUzbX8Uk3sD4a4eZVPTBvqNDoUqcYMlZ9uuDdCvNv4TM3c1WzsXUrExwVkI1XO5jCNbgDJ25nkT/c1gIFvqoogl7MdSFGc4W4xZsqCItnqbypR3RuGIlR9h9vlRsy7zJR9PBI83X8alLDIfR1ukt1P7tMnmogZ0cuDY8cZsd8ZlCgLadmvej58SLsIkVxFJ8XyUgx9FmutKSYTmYtWBZ0+tNvfGmbXU7cob8H/4nLBiCwIUFluw=="
java 生成签工具类
Signs工具类
Signs demo, 基于okhttp
package cn.demo;
import okhttp3.*;
import java.io.IOException;
import java.time.Duration;
import java.util.Objects;
/**
* @author nick.sun
* @date 2023/10/19
*/
public class Demo {
public static void main(String[] args) throws IOException {
String url = "http://127.0.0.1:8080/retail-data-exchange/notify/order/delivery";
MultipartBody.Builder builder = new MultipartBody.Builder();
String jsonStr = "{\"orderNo\":\"string1\",\"uid\":\"string1\",\"expressNo\":\"string1\",\"deliveryCompanyCode\":\"string1\",\"deliveryCompanyName\":\"string1\"}";
RequestBody body = RequestBody.create(jsonStr, MediaType.get("application/json; charset=utf-8"));
Request request = new Request.Builder()
.header("Authorization", Signs.getAuthorization("MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCqpYIlJVnhHmeQ9Po/DJCVzVdrDXQAyt9QPgkE59StCTM9Ir61N/tftsRGQax5daAUdeWVP0iHbWdpFQkoXLHExJNAv0Y14b4JWlmfaYwpW2KsLJLtqGfvUnKMtvycprq3EE9rPAHEtlkvS30UV8pN6IWOJcs9wEpGTFhVkmvAxUgQldm59vCkaYC3HDo5UZRiFm4/P7JPwyHY4RAwfTDSF7tulUttROn5Y4oSzxyGTGiGyyy/4xCyrlX3CE81CkvIH7DfKMiGYZYX/wuyMl9hsNBCr+lQKcWud4zv83VrfCAVBYKsRqK/SHWEtNHCOaNJjbFl2W5HFF79duH+3VW5AgMBAAECggEBAJtlXL625MI8DdPTQo9nwcKo25KBDcIq/HD2DQCKnQF1/1MM8N3VvPPMW7Ae3hE9LCl1szvWBRZOan0mytAWmUu2NuIfTLCEganCvRqN4zVGIvTnImWJlhw52FaLzD5bFmzeTXQ5kOKxq0WGWMDNsUyBEh4ADLSPBxQ9MbO7QqSnhbqzkMlbccNKHpfMxWwyKmB4wXXOlXOla4+o0RIBTe/cYQWPx3aXtZGT8y/tFoaHCrfdYxAMGsC7Vo9vO5V1SKTGcfF0DweCfprFY3v1Ez6mPWBd5X+6/sOgQG1YoXaHqfzMuv00mXnnTiaS4/a8Fmv0rHhsJ+Adi2HcwYrTwAECgYEA19sNfSEeQLyLnwOTJG4iUan83XTN58xWxoAZ6r91+8XNDJgirgtoMgXZGeZQlwkNk88x6gX0s7oKPXgRRV5xnN0Um2BPXzPgKWQf6Zxa+RkCQkjAwUmID/rh7aWrG/Jz1BjnJABsDHyEBaSXO6sD0RPbcE93H48Ejbz5/FjcdUECgYEAymIJEUBlIW3+IYWAuU6VbTEEax4bikN6xeleRbiaFNqx1YnIE0QUQkZog1/UjyakMjMaT9idDkNbG5tapVcBJoB16pDxSySVcGunIucz/Q3SrCV3tdTNXduIbWeMyAsuUS6I7EleII/oOo6TUJfT5PsJUCFlmcAjH1vEzz3dankCgYB0dBSh5mUo7c+xuT8AD37qafgnDeYsYTyLmP7ie+rOK1fFrKpBFZxgKHGJHI1r/pFZphW6uP3cnMj7grRmpV5MD6YXcW1A4n7UNdVVtmoKK6jhU9jSLrZ+UI7lJFTdHf/JdKn27VddoSuk07hXk5raiIkB3Y1Z9FGzmjmQH+zIQQKBgDYwgdUItQt6dC1tncYAcKpIEbLM4ProjpsnnYJ1p2wmEq/msJfYBsSoLZvfsP6TjiuS21y912/WQTLnKiJTZY91nh0sqi9AoHL1oE8MMTN03BAUCDW7wTF8cs84hs2ZkNFT8H20N2vonHnxayiNPsN1JE08ZAQDGmRvIgeLvRmhAoGAcP13KQZLxT34WJP9I080Glr7JwzDW49iwaBe5sdwoX4S3HnfZo2t1rpNErC9AynYfLa4SLzyo95TZc5qLN2Kgb64sXWPOXmSSoHguGLLvGApzyO7e+oOztssWeQmGtsJHEKFOV2x6iqE2O90RlYjnCjp4FdBOZGsmW/f8aCynRM=", "POST", "/retail-data-exchange/notify/order/delivery", jsonStr))
.header("cookie", "_platform_num=153658")
.url(url)
.post(body)
.build();
OkHttpClient client = new OkHttpClient.Builder()
.readTimeout(Duration.ofMinutes(1L))
.connectTimeout(Duration.ofMinutes(1L))
.writeTimeout(Duration.ofMinutes(1L))
.callTimeout(Duration.ofMinutes(1L))
.build();
try (Response response = client.newCall(request).execute()) {
if (response.isSuccessful()) {
ResponseBody responseBody = response.body();
if (Objects.nonNull(responseBody)) {
System.out.println(new String(responseBody.bytes()));
}
}
}
}
}
错误码
异常码 | 异常信息 |
---|---|
401 | 非法访问,无权限! |
402 | 非法访问,缺少sign字段! |
403 | Http头Authorization中缺少必填信息! |
403 | Http头Authorization中的timestamp与发起请求的时间不得超过5分钟! |