发货回调
<p>[TOC]</p>
<h1>发货回调标准接口</h1>
<p>1、当订单在云帆发货完成后,状态发生变更时,会由云帆回调对接方的回调地址进行状态变更的通知。
请按照云帆提供的文件开发标准回调接口。
<strong>2、如果贵司的APP或平台已经有发货接口了,可以由云帆调用贵司的发货接口发货,请联系管理员开发配置自定义发货回调接口。</strong></p>
<h2>回调地址</h2>
<p>用户在云帆系统中配置的地址,配置路径:销售管理→店铺管理→接口配置</p>
<p>测试账号
【app_id】: i1hY3vOmCBWAB9ddDSDTN1RL
【appSecret】: 37f2af0405eaea09c363115273eb02df05cdba7f
正式环境的请求地址及账号信息,请在云帆ERP系统中进行申请。</p>
<h3>Headers必须参数</h3>
<table>
<thead>
<tr>
<th style="text-align: left;">字段</th>
<th style="text-align: left;">类型</th>
<th style="text-align: left;">空</th>
<th>默认</th>
<th>注释</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">sign</td>
<td style="text-align: left;">String</td>
<td style="text-align: left;">否</td>
<td></td>
<td>签名,MD5(app_id + PostBody + appSecret)</td>
</tr>
</tbody>
</table>
<h2>PostBody请求参数</h2>
<table>
<thead>
<tr>
<th style="text-align: center;">参数名称</th>
<th style="text-align: center;">参数类型</th>
<th style="text-align: center;">必须</th>
<th style="text-align: center;">参数说明</th>
<th style="text-align: center;">示例值</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: center;">app_id</td>
<td style="text-align: center;">String</td>
<td style="text-align: center;">是</td>
<td style="text-align: center;">系统中申请的appId</td>
<td style="text-align: center;">i1hY3vOmCBWAB9ddDSDTN1RL</td>
</tr>
<tr>
<td style="text-align: center;">msg_id</td>
<td style="text-align: center;">String</td>
<td style="text-align: center;">是</td>
<td style="text-align: center;">请求消息Id</td>
<td style="text-align: center;">164776226937503744</td>
</tr>
<tr>
<td style="text-align: center;">tid</td>
<td style="text-align: center;">String</td>
<td style="text-align: center;">是</td>
<td style="text-align: center;">发货的订单号</td>
<td style="text-align: center;">E123456</td>
</tr>
<tr>
<td style="text-align: center;">data</td>
<td style="text-align: center;">String</td>
<td style="text-align: center;">是</td>
<td style="text-align: center;">发货详情结构体的Json数据</td>
<td style="text-align: center;">详见下面【发货详情结构体】的说明</td>
</tr>
<tr>
<td style="text-align: center;">timestamp</td>
<td style="text-align: center;">String</td>
<td style="text-align: center;">是</td>
<td style="text-align: center;">毫秒级时间戳</td>
<td style="text-align: center;">1620901344943</td>
</tr>
</tbody>
</table>
<h2>发货详情结构体</h2>
<table>
<thead>
<tr>
<th style="text-align: center;">参数名称</th>
<th style="text-align: center;">参数类型</th>
<th style="text-align: center;">必须</th>
<th style="text-align: center;">参数说明</th>
<th style="text-align: center;">示例值</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: center;">company_id</td>
<td style="text-align: center;">String</td>
<td style="text-align: center;">是</td>
<td style="text-align: center;">云帆系统的公司主体ID</td>
<td style="text-align: center;">1</td>
</tr>
<tr>
<td style="text-align: center;">shop_id</td>
<td style="text-align: center;">String</td>
<td style="text-align: center;">是</td>
<td style="text-align: center;">云帆系统的店铺ID</td>
<td style="text-align: center;">1</td>
</tr>
<tr>
<td style="text-align: center;">branch_id</td>
<td style="text-align: center;">String</td>
<td style="text-align: center;">是</td>
<td style="text-align: center;">网点ID</td>
<td style="text-align: center;">0</td>
</tr>
<tr>
<td style="text-align: center;">tid</td>
<td style="text-align: center;">String</td>
<td style="text-align: center;">是</td>
<td style="text-align: center;">主订单号</td>
<td style="text-align: center;">E123456</td>
</tr>
<tr>
<td style="text-align: center;">oid</td>
<td style="text-align: center;">String</td>
<td style="text-align: center;">是</td>
<td style="text-align: center;">子订单号</td>
<td style="text-align: center;">123456</td>
</tr>
<tr>
<td style="text-align: center;">express_id</td>
<td style="text-align: center;">Int</td>
<td style="text-align: center;">是</td>
<td style="text-align: center;">快递公司ID</td>
<td style="text-align: center;">4</td>
</tr>
<tr>
<td style="text-align: center;">express_name</td>
<td style="text-align: center;">String</td>
<td style="text-align: center;">是</td>
<td style="text-align: center;">快递公司名称,使用utf-8进行了UrlEncode</td>
<td style="text-align: center;">%e9%9f%b5%e8%be%be</td>
</tr>
<tr>
<td style="text-align: center;">waybill_no</td>
<td style="text-align: center;">String</td>
<td style="text-align: center;">是</td>
<td style="text-align: center;">运单号(快递单号)</td>
<td style="text-align: center;">yd12345678</td>
</tr>
<tr>
<td style="text-align: center;">express_date</td>
<td style="text-align: center;">String</td>
<td style="text-align: center;">是</td>
<td style="text-align: center;">发货时间</td>
<td style="text-align: center;">05/13/2021 10:22:24</td>
</tr>
<tr>
<td style="text-align: center;">operate_user</td>
<td style="text-align: center;">String</td>
<td style="text-align: center;">是</td>
<td style="text-align: center;">操作人</td>
<td style="text-align: center;">1660</td>
</tr>
</tbody>
</table>
<h3>Post的Json数据示例</h3>
<p>body-json字符串数据</p>
<pre><code class="language-string">{"app_id":"i1hY3vOmCBWAB9ddDSDTN1RL","msg_id":"164776226937503744","tid":"E123456","data":{"company_id":1,"shop_id":1,"branch_id":0,"tid":"E123456","oid":"123456","express_name":"%e9%9f%b5%e8%be%be","express_id":"4","waybill_no":"yd12345678","express_date":"05/13/2021 10:22:24","operate_user":"1660"},"timestamp":"1620901344943"}</code></pre>
<p>请求头签名sign:</p>
<pre><code class="language-string">7f7d73b4db668084f8f9c1223eacff2c</code></pre>
<p><strong>可直接使用该数据进行验证回调,均使用文头提供的应用信息</strong></p>
<h3>云帆回调请求的说明</h3>
<p>1、请求方法:POST,sign参数放在Header上,Post的Json数据放在Body传输
2、编码格式为UTF8
3、Content-Type:application/json
4、签名说明:<strong>sign=MD5(app_id + PostBody + appSecret)转小写</strong>
注意:
1、<strong>由于JSON没有明确的跨语言规范,因此对JSON解析之后再进行重新编码,并不一定能还原原始JSON字符串。所以请严格按照原始报文进行签名和验签!</strong>
2、注意验签的时候,检查原始报文的<strong>快递公司名称</strong>是进行了urlencode的,请使用<strong>原始报文</strong>验签
3、验签请使用云帆传递过去的 <strong>Body字符串</strong> 进行加密验签,<strong>避免</strong>使用对象接收数据转字符串后和云帆传递数据字段顺序对不上,加密验签通不过的情况。</p>
<h2>响应参数</h2>
<table>
<thead>
<tr>
<th style="text-align: center;">参数名称</th>
<th style="text-align: center;">参数类型</th>
<th style="text-align: center;">必须</th>
<th style="text-align: center;">参数说明</th>
<th style="text-align: center;">示例值</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: center;">status</td>
<td style="text-align: center;">String</td>
<td style="text-align: center;">是</td>
<td style="text-align: center;">接收消息成功后请返回200,非200云帆会重试两次,第一次五分钟后,第二次十分钟后</td>
<td style="text-align: center;">200</td>
</tr>
<tr>
<td style="text-align: center;">success</td>
<td style="text-align: center;">Boolean</td>
<td style="text-align: center;">是</td>
<td style="text-align: center;">接收消息是否成功,等于false云帆会重试两次</td>
<td style="text-align: center;">true/false</td>
</tr>
<tr>
<td style="text-align: center;">message</td>
<td style="text-align: center;">String</td>
<td style="text-align: center;">是</td>
<td style="text-align: center;">响应消息</td>
<td style="text-align: center;">请求成功</td>
</tr>
</tbody>
</table>
<h3>回调成功的响应示例</h3>
<p><code>{ "status":200, "success":true, "message":"success" }</code></p>
<h3>回调失败的响应示例</h3>
<p><code>{ "status":非200的错误码, "success":false, "message":"错误详情" }</code></p>