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

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

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

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

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

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

相关文章
|
8月前
|
数据采集 存储 数据可视化
《数据治理简易速速上手小册》第1章 数据治理概述(2024 最新版)
《数据治理简易速速上手小册》第1章 数据治理概述(2024 最新版)
181 0
|
8月前
|
安全 网络安全
网络安全各类平台汇总(自用/持续更新)
网络安全各类平台汇总(自用/持续更新)
68 1
豆瓣评分9.8!阿里内部的分布式架构手册让多少人突破了瓶颈?
没有家族和宗门的帮助,多少天才卡在分布式境界不善而终,今日吾打破自身枷锁,领悟分布式系统法则,突破此境界
豆瓣评分9.8!阿里内部的分布式架构手册让多少人突破了瓶颈?
|
BI Sentinel
最新发布!阿里巴巴内部实战AlibabaSentinel高并发流量治理手册
为什么要使用Sentinel? Sentinel使用简单、配置灵活,可将Sentinel的动态数据源接口与配置中心结合使用,动态地改变流量规则。Sentinel提供的流量控制功能有限流、熔断、系统自适应、授权等。笔者当时使用了熔断和系统自适应功能应对突增流量导致服务雪崩的问题,同时使用限流功能并结合信号量隔离、匀速限流效果控制器,应对内部定时任务瞬时高并发调用某服务接口的问题。
138 0
最新发布!阿里巴巴内部实战AlibabaSentinel高并发流量治理手册
|
存储 供应链 安全
AVAX生态质押系统开发指南与方案
智能合约作为区块链技术的重要组成部分,在实现去中心化、确保交易可信性以及推动创新方面发挥着巨大的作用
|
消息中间件 缓存 分布式计算
真牛!阿里最新发布这份《亿级高并发系统设计手册》涵盖所有操作
前言 我们知道,高并发代表着大流量,高并发系统设计的魅力就在于我们能够凭借自己的聪明才智设计巧妙的方案,从而抵抗巨大流量的冲击,带给用户更好的使用体验。这些方案好似能操纵流量,让流量更加平稳得被系统中的服务和组件处理。 那我们改如何应对大流量的三种方式? 第一种方法:Scale-out。 第二种方法:使用缓存提升性能 第三种方法:异步处理 面试京东,阿里这些大厂遇到这些问题改怎么办? 秒杀时如何处理每秒上万次的下单请求? 如何保证消息仅仅被消费一次? 如何降低消息队列系统中消息的延迟?
化繁为简!阿里新产亿级流量系统设计核心原理高级笔记(终极版)
不管是初入职场的小菜鸟还是有一些工作年限的老司机,系统设计问题对他们来说都是一大困扰。前者主要是在于面试;面试官来一个如何从零到一设计一个完整的系统?大多数人都会直接懵了,因为系统设计覆盖面广,而网上资料又不能面面俱到,单独背背文章肯定是不行的;后者主要在于晋升;想要从程序员进阶到架构师,系统设计是必须要踏入的一道坎,他对你的技术广度跟深度都会有一定程度的考察。
|
存储 运维 大数据
《百度运维大数据存储平台设计与实践》电子版地址
百度运维大数据存储平台设计与实践
74 0
《百度运维大数据存储平台设计与实践》电子版地址
《阿里高级开发工程师紫思:闲鱼多业务隔离框架SWAK》电子版地址
阿里高级开发工程师紫思:闲鱼多业务隔离框架SWAK
101 0
《阿里高级开发工程师紫思:闲鱼多业务隔离框架SWAK》电子版地址
《总监课第五期第五节:质量保障 - 大规模原生云质量保障浅析》电子版地址
总监课第五期第五节:质量保障 - 大规模原生云质量保障浅析
71 0
《总监课第五期第五节:质量保障 - 大规模原生云质量保障浅析》电子版地址