5.示例

本文档展示一个示例项目时每一个接口的签名过程中的参数值,以作为调用者调试阶段参考示例


注意:以下示例所有参数均为测试环境数据,请勿用于生产


基础参数如下:

/// <summary>
/// 接入方APPID
/// </summary>
private readonly long appid = 25;

/// <summary>
/// aes加密密钥
/// </summary>
private readonly string aesKey = "udMOT6SnVzfmlUF1UxZNpRpQX3qS2mSG";

/// <summary>
/// 接口地址
/// </summary>
private readonly string apiUrl = "http://auditopenapitest.escase.cn/api/order/";


  1. 下单接口:

示例代码:

/// <summary>
/// 下单请求
/// </summary>
/// <returns></returns>

[HttpGet("SubmitOrder")]
public async Task<OrderResonse> SubmitOrder()
{
_logger.LogInformation("下单");
string requestUrl = apiUrl + "submit";
OrderResonse orderResonse;
string orderNo = DateTime.Now.ToString("yyyyMMddHHmmssfff"); //生成单号
OrderInputDto orderInputDto = new OrderInputDto
{
OrderNo = orderNo,
NotifyUrl = "http://localhost:33692/order/PushStatus", //订单状态通知地址
ImgUrls = new List<Img> {
new Img { Name = "七夕 情人节 埃菲尔铁塔模型 咖啡 爱心 红色玫瑰 花瓣 图片",Url = "http://pic.netbian.com/uploads/allimg/160827/225105-1472309465a527.jpg" },
new Img { Name = "2017中国·遵义国际辣椒博览会-新华网", Url = "https://tse4-mm.cn.bing.net/th/id/OIP.YHC86ivjAKCTdBKz94nrnQHaDo?w=348&h=171&c=7&o=5&pid=1.7" }
}
};

OrderRequest orderRequest = new OrderRequest
{
Appid = appid,
Message = AesHelper.Encrypt(orderInputDto.ToJsonString(), aesKey).ToUrlEncode()
};
orderRequest.Sign = SignRequest(orderRequest, aesKey);
var result = await PostAsync(requestUrl, orderRequest);
orderResonse = result.FromJsonString<OrderResonse>();
var mysign = SignRequest(orderResonse, aesKey);
var checkSign = mysign.Equals(orderResonse.Sign);
if (!checkSign)
{
orderResonse.Message = "签名错误";
}
return orderResonse;
}

其中订单号为:20200811164855548,时间戳为:1597135736

message经过aes加密,转base64后再ToUrlEncode的值为

UU1OBAPTMWhQTdwMS%2fKTRzM9t8siyVKYkJfXYhCDgRbFH%2bS7TwgXMN5NiLHB1UPgHB%2b2y8kICqZwYI%2b%2fkdaA4S5kar1XH8xIR6E%2bkJg%2bz6Ru7fK4K3Zw18L8%2fO6Og9SYRb8YjfzDNKs6mKtKvii%2bgy%2fWZmG6JFiTpfmINrNLmTLFrb8cd%2brYRjK8%2fgCunSEspI%2fMJVt%2bAoIf9a80ATJtZsURwbtWzPL0kFXkCrTJ4Dk04fpCaKP1TVilAo1okTK5XaDuN4DohczPRTdQbeDsajitv%2bTEAbUGSnd%2fviasDmay4aX5rCDIheVVBpfMEIOkeBB09mqHAN1egd%2bOSXgiQz27ZI1tzeaDudJZv5EGXmqAXnIdRE7yK13kNdRmbGD7sIIjGK2XFaTVnGSWDPUbyTzjlQ5Oov1WCg4gufTh1K%2bAo2BTAPnCFphVPz28FDRdjYJTcFFdi2Bend9n5kq2qHw6PxJ81Ee%2b8FN4rAXCcQc3zk25vl%2fmcy0ArVTLLL4J9GNcRpYYkvzseSyiucXUqFi%2f6L0SkRjriX4GCjzlbL9cIKIOhEtzVDGNX9wv9BLT

 将对象拼接成&=的字符串后结果

Appid=25&Message=UU1OBAPTMWhQTdwMS%2fKTRzM9t8siyVKYkJfXYhCDgRbFH%2bS7TwgXMN5NiLHB1UPgHB%2b2y8kICqZwYI%2b%2fkdaA4S5kar1XH8xIR6E%2bkJg%2bz6Ru7fK4K3Zw18L8%2fO6Og9SYRb8YjfzDNKs6mKtKvii%2bgy%2fWZmG6JFiTpfmINrNLmTLFrb8cd%2brYRjK8%2fgCunSEspI%2fMJVt%2bAoIf9a80ATJtZsURwbtWzPL0kFXkCrTJ4Dk04fpCaKP1TVilAo1okTK5XaDuN4DohczPRTdQbeDsajitv%2bTEAbUGSnd%2fviasDmay4aX5rCDIheVVBpfMEIOkeBB09mqHAN1egd%2bOSXgiQz27ZI1tzeaDudJZv5EGXmqAXnIdRE7yK13kNdRmbGD7sIIjGK2XFaTVnGSWDPUbyTzjlQ5Oov1WCg4gufTh1K%2bAo2BTAPnCFphVPz28FDRdjYJTcFFdi2Bend9n5kq2qHw6PxJ81Ee%2b8FN4rAXCcQc3zk25vl%2fmcy0ArVTLLL4J9GNcRpYYkvzseSyiucXUqFi%2f6L0SkRjriX4GCjzlbL9cIKIOhEtzVDGNX9wv9BLT&Timestamp=1597135736

签名结果

557E083396CFE8773DA2F9BC623C90D7

接口返回值

{"code":0,"message":"下单成功","timestamp":1597135876,"sign":"C52A5E9BB363438D96B286B2A8371C7B","result":null}



  1. 查询接口:
        /// <summary>
/// 订单查询
/// </summary>
/// <param name="orderNo">订单编号</param>
/// <returns></returns>
[HttpGet("QueryOrder")]
public async Task<OrderResonse> QueryOrder(string orderNo)
{
string requestUrl = apiUrl + "query";
_logger.LogInformation("订单查询");
QueryOrderInputDto queryOrder = new QueryOrderInputDto
{
OrderNo = orderNo
};
OrderRequest orderRequest = new OrderRequest
{
Appid = appid,
Message = AesHelper.Encrypt(queryOrder.ToJsonString(), aesKey).ToUrlEncode()
};
orderRequest.Sign = SignRequest(orderRequest, aesKey); //请求参数进行签名计算

//进行数据查询
var result = await PostAsync(requestUrl, orderRequest);
OrderResonse orderResonse = result.FromJsonString<OrderResonse>();
var mysign = SignRequest(orderResonse, aesKey); // 根据响应结果计算一个我的签名
var checkSign = mysign.Equals(orderResonse.Sign); //进行签名校验

if (checkSign)
{
if (orderResonse.Code==0)
{
var decryptJson = AesHelper.Decrypt(orderResonse.Result, aesKey); // 对响应结果进行消息解密,拿到审核结果内容
if (!string.IsNullOrWhiteSpace(decryptJson))
{
var auditResultResponse = decryptJson.FromJsonString<AuditResultResponse>(); // 反序列化成审核对象值
if (null != auditResultResponse)
{
orderResonse.Message = decryptJson;
}
else
{
orderResonse.Message = "审核结果为空";
}
}
else
{
orderResonse.Message = "参数错误,消息体Message解密失败";
}
}
}
else
{
orderResonse.Message = "签名错误";
}
return orderResonse;
}


订单号为:20200811164855548,时间戳为:1597135922

message经过aes加密,转base64后再ToUrlEncode的值为 

UU1OBAPTMWhQTdwMS%2fKTR2dR29KKpyRfaO7d3E3fEqk%3d

 将对象拼接成&=的字符串后结果

Appid=25&Message=UU1OBAPTMWhQTdwMS%2fKTR2dR29KKpyRfaO7d3E3fEqk%3d&Timestamp=1597135922

 签名结果

D2FA28AE74FEB3B0C795D603C095FD23


没有审核结果时返回值

{"code":1,"message":"无审核信息","timestamp":1597136018,"sign":"01403C4798EB8BA706BACD6C4151A08E","result":null}

有审核结果返回值

{"code":0,"message":"success","timestamp":1597140901,"sign":"B510420DE98144F617E881212A9F8109","result":"SNno7KEbw9EuyoHTXVVLLje4cWPvFH1naaV6j7GZnk0vq98cT6jyvnFOijxy+QmaepLPiuPhPk1S2A4KnaGFOavBx1atDovkqtjjGx3/pHvE8f/3+GyhUU5C9WW8uGeYBtF1rLdNxfGXBRr37vTxp8rNg6X21SVUHBou2jgNNuH2XEoPDd9gfLsz9SXD/KRQKO8QlFsr5Udj4FXUswX0KAeI8XrfOmGQyHsjj6Kfh9YDUtFsJNxmDmsk4racbrnQm5SeqRKTDQMNz2KL1SwXMyhekWAjn4vWQ1NQjxGO2zVVDttqumkNnztfhhWeMr9vJVQ7cgst8NAVeY3a2Az7yKviiiJH4EppJXXkHYXrFiQbDxgN4zoru4Dp2eMrqHu6she2/skOp6NkH0DuzPtc8XKFh6MWcJ3hOm8QWBkJUlI5BtLHkMQvS7mbIdvLHB5gXqvoDQR+t09WRCdP97vuXISu9cnnlaznlsThn9/iQ1uJCzAAhjGxNDvtec6Z7dgBomoddcAhtU/B4wCjGa6tR1eFuueuyVSWLCCiioVzGRHby09iBXtJvSXI7u/ixjelDUzf/fCI7kMHsDozt1dSp5vU1ORF2YpXbGWVLpu2zzVNVbux9GvkjUbF2SrJeOcghfxn9TamjIywGcSKnaCZXKtrrJEi/3AptXovbMWpaGruKadIC4etC36W3QPjgdaw"}

对消息体解密后值

{"OrderCode":"20200811164855548","OrderType":0,"AuditStatus":1,"SuccessReason":"","FailReason":"","IsRePush":0,"RePushTick":"","SuccessReasonList":[],"FailReasonList":[],"ImgGroupAuditData":[],"OrderAuditJson":{"StoreCode":"34564","Store":"小兔乖乖第一湾店","Number":"1111","Date":"20201111","TotalMoney":"11","ProductTotalMoney":"33330.00","ProductList":[{"Value":"家安空调消毒剂柜机专用360ml(店内码235719)A","SubInfos":{"price":"15.00","Quantity":"2222","Total":"33330.00"}}]},"OrderRemark":null}



  1. 接受订单状态变更的通知

订单号:20200811184921168,时间戳:1597143753


message没有加密前数据

{"OrderNo":"20200811184921168"}

message加密后数据

UU1OBAPTMWhQTdwMS/KTR49bfcZW5uQ7ZaqLUNnZi0c=

将对象拼接成&=的字符串

Appid=25&Message=UU1OBAPTMWhQTdwMS/KTR49bfcZW5uQ7ZaqLUNnZi0c=&Timestamp=1597143753

签名

51A0698E6A0C3462F93CBCE99B6BB9EA

post参数

{"Appid":25,"Timestamp":1597143753,"Message":"UU1OBAPTMWhQTdwMS/KTR49bfcZW5uQ7ZaqLUNnZi0c=","Sign":"51A0698E6A0C3462F93CBCE99B6BB9EA"}


接受推送状态接口定义示例
#region 接受订单状态变更的通知
/// <summary>
/// 接受订单状态变更的通知
/// </summary>
/// <param name="orderRequest"></param>
/// <returns></returns>
[HttpPost("PushStatus")]
public OrderResonse PushStatus(OrderRequest orderRequest)
{
OrderResonse orderResonse = new OrderResonse { };
var mysign = SignRequest(orderRequest, aesKey); // 根据响应结果计算一个我的签名
var checkSign = mysign.Equals(orderRequest.Sign); //校验签名

if (checkSign)
{
var orderInfo = AesHelper.Decrypt(orderRequest.Message, aesKey).FromJsonString<QueryOrderInputDto>();

if (null != orderInfo)
{
string orderNo = orderInfo.OrderNo; //订单编号
if (!string.IsNullOrWhiteSpace(orderNo))
{
orderResonse.Message = "正常处理完成";

}
else
{
orderResonse.Message = "订单编号为空";
}
}
}
else
{
orderResonse.Code = 1;
orderResonse.Message = "签名错误";
}
orderResonse.Sign = SignRequest(orderResonse, aesKey);
return orderResonse;
}
#endregion