【分享】跨境虾皮Shopee各区域商品详情API返回值(商品,订单,面单等)♥

虾皮(shopee)是一个亚洲区域的电商平台,主要在东南亚地区提供电商服务。虾皮提供了丰富的电商数据,包括商品数据、订单数据、会员数据、评价数据等。

虾皮Shopee♥♥​​​​​​​♥​​​​​​​♥​​​​​​​♥​​​​​​​♥

1.授权

接口文档说明了:授权需要四个参数:合作伙伴ID,回调地址,生成加密签名,时间戳。
有了这四个参数,我们要把拿到的返回参数code还有shop_id存进数据库,code很重要,是用来后面更新token用的。

2.如何生成sign

使用加密算法HmacSHA256计算

        /// 加密算法HmacSHA256
        /// </summary>
        /// <param name="secret"></param>
        /// <param name="signKey"></param>
        /// <returns></returns>
        public static string HmacSHA256(string secret, string signKey)
        {
            string signRet = string.Empty;
            using (HMACSHA256 mac = new HMACSHA256(Encoding.UTF8.GetBytes(signKey)))
            {
                byte[] hash = mac.ComputeHash(Encoding.UTF8.GetBytes(secret));
                signRet = ToHexString(hash);
            }
            return signRet;
        }
        
         /// <summary>
        /// byte[]转16进制格式string
        /// </summary>
        public static string ToHexString(byte[] bytes)
        {
            string hexString = string.Empty;
            if (bytes != null)
            {
                StringBuilder strB = new StringBuilder();
                foreach (byte b in bytes)
                {
                    strB.AppendFormat("{0:x2}", b);
                }
                hexString = strB.ToString();
            }
            return hexString;
        }

返回参数会在回调地址上,拿到返回参数后,用来生成token

3.首次生成token


        /// <summary>
        /// 首次获取Token
        /// </summary>
        /// <param name="code"></param>
        /// <param name="partner_id"></param>
        /// <param name="partner_key"></param>
        /// <param name="shop_id"></param>
        /// <returns></returns>
        public ReturnMeg get_token(string code, int partner_id, string partner_key, int shop_id)
        {
            long timest = Gettimest();
            var bodto = new
            {
                code = code,

                partner_id = partner_id,
                shop_id = shop_id,
            };
            string body = JsonConvert.SerializeObject(bodto);
            var host = System.Configuration.ConfigurationManager.AppSettings["ShpoeeUrl"];
            var path2 = "/api/v2/auth/token/get";
            var base_string = $"{partner_id}{path2}{timest}";
            var sign = HmacSHA256(base_string, partner_key);
            var url = $"{host}{path2}?sign={sign}&partner_id={partner_id}&timestamp={timest}&|";
            string sd = Tool.HttpPostJSONs(url, body);
            JObject tokendata = (JObject)JsonConvert.DeserializeObject(sd);
            if (tokendata["error"].ToString() != "")
            {
                return new ReturnMeg
                {
                    State = ReturnState.error,
                    Msg = "授权失败"
                };
            }
            Shopee s = new Shopee();

            s.Access_token = tokendata["access_token"].ToString();
            s.Refresh_token = tokendata["refresh_token"].ToString();
            int expire_in = MsParse.ToInt32(tokendata["expire_in"].ToString());//有效时间
            s.GetTokenTime = DateTime.Now.AddSeconds((expire_in - 600));


            var path = "/api/v2/shop/get_shop_info";
            var redirect_url = setup.PcUserUrl + "/SQ/Index";
            var base_strings = $"{partner_id}{path}{timest}{s.Access_token}{shop_id}";
            var signs = HmacSHA256(base_strings, partner_key);
            string strData = $"{partner_key}{redirect_url}";

            string aaa = ($"{host}{path}?shop_id={shop_id}&partner_id={partner_id}&access_token={s.Access_token}&sign={signs}&timestamp={timest}");
            string back = Tool.HttpGet(aaa);
            if (back == "")
            {
                return new ReturnMeg
                {
                    State = ReturnState.error,
                    Msg = "获取店铺信息失败"
                };
            }
            JObject joP = (JObject)JsonConvert.DeserializeObject(back);
            s.ShopName = joP["shop_name"].ToString();
            s.region = joP["region"].ToString();
            s.ShopState = joP["status"].ToString();
            s.auth_time = StampToDateTime(joP["auth_time"].ToString());
            s.expire_time = StampToDateTime(joP["expire_time"].ToString());
            s.Creationtime = DateTime.Now;
            s.shop_id = shop_id;
            s.code = code;
            Shopee s1 = shopeeIBLL.GetShopee(shop_id);
            s.Id = s1.Id;
            if (s1.Id > 0)
            {
                shopeeIBLL.UpDate(s);
            }
            else
            {
                shopeeIBLL.Add(s);
            }

            return new ReturnMeg
            {
                State = ReturnState.success,
                Msg = "授权成功"
            };
        }


        /// <summary>
        /// 用店铺Id刷新Token
        /// </summary>
        /// <param name="shop_Id"></param>
        /// <returns></returns>
        public void SxToken(int shop_Id)
        {
            Shopee s = shopeeIBLL.GetShopee(shop_Id);
            //时间不到,不用刷新
            if (s.GetTokenTime >= DateTime.Now)
            {
                return;
            }
            int partner_id = MsParse.ToInt32(System.Configuration.ConfigurationManager.AppSettings["Shpoeepartner_id"]);
            var partner_key = System.Configuration.ConfigurationManager.AppSettings["Shpoeepartner_key"];
            long timest = Gettimest();
            var bodto = new
            {
                refresh_token = s.Refresh_token,
                partner_id = partner_id,
                shop_id = s.shop_id,
                code = s.code,
            };
            string body = JsonConvert.SerializeObject(bodto);
            var host = System.Configuration.ConfigurationManager.AppSettings["ShpoeeUrl"];
            var path2 = "/api/v2/auth/access_token/get";
            var base_string = $"{partner_id}{path2}{timest}";
            var sign = HmacSHA256(base_string, partner_key);
            var url = $"{host}{path2}?sign={sign}&partner_id={partner_id}&timestamp={timest}&|";
            string sd = Tool.HttpPostJSONs(url, body);
            JObject tokendata = (JObject)JsonConvert.DeserializeObject(sd);

            s.Access_token = tokendata["access_token"].ToString();
            s.Refresh_token = tokendata["refresh_token"].ToString();
            int expire_in = MsParse.ToInt32(tokendata["expire_in"].ToString());//有效时间
            s.GetTokenTime = DateTime.Now.AddSeconds((expire_in - 600));
            shopeeIBLL.UpDate(s);
        }
       

获取到返回参数后,存入数据库。

4.刷新token

拿到首次获取token返回参数refresh_token,调用刷新token接口。
注意(之后的授权,或是对接虾皮其他接口都要先判断token是否过期,过期了就要调用刷新接口)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/540590.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoo利用 MDC 机制过滤出单次请求相关的日志

&#x1f3f7;️个人主页&#xff1a;牵着猫散步的鼠鼠 &#x1f3f7;️系列专栏&#xff1a;Java全栈-专栏 &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正 目录 1.前言 2.MDC 是什么 3.代码实战 4.总结 1.前言 在服务出现故障时&#xff…

动态规划-简单多状态dp问题1

文章目录 1. 按摩师&#xff08;面试题 17.16&#xff09;2. 打家劫舍 II&#xff08;213&#xff09;3. 删除并获得点数&#xff08;740&#xff09;4. 粉刷房子&#xff08;LCR 091&#xff09; 1. 按摩师&#xff08;面试题 17.16&#xff09; 题目描述&#xff1a; 状态表…

字节码文件的组成

字节码文件的组成 字节码文件的组成1 以正确的姿势打开文件2 字节码文件的组成2.1 基本信息2.2 常量池2.3 字段2.4 方法2.5 属性 3 字节码常用工具3.1 javap3.2 jclasslib插件3.3 Arthas 4 字节码常见指令 字节码文件的组成 1 以正确的姿势打开文件 字节码文件中保存了源代码…

【数据结构】习题之链表的回文结构和相交链表

&#x1f451;个人主页&#xff1a;啊Q闻 &#x1f387;收录专栏&#xff1a;《数据结构》 &#x1f389;前路漫漫亦灿灿 前言 今日的习题是关于链表的&#xff0c;分别是链表的回文结构和相交链表的判断。 链表的回文结构 题目为&#xff1a;链表的回文结…

校园通用型发生网络安全事件解决方案

已知校园多教学楼、多教学机房、非标网络机房缺乏防护设备、检测设备、安全保护软件(杀软) 切断所有外网&#xff0c;断网处理!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 部署路由系统可选择爱快、routeros、openwrt。等。可将日志上传到日志分析系统。《这项非必要的》 部署开源防火…

JVM—对象的创建流程与内存分配

JVM—对象的创建流程与内存分配 创建流程 对象创建的流程图如下&#xff1a; 对象的内存分配方式 内存分配的方式有两种&#xff1a; 指针碰撞&#xff08;Bump the Pointer&#xff09;空闲列表&#xff08;Free List&#xff09; 分配方式说明收集器指针碰撞&#xff08…

Aritest+python+Jenkins解放双手iOS/Android自动化

ARITest、Python 和 Jenkins 可以结合在一起创建一个自动化测试解决方案&#xff0c;实现持续集成和持续测试的目标。以下是三者如何协同工作的基本概念&#xff1a; 1. **ARITest**&#xff1a; ARITest 是一款功能全面的自动化测试工具&#xff0c;提供 UI 自动化、接口自…

加强金融行业关键信息基础设施安全保护,有效防范网络安全风险

当前&#xff0c;随着数字化发展的不断深入&#xff0c;关键信息基础设施作为国家的重要战略资源&#xff0c;面临着国内外严峻的网络安全风险。为了确保国家安全&#xff0c;在国家发展各领域和全过程中&#xff0c;需要将安全发展贯穿始终&#xff0c;筑牢国家安全屏障。金融…

C++从入门到精通——类和对象(下篇)

1. 再谈构造函数 1.1 构造函数体赋值 在创建对象时&#xff0c;编译器通过调用构造函数&#xff0c;给对象中各个成员变量一个合适的初始值。 class Date { public:Date(int year, int month, int day){_year year;_month month;_day day;} private:int _year;int _mont…

【CSS疑难点汇总】1.bor-box失效情况总结以及高宽设置为auto的情况

1. box-sizing box-sizing是改变盒子宽高的计算方式&#xff0c;一般使用bor-box&#xff0c;消除padding和border对整个盒子的影响&#xff0c;但在没有明确给出宽高的情况下&#xff0c;box-sizing是没有效果的 1.1 box-sizing不生效的情况 1.1.1块级盒子嵌套 ​ 宽度继承…

使用快捷回复软件的好处

在现代的客服工作中&#xff0c;尤其是店铺大促期间&#xff0c;咨询量的激增往往让客服人员应接不暇。即使打字速度再快&#xff0c;也难以跟上源源不断的客流。想应对这样的情况&#xff0c;快捷回复软件就非常适合客服人员了。 以我个人正在使用的客服宝为例&#xff0c;我想…

2024年阿里云优惠合集:2核2G3M云服务器61元/年起

阿里云服务器租用价格表2024年最新&#xff0c;云服务器ECS经济型e实例2核2G、3M固定带宽99元一年&#xff0c;轻量应用服务器2核2G3M带宽轻量服务器一年61元&#xff0c;ECS u1服务器2核4G5M固定带宽199元一年&#xff0c;2核4G4M带宽轻量服务器一年165元12个月&#xff0c;2核…

Unity中图片和Base64字符串之间的转换

大家好&#xff0c;我是阿赵。   这次来讲一下在unity引擎里面&#xff0c;图片和base64字符串的互相转换问题。 一、图片传输的多种方式 有时候我们需要把图片通过网络传输发送。   在Unity里面&#xff0c;有不止一种方式可以实现&#xff0c;比如说&#xff0c;把图片的…

Python+Requests模拟发送GET请求

模拟发送GET请求 前置条件&#xff1a;导入requests库 一、发送不带参数的get请求 代码如下&#xff1a; 以百度首页为例 import requests# 发送get请求 response requests.get(url"http://www.baidu.com") print(response.content.decode("utf-8"))…

数据结构之单链表的相关知识点及应用

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a;数据结构 目录 链表的概念及结构 链表与顺序表的区别与优劣势 链表的分类 单链表的实现 单链表中增加节点 单链表中尾插数据 打印单链…

研发岗-面临统信UOS系统配置总结

第一步 获取root权限 配置环境等都需要用到root权限&#xff0c;所以我们先获取到root权限&#xff0c;方便下面的操作 下载软件 在UOS应用商店下载的所需应用 版本都比较低 安装node 官网下载了【arm64】的包&#xff0c;解压到指定文件夹&#xff0c;设置链接&#xff0…

jmeter监听器大家都会用,但我这个妙招能让你提早一小时下班!

使用过 jmeter 的同学&#xff0c;应该都会使用监听器&#xff0c;在每个监听器中&#xff0c;都会有一个“所有数据写入一个文件”的功能&#xff0c;那这个功能应该怎么用呢&#xff1f;今天&#xff0c;我们就来讲讲这个功能的使用。 几乎所有的监听器都有这样一个功能。 那…

spring boot admin搭建,监控springboot程序运行状况

新建一个spring boot web项目&#xff0c;添加以下依赖 <dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-starter-server</artifactId><version>2.3.0</version></dependency> <dependency&…

动态内存;

目录 1.malloc; 简要介绍&#xff1a; 如何使用&#xff1a; free函数&#xff1a; 2.calloc; 简要介绍&#xff1a; 与malloc的区别&#xff1a; 3.realloc; 简要介绍&#xff1a; 如何使用&#xff1a; 4.动态内存常见错误&#xff1b; 1.malloc; 简要介绍&#x…

M12设备端面板安装连接器板后安装(前锁)L扣

M12设备端面板安装连接器板后安装(前锁)L扣 优势 -100% 电气测试及插拔测试-对于紧凑型设备&#xff1a;可在有限空间内传输很高的功率-密封圈受过度拧紧保护&#xff0c;实现长期可靠的密封 标准 IEC61076-2-111 锁紧方式 螺纹锁紧 订单料号 P/N: L-KYF12K4Z-PG9-M-L0.…