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

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

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

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

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

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

相关文章
|
1月前
|
运维 数据可视化
电子好书发您分享《可视化架构运维实践》
电子好书发您分享《可视化架构运维实践》
64 2
|
11月前
|
运维 Kubernetes Cloud Native
直播预告丨如何用 KubeSkoop 对 K8s 集群进行网络问题诊断
直播预告丨如何用 KubeSkoop 对 K8s 集群进行网络问题诊断
化繁为简!阿里新产亿级流量系统设计核心原理高级笔记(终极版)
不管是初入职场的小菜鸟还是有一些工作年限的老司机,系统设计问题对他们来说都是一大困扰。前者主要是在于面试;面试官来一个如何从零到一设计一个完整的系统?大多数人都会直接懵了,因为系统设计覆盖面广,而网上资料又不能面面俱到,单独背背文章肯定是不行的;后者主要在于晋升;想要从程序员进阶到架构师,系统设计是必须要踏入的一道坎,他对你的技术广度跟深度都会有一定程度的考察。
|
Java PHP
30分钟快速打造一个完善的直播聊天系统
下面的代码基于高性能的通信王牌工具 Netty。我们将一些实际场景都添加进去,比如用户身份的验证,游客只能浏览不能发言,多房间(频道)的聊天。 这篇文章非常适合和我一样的 Java 新手,适合作为学习 Java 的切入点,不需要考虑tomcat、spring、mybatis等。唯一的知识点就是 m
7405 0
|
监控 容灾 安全
悬赏平台源码,如何实现优质的数据库灾备体系?
悬赏平台源码,如何实现优质的数据库灾备体系?
|
数据采集 负载均衡 监控
陪玩系统源码的可观测体系,搭建注意事项有哪些?
陪玩系统源码的可观测体系,搭建注意事项有哪些?
|
视频直播 5G 开发工具
看直播软件源码,如何实现直播系统业务以及技术注意点分析
直播类app越来越受欢迎,互联网企业看到“直播+”的巨大潜力,搭建直播平台也成为大需求,而拥有一套完整的直播软件源码是开发直播软件的基础
看直播软件源码,如何实现直播系统业务以及技术注意点分析
|
搜索推荐 算法 机器学习/深度学习
独家下载 |《淘系千人千面分发体系全拆解》典型案例实战经验
想了解阿里系内部搜索与推荐是如何支持分发体系关键环节的吗? 想一站获取电商搜索的实战经验总结吗? 想深入学习推荐技术业务价值和核心能力吗?... 搜索&推荐技术应用系列第二本电子书《淘系千人千面分发体系全拆解》来啦!本书全方位视角解读阿里云搜索与推荐技术的实践与应用,带给你全新启迪,快来了解吧
48799 0
独家下载 |《淘系千人千面分发体系全拆解》典型案例实战经验
|
监控 Android开发
阿里巴巴淘票票专家分享:如何利用阿里云ARMS,搭建国际化在线售票的业务监控系统
淘票票为了开拓国际业务,需要做国际化的在线售票,并选择了阿里云新加坡节点作为技术方案,项目上线后急需一套自动化的监控系统代替人肉维护监控。看了ARMS的功能说明,发现其刚好以很低的接入成本来满足我们业务实时监控的需求。
4901 0
|
网络协议 存储
58到家通用实时消息平台架构细节(Qcon2016)
2016Qcon北京,业务核心架构场,《58到家通用实时消息平台架构细节》。
791 0