回调(接收跟踪记录)

参数 类型 描述
companyname String 快递公司名字(订阅时data中的第一个参数)
outid String 快递单号(订阅时data中的第二个参数)
status Integer 快递状态
tracklist String

快递跟踪信息的json格式数据,例如

{
    "Status": "未签收",
    "TrackList": [
        {
            "ShortStatus": "收件",
            "TrackDate": "2013-12-22 15:20:23",
            "TrackStatus": "浙江省杭州市市场部公司已收件"
        },
        {
            "ShortStatus": "在途",
            "TrackDate": "2013-12-22 21:09:53",
            "TrackStatus": "杭州转运中心公司已收入"
        },
        {
            "ShortStatus": "在途",
            "TrackDate": "2013-12-22 21:23:54",
            "TrackStatus": "杭州转运中心公司已打包"
        }
    ],
    "UpdateDate": "/Date(1387765229084+0800)/"
}
sign String

签名,规则如下

MD5(secret+"companyname="+companyname+"&outid="+outid+"&status="+status+"&tracklist="+tracklist+secret)后转换为大写,其中secret是快刀云提供的接口授权码。
state String

自定义数据(订阅时data中的第三个参数),如果订阅时没有这个数据,回调时也不会有state这个参数;state参数不参与签名验证的生成。

完整的请求URL为(为了查看方便,我们人为地将参数之间用回车分隔开):

回调地址:http://(您提供的回调网址)
回调参数:(请求方式:POST,Content-Type:application/x-www-form-urlencoded
companyname=申通
&outid=668390930489
&status=0
&tracklist={"Status":"未签收","TrackList":[{"ShortStatus":"收件","TrackDate":"2013-12-22 15:20:23","TrackStatus":"浙江省杭州市市场部公司已收件"},{"ShortStatus":"在途","TrackDate":"2013-12-22 21:09:53","TrackStatus":"杭州转运中心公司已收入"},{"ShortStatus":"在途","TrackDate":"2013-12-22 21:23:54","TrackStatus":"杭州转运中心公司已打包"}],"UpdateDate":"/Date(1387765229084+0800)/"}
&sign=C93FC101B217ECF4EEED6D85414CB666

实际URL为:

回调地址:http://(您提供的回调网址)
回调参数:(请求方式:POST,Content-Type:application/x-www-form-urlencoded
companyname=申通&outid=668390930489&status=0&tracklist={"Status":"未签收","TrackList":[{"ShortStatus":"收件","TrackDate":"2013-12-22 15:20:23","TrackStatus":"浙江省杭州市市场部公司已收件"},{"ShortStatus":"在途","TrackDate":"2013-12-22 21:09:53","TrackStatus":"杭州转运中心公司已收入"},{"ShortStatus":"在途","TrackDate":"2013-12-22 21:23:54","TrackStatus":"杭州转运中心公司已打包"}],"UpdateDate":"/Date(1387765229084+0800)/"}&sign=C93FC101B217ECF4EEED6D85414CB666

成功请返回:  0  

失败请返回:  失败原因  ,方便处理。

回调PHP示例代码:下载

$result="自定义响应消息";
$expressName=$_REQUEST["companyname"];
$expressId=$_REQUEST["outid"];
$status=$_REQUEST["status"];
$detail=$_REQUEST["tracklist"];
$sign=$_REQUEST["sign"];
if(!empty($expressName)&&!empty($expressId))
{
    $detailJson=json_decode($detail,true); //json物流详情转换成array

    $param=array(
    "expressId"=>$expressId,
    "status"=>$status,
    "data"=>$detailJson["TrackList"],
    "expressName"=>$expressName);  //转化成自己想要的数据格式

    $newSign="你的授权码"."companyname=".$expressName."&outid=".$expressId."&status=".$status."&tracklist=".$detail."你的授权码";
    //print_r($newSign);
    if($sign == strtoupper(md5($newSign)))
    {
        $status=true;//$businessApi->callbackAction($param);//这里是你的系统里面处理数据的方法,比如保存到数据库
        if($status)
        {
            $result="0";//处理成请返回 0
        }
        else
        {
            $result="业务处理失败";
        }
    }
    else
    {
        $result="验证错误收到:".$sign." 组合:".strtoupper(md5($newSign));
    }
}
echo $result;
exit;

回调C#示例代码:下载

protected void Page_Load(object sender, EventArgs e)
{
    try
    {
        string companyname = Request.Form["companyname"];
        string outid = Request.Form["outid"];
        string status = Request.Form["status"];
        string tracklist = Request.Form["tracklist"];
        string sign = Request.Form["sign"];

        string param = "companyname={0}&outid={1}&status={2}&tracklist={3}";
        param = string.Format(param, companyname, outid, status, tracklist);
        string newsign = CreateSign("你的授权码" + param + "你的授权码");
        if(sign == newsign)
        {
            //To Do -- 这里是你的系统里面处理数据的方法,比如保存到数据库,成功后返回 0
            Response.Write("0");
        }
        else
        {
            Response.Write("-8;验证失败");
        }
        }
        catch (Exception ex)
        {
            Response.Write("-9;系统错误:" + ex.Message);
        }            
}
public static string CreateSign(string Sign)
{
    MD5 md5 = MD5.Create();
    byte[] bytes = md5.ComputeHash(Encoding.UTF8.GetBytes(Sign));

    StringBuilder result = new StringBuilder();
    for (int i = 0; i < bytes.Length; i++)
    {
        string hex = bytes[i].ToString("X");
        if (hex.Length == 1)
        {
            result.Append("0");
        }
        result.Append(hex);
    }
    return result.ToString();
}