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

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

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

从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);

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

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

相关文章
|
6月前
|
监控 Java 应用服务中间件
长连接网关技术专题(九):去哪儿网酒店高性能业务网关技术实践
本文针对去哪儿网酒店业务网关的吞吐率下降、响应时间上升等问题,进行全流程异步化、服务编排方案等措施,进行了高性能网关的技术优化实践。
83 0
|
运维 Kubernetes Cloud Native
直播预告丨如何用 KubeSkoop 对 K8s 集群进行网络问题诊断
直播预告丨如何用 KubeSkoop 对 K8s 集群进行网络问题诊断
化繁为简!阿里新产亿级流量系统设计核心原理高级笔记(终极版)
不管是初入职场的小菜鸟还是有一些工作年限的老司机,系统设计问题对他们来说都是一大困扰。前者主要是在于面试;面试官来一个如何从零到一设计一个完整的系统?大多数人都会直接懵了,因为系统设计覆盖面广,而网上资料又不能面面俱到,单独背背文章肯定是不行的;后者主要在于晋升;想要从程序员进阶到架构师,系统设计是必须要踏入的一道坎,他对你的技术广度跟深度都会有一定程度的考察。
|
BI API 数据安全/隐私保护
自建API接口管理平台的产品脑图和解决方案
自建API接口管理平台的产品脑图和解决方案
《阿里专家天樵:复杂业务系统下的规则引擎开发实践》电子版地址
阿里专家天樵:复杂业务系统下的规则引擎开发实践
127 0
《阿里专家天樵:复杂业务系统下的规则引擎开发实践》电子版地址
|
弹性计算 物联网 云计算
EMQ x 阿里云:云上高效构建,IoT 数据一站处理|直播预告
构建高可靠、高性能、开箱即用的一站式云上 IoT 解决方案
EMQ x 阿里云:云上高效构建,IoT 数据一站处理|直播预告
|
监控 安全 网络安全
直播预告|多年终端安全沉淀,源自支付宝的全链路安全防护建设
6月24日(周五)晚上19:00,蚂蚁集团数字科技mPaaS技术专家,现任mPaaS安全效能技术1号位——夜禹,将为我们带来主题为《多年终端安全沉淀,源自支付宝的全链路安全防护建设》的公开课,公开课嘉宾将结合支付宝的业务实践,分享如何解决在 App 研发生命周期中对隐私合规相关问题进行测试、监控、管控等方面的问题,以及移动安全合规整体解决方案,包括网络安全、数据安全、二进制安全、移动攻防、人脸安全等方方面面能力。
208 0
直播预告|多年终端安全沉淀,源自支付宝的全链路安全防护建设
|
数据采集 负载均衡 监控
陪玩系统源码的可观测体系,搭建注意事项有哪些?
陪玩系统源码的可观测体系,搭建注意事项有哪些?
|
开发框架 供应链 算法
闲鱼如何0到1搭建一套发布引导链路
闲鱼是如何搭建一个运营可长期干预的促发布链路?
748 0
闲鱼如何0到1搭建一套发布引导链路
|
网络协议 存储
58到家通用实时消息平台架构细节(Qcon2016)
2016Qcon北京,业务核心架构场,《58到家通用实时消息平台架构细节》。
822 0