您的位置:首页 > 其它

电子面单接口申请对接说明

2016-12-08 16:27 585 查看
电商后台物流系统,仓管在发货时同步订单的发/收件人信息、货物信息,通过接口直接发送到快递公司并直接打印电子面单。

1.接口地址: API测试地址:http://testapi.kdniao.cc:8081/api/EOrderService

API正式地址:http://api.kdniao.cc/api/EOrderService

2.接口支持的消息接收方式:HTTP POST

3.请求方法的编码格式(utf-8):"application/x-www-form-urlencoded;charset=utf-8"

4.订单编号(OrderCode)不可重复提交,重复提交系统会返回具体错误代码。

5.请求、返回数据类型:只支持JSON格式

6.接口提供:快递鸟

系统级参数定义

参数名称

类型

说明

必须要求

RequestData

String

请求内容需进行URL(utf-8)编码。请求内容JSON格式,须和DataType一致。

必填

EBusinessID

String

商户ID,请在我的服务页面查看。

必填

RequestType

String

请求指令类型:1007

必填

DataSign

String

数据内容签名:把(请求内容(未编码)+AppKey)进行MD5加密,然后Base64编码,最后进行URL(utf-8)编码。详细过程请查看Demo。

必填

DataType

String

请求、返回数据类型:只支持JSON格式

必填

(PHP对接源码)

<?php

//电商ID
defined('EBusinessID')or define('EBusinessID', '请申请http://www.kdniao.com/ServiceApply.aspx');
//电商加密私钥,注意保管,不要泄漏
defined('AppKey')or define('AppKey', '请申请http://www.kdniao.com/ServiceApply.aspx');
//请求url,接口正式地址:http://api.kdniao.cc/api/Eorderservice
defined('ReqURL')or define('ReqURL', 'http://testapi.kdniao.cc:8081/api/Eorderservice');

//调用获取物流轨迹
//-------------------------------------------------------------

//构造电子面单提交信息
$eorder= [];
$eorder["ShipperCode"]= "SF";
$eorder["OrderCode"]= "PM201604062341";
$eorder["PayType"]= 1;
$eorder["ExpType"]= 1;

$sender= [];
$sender["Name"]= "李先生";
$sender["Mobile"]= "18888888888";
$sender["ProvinceName"]= "李先生";
$sender["CityName"]= "深圳市";
$sender["ExpAreaName"]= "福田区";
$sender["Address"]= "赛格广场5401AB";

$receiver= [];
$receiver["Name"]= "李先生";
$receiver["Mobile"]= "18888888888";
$receiver["ProvinceName"]= "李先生";
$receiver["CityName"]= "深圳市";
$receiver["ExpAreaName"]= "福田区";
$receiver["Address"]= "赛格广场5401AB";

$commodityOne= [];
$commodityOne["GoodsName"]= "其他";
$commodity= [];
$commodity[]= $commodityOne;

$eorder["Sender"]= $sender;
$eorder["Receiver"]= $receiver;
$eorder["Commodity"]= $commodity;

//调用电子面单
$jsonParam= json_encode($eorder, JSON_UNESCAPED_UNICODE);

//$jsonParam= JSON($eorder);//兼容php5.2(含)以下

echo"电子面单接口提交内容:<br/>".$jsonParam;
$jsonResult= submitEOrder($jsonParam);
echo"<br/><br/>电子面单提交结果:<br/>".$jsonResult;

//解析电子面单返回结果
$result= json_decode($jsonResult, true);
echo"<br/><br/>返回码:".$result["ResultCode"];
if($result["ResultCode"]== "100") {
echo "<br/>是否成功:".$result["Success"];
}
else{
echo "<br/>电子面单下单失败";
}
//-------------------------------------------------------------

/**
* Json方式查询订单物流轨迹
*/
functionsubmitEOrder($requestData){
$datas = array(
'EBusinessID' => EBusinessID,
'RequestType' => '1007',
'RequestData' =>urlencode($requestData) ,
'DataType' => '2',
);
$datas['DataSign'] = encrypt($requestData,AppKey);
$result=sendPost(ReqURL, $datas);

//根据公司业务处理返回的信息......

return $result;
}

/**
*  post提交数据
* @param string $url 请求Url
* @param array $datas 提交的数据
* @return url响应返回的html
*/
functionsendPost($url, $datas) {
$temps = array();
foreach ($datas as $key => $value) {
$temps[] = sprintf('%s=%s', $key,$value);
}
$post_data = implode('&', $temps);
$url_info = parse_url($url);
if($url_info['port']=='')
{
$url_info['port']=80;
}
echo $url_info['port'];
$httpheader = "POST " .$url_info['path'] . " HTTP/1.0\r\n";
$httpheader.= "Host:" .$url_info['host'] . "\r\n";
$httpheader.="Content-Type:application/x-www-form-urlencoded\r\n";
$httpheader.= "Content-Length:" .strlen($post_data) . "\r\n";
$httpheader.="Connection:close\r\n\r\n";
$httpheader.= $post_data;
$fd = fsockopen($url_info['host'],$url_info['port']);
fwrite($fd, $httpheader);
$gets = "";
$headerFlag = true;
while (!feof($fd)) {
if (($header = @fgets($fd))&& ($header == "\r\n" || $header == "\n")) {
break;
}
}
while (!feof($fd)) {
$gets.= fread($fd, 128);
}
fclose($fd);

return $gets;
}

/**
* 电商Sign签名生成
* @param data 内容
* @param appkey Appkey
* @return DataSign签名
*/
functionencrypt($data, $appkey) {
returnurlencode(base64_encode(md5($data.$appkey)));
}
/**************************************************************
*
*  使用特定function对数组中所有元素做处理
* @param  string  &$array     要处理的字符串
* @param  string  $function  要执行的函数
* @return boolean $apply_to_keys_also    是否也应用到key上
* @access public
*
*************************************************************/
functionarrayRecursive(&$array, $function, $apply_to_keys_also = false)
{
static $recursive_counter = 0;
if (++$recursive_counter > 1000) {
die('possible deep recursionattack');
}
foreach ($array as $key => $value){
if (is_array($value)) {
arrayRecursive($array[$key],$function, $apply_to_keys_also);
} else {
$array[$key] =$function($value);
}

if ($apply_to_keys_also &&is_string($key)) {
$new_key = $function($key);
if ($new_key != $key) {
$array[$new_key] =$array[$key];
unset($array[$key]);
}
}
}
$recursive_counter--;
}

/**************************************************************
*
*  将数组转换为JSON字符串(兼容中文)
* @param  array   $array     要转换的数组
* @return string      转换得到的json字符串
* @access public
*
*************************************************************/
functionJSON($array) {
arrayRecursive($array, 'urlencode',true);
$json = json_encode($array);
return urldecode($json);
}
?>


(C#对接源码)

usingSystem;
usingSystem.Collections.Generic;
usingSystem.IO;
usingSystem.Linq;
usingSystem.Net;
usingSystem.Text;
usingSystem.Web;

namespaceKdGoldAPI
{
public class KdApiEOrderDemo
{
//电商ID
private string EBusinessID = "请申请http://www.kdniao.com/ServiceApply.aspx";
//电商加密私钥,注意保管,不要泄漏
private string AppKey = "请申请http://www.kdniao.com/ServiceApply.aspx";
//请求url, 正式环境地址:http://api.kdniao.cc/api/Eorderservice
private string ReqURL ="http://testapi.kdniao.cc:8081/api/EOrderService";

/// <summary>
/// Json方式  电子面单
/// </summary>
/// <returns></returns>
public string orderTracesSubByJson()
{
string requestData ="{'OrderCode': '012657700312'," +
"'ShipperCode':'YTO'," +
"'PayType':1," +
"'ExpType':1," +
"'Cost':1.0," +
"'OtherCost':1.0," +
"'Sender':" +
"{"+
"'Company':'LV','Name':'Taylor','Mobile':'15018442396','ProvinceName':'上海','CityName':'上海','ExpAreaName':'青浦区','Address':'明珠路73号'}," +
"'Receiver':" +
"{"+
"'Company':'GCCUI','Name':'Yann','Mobile':'15018442396','ProvinceName':'北京','CityName':'北京','ExpAreaName':'朝阳区','Address':'三里屯街道雅秀大厦'}," +
"'Commodity':" +
"[{" +
"'GoodsName':'鞋子','Goodsquantity':1,'GoodsWeight':1.0}],"+
"'AddService':" +
"[{" +
"'Name':'COD','Value':'1020'}]," +
"'Weight':1.0," +
"'Quantity':1," +
"'Volume':0.0," +
"'Remark':'小心轻放',"+
"'IsReturnPrintTemplate':1}";

Dictionary<string, string>param = new Dictionary<string, string>();
param.Add("RequestData",HttpUtility.UrlEncode(requestData, Encoding.UTF8));
param.Add("EBusinessID",EBusinessID);
param.Add("RequestType","1007");
string dataSign =encrypt(requestData, AppKey, "UTF-8");
param.Add("DataSign",HttpUtility.UrlEncode(dataSign, Encoding.UTF8));
param.Add("DataType","2");

string result = sendPost(ReqURL,param);

//根据公司业务处理返回的信息......

return result;
}

/// <summary>
/// Post方式提交数据,返回网页的源代码
/// </summary>
/// <param name="url">发送请求的 URL</param>
/// <param name="param">请求的参数集合</param>
/// <returns>远程资源的响应结果</returns>
private string sendPost(string url,Dictionary<string, string> param)
{
string result = "";
StringBuilder postData = newStringBuilder();
if (param != null &¶m.Count > 0)
{
foreach (var p in param)
{
if (postData.Length > 0)
{
postData.Append("&");
}
postData.Append(p.Key);
postData.Append("=");
postData.Append(p.Value);
}
}
byte[] byteData =Encoding.GetEncoding("UTF-8").GetBytes(postData.ToString());
try
{

HttpWebRequest request =(HttpWebRequest)WebRequest.Create(url);
request.ContentType ="application/x-www-form-urlencoded";
request.Referer = url;
request.Accept ="*/*";
request.Timeout = 30 * 1000;
request.UserAgent ="Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727;.NET CLR 3.0.04506.648; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)";
request.Method ="POST";
request.ContentLength =byteData.Length;
Stream stream =request.GetRequestStream();
stream.Write(byteData, 0,byteData.Length);
stream.Flush();
stream.Close();
HttpWebResponse response =(HttpWebResponse)request.GetResponse();
Stream backStream =response.GetResponseStream();
StreamReader sr = newStreamReader(backStream, Encoding.GetEncoding("UTF-8"));
result = sr.ReadToEnd();
sr.Close();
backStream.Close();
response.Close();
request.Abort();
}
catch (Exception ex)
{
result = ex.Message;
}
return result;
}

///<summary>
///电商Sign签名
///</summary>
///<paramname="content">内容</param>
///<paramname="keyValue">Appkey</param>
///<paramname="charset">URL编码</param>
///<returns>DataSign签名</returns>
private string encrypt(String content,String keyValue, String charset)
{
if (keyValue != null)
{
return base64(MD5(content +keyValue, charset), charset);
}
return base64(MD5(content,charset), charset);
}

///<summary>
/// 字符串MD5加密
///</summary>
///<param name="str">要加密的字符串</param>
///<paramname="charset">编码方式</param>
///<returns>密文</returns>
private string MD5(string str, stringcharset)
{
byte[] buffer =System.Text.Encoding.GetEncoding(charset).GetBytes(str);
try
{
System.Security.Cryptography.MD5CryptoServiceProvider check;
check = newSystem.Security.Cryptography.MD5CryptoServiceProvider();
byte[] somme =check.ComputeHash(buffer);
string ret = "";
foreach (byte a in somme)
{
if (a < 16)
ret += "0" +a.ToString("X");
else
ret +=a.ToString("X");
}
return ret.ToLower();
}
catch
{
throw;
}
}

/// <summary>
/// base64编码
/// </summary>
/// <param name="str">内容</param>
/// <paramname="charset">编码方式</param>
/// <returns></returns>
private string base64(String str,String charset)
{
returnConvert.ToBase64String(System.Text.Encoding.GetEncoding(charset).GetBytes(str));
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: