详尽分享菜鸟天地对接功能之单点接入分享

简介: 详尽分享菜鸟天地对接功能之单点接入分享

最近在跟菜鸟天地系统对接,业务中涉及到单点接入,感觉其实现思想很不错,现分享一下,供大家参考:

从CP内部系统进入菜鸟天地,也就是从菜鸟的合作伙伴(物流或快递公司内部系统)单点跳转进入菜鸟天地系统

红色的请求需要CP实现(合作方):

1、LINK接口( ):服务器端获取快速登录菜鸟的令牌(loginToken) CNUSER_GET_LOGIN_TOKEN 请求参数:员工工号 返回参数:loginToken

2、生成快速登录菜鸟的URL,并从浏览器发起302跳转 #* goto:登陆后的目标跳转地址。如菜鸟天地的地址为:http%3a%2f%2ffly.cainiao.com login_token:菜鸟返回的令牌(注意:login_token使用一次后即失效,且LINK接口返回起60秒后超时失效)

功能实现:用户在合作方系统登录后,访问菜鸟天地链接时调用菜鸟接口返回认证token,再构造地址跳转到菜鸟天地系统,token使用一次后失效

从合作方登录菜鸟天地

///

/// 登录菜鸟天地系统

///

///

public ActionResult CaiNiaoTianDi()

{

string userCode = UserInfo.Code;

try

{

JsonResult[span style="color: rgba(0, 0, 255, 1)">string

if (result.Status)

{

string token = result.ResultValue;

string url = string.Format("http://login.cainiao.com/cplogin.htm?loginToken={0}&redirectUrl=https://fly.cainiao.com", token);

return Redirect(url);

}

else

{

return Content("登录菜鸟系统出错" + result.Data);

}

}

catch (Exception ex)

{

NLogHelper.Warn(ex, "登录菜鸟系统异常");

return Content("登录菜鸟系统异常");

}

}

///

/// 获取登录菜鸟系统的token

///

///

///

public static JsonResult[span style="color: rgba(0, 0, 255, 1)">string

{

JsonResult[span style="color: rgba(0, 0, 255, 1)">stringstring

JavaScriptSerializer serializer = new JavaScriptSerializer();

serializer.RegisterConverters(new JavaScriptConverter【】 { new ExpandoJsonConverter() });

result.Status = false;

result.StatusMessage = "未知错误";

string response = string.Empty;

string logisticsInterface = string.Empty;

string dataDigest = string.Empty;

// 已在菜鸟平台配置json格式数据传输

using (WebClient webClient = new WebClient())

{

NameValueCollection postValues = Init();

dynamic user = new ExpandoObject();

user.employee_no = userCode;

// 调用删除

logisticsInterface = serializer.Serialize(user);

dataDigest = CaiNiaoApiUtilities.SignSdkRequest(logisticsInterface, secretKey);

// 根据员工工号删除用户信息

postValues.Add("employee_no", userCode);

postValues.Add("msg_type", "CNUSER_GET_LOGIN_TOKEN");

postValues.Add("data_digest", dataDigest);

postValues.Add("logistics_interface", logisticsInterface);

byte【】 responseArray = webClient.UploadValues(url, //代码效果参考:http://www.zidongmutanji.com/zsjx/536075.html

postValues);

response = Encoding.UTF8.GetString(responseArray);

// 根据返回值判断

dynamic obj = serializer.Deserialize(response);

// 逻辑判断

if (IsPropertyExist(obj, "success") && obj.success == "true")

{

result.Status = true;

result.ResultValue = obj.login_token;

result.Data = response;

result.StatusMessage = "成功返回";

}

else

{

result.Status = false;

result.Data = response;

result.StatusMessage = "调用失败";

}

}

return result;

}

///

/// 签名

///

//代码效果参考:http://www.zidongmutanji.com/bxxx/353114.html

///

///

///

public static string SignSdkRequest(string content, string secretKey)

{

byte【】 binaryData = Encoding.UTF8.GetBytes(content + secretKey);

MD5 md5 = new MD5CryptoServiceProvider();

byte【】 output = md5.ComputeHash(binaryData);

string dataDigest = Convert.ToBase64String(output);

return dataDigest;

}

///

/// 初始化

///

///

private static NameValueCollection Init()

{

NameValueCollection postValues = new NameValueCollection();

postValues.Add("logistic_provider_id", logisticProviderId);

postValues.Add("to_code", "");

return postValues;

}

java版本的签名方法

String logisticsInterface = JSONArray.toJSONString(userMap);

String dataSign = logisticsInterface + secretKey;

byte【】 binaryData=dataSign.getBytes("UTF-8");

byte【】 signatureData = DigestUtils.md5Digest(binaryData);

String dataDigest = Base64.encodeBase64String(signatureData);

如果您认为这篇文章还不错或者有所收获,您可以通过右边的“打赏”功能 打赏我一杯咖啡【物质支持】,也可以点击文章下方“推荐”按钮【精神支持】,您的“推荐”将是我最大的写作动力!

欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,凡是转载于本人的文章,不能设置打赏功能,如有特殊需求请与本人联系!

相关文章
|
存储 JSON 监控
APM监控 · 入门篇 · Android端测监控平台建设(1)
APM 全称 Application Performance Management & Monitoring (应用性能管理/监控) 性能问题是导致 App 用户流失的罪魁祸首之一,如果用户在使用我们 App 的时候遇到诸如页面卡顿、响应速度慢、发热严重、流量电量消耗大等问题的时候,很可能就会卸载掉我们的 App。这也是我们在目前工作中面临的巨大挑战之一,尤其是低端机型。
2904 0
APM监控 · 入门篇 · Android端测监控平台建设(1)
|
存储 安全 区块链
DAPP持币生息系统开发成熟源码|详情规则|技术原理
“Web3.0”被用来描述互联网潜在的下一阶段,一个运行在“区块链”技术之上的“去中心化”的互联网
|
BI Sentinel
最新发布!阿里巴巴内部实战AlibabaSentinel高并发流量治理手册
为什么要使用Sentinel? Sentinel使用简单、配置灵活,可将Sentinel的动态数据源接口与配置中心结合使用,动态地改变流量规则。Sentinel提供的流量控制功能有限流、熔断、系统自适应、授权等。笔者当时使用了熔断和系统自适应功能应对突增流量导致服务雪崩的问题,同时使用限流功能并结合信号量隔离、匀速限流效果控制器,应对内部定时任务瞬时高并发调用某服务接口的问题。
120 0
最新发布!阿里巴巴内部实战AlibabaSentinel高并发流量治理手册
|
运维 Kubernetes Cloud Native
直播预告丨如何用 KubeSkoop 对 K8s 集群进行网络问题诊断
直播预告丨如何用 KubeSkoop 对 K8s 集群进行网络问题诊断
|
存储 消息中间件 监控
化繁为简!阿里新产亿级流量系统设计核心原理高级笔记(终极版)
不管是初入职场的小菜鸟还是有一些工作年限的老司机,系统设计问题对他们来说都是一大困扰。前者主要是在于面试;面试官来一个如何从零到一设计一个完整的系统?大多数人都会直接懵了,因为系统设计覆盖面广,而网上资料又不能面面俱到,单独背背文章肯定是不行的;后者主要在于晋升;想要从程序员进阶到架构师,系统设计是必须要踏入的一道坎,他对你的技术广度跟深度都会有一定程度的考察。
|
算法 Go
阐述:one wiex壹维克斯平台逻辑系统开发项目模式方案
阐述:one wiex壹维克斯平台逻辑系统开发项目模式方案
414 0
《阿里专家天樵:复杂业务系统下的规则引擎开发实践》电子版地址
阿里专家天樵:复杂业务系统下的规则引擎开发实践
125 0
《阿里专家天樵:复杂业务系统下的规则引擎开发实践》电子版地址
|
数据采集 负载均衡 监控
陪玩系统源码的可观测体系,搭建注意事项有哪些?
陪玩系统源码的可观测体系,搭建注意事项有哪些?
|
监控 Android开发
阿里巴巴淘票票专家分享:如何利用阿里云ARMS,搭建国际化在线售票的业务监控系统
淘票票为了开拓国际业务,需要做国际化的在线售票,并选择了阿里云新加坡节点作为技术方案,项目上线后急需一套自动化的监控系统代替人肉维护监控。看了ARMS的功能说明,发现其刚好以很低的接入成本来满足我们业务实时监控的需求。
4934 0