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

news2024/11/23 16:31:15

虾皮(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是否过期,过期了就要调用刷新接口)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Matlab 将数据写入excel文件

Matlab 将数据写入excel文件 函数&#xff1a;writematrix 功能&#xff1a;将矩阵写入文件 语法 writematrix(A) writematrix(A,filename) writematrix(___,Name,Value) 说明 writematrix(A) 将同构数组 A 写入以逗号分隔的文本文件。文件名为数组的工作区变量名称&…

点动、电子凸轮、电子齿轮

一、常见的运动模式有三种 1、点位运动&#xff1a;进队终点的位置有要求&#xff0c;不在乎运动轨迹。要求定位速度快。可分为JOG电动、MOVE寸动、和VMOVE持续运动三类。 2、连续轨迹运动&#xff1a;也称为插补&#xff0c;系统在高速运动的情况下&#xff0c;既要保证轮廓…

中文分词,c++应用,想到jieba分词,结果还的自己封装。探索中

一、研究背景 随着互联网的快速发展&#xff0c;信息也呈了爆炸式的增长趋势。在海量的信息中&#xff0c;我们如何快速抽取出有效信息成为了必须要解决的问题。由于信息处理的重复性&#xff0c;而计算机又善于处理机械的、重复的、有规律可循的工作&#xff0c;因此自然就…

技术必备:接口自动化测试数据校验神器【JSonPath】

我们今天不讲如何开发一款自定义开发校验规则库&#xff0c;而是给大家分享一款在开发自定义校验规则库或者常规的接口自动化测试时&#xff0c;经常会用到的一款数据提取神器&#xff1a;JSonPath。 1. JSonPath介绍 JSonPath是一种简单的方法来提取给定JSON文档的部分内容。…

Visual Components对重型机械工业的影响 衡祖仿真

一、重型机械行业面临的挑战 此行业制造商面临着许多挑战&#xff0c;首先是世界各地实施的环境法规不断增多&#xff0c;可持续建筑实践、改善空气质量和减少排放已成为产品设计和开发背后的主要驱动力&#xff0c;健康和安全标准也在不断发展&#xff0c;给已经面临熟练劳动…

Mongodb入门--头歌实验MongoDB 复制集 分片

一、MongoDB之副本集配置 1.1MongoDB主从复制 主从复制是MongoDB最早使用的复制方式&#xff0c; 该复制方式易于配置&#xff0c;并且可以支持任意数量的从节点服务器&#xff0c;与使用单节点模式相比有如下优点&#xff1a; 在从服务器上存储数据副本&#xff0c;提高了数…

机器学习——模型融合:Boosting算法

机器学习——模型融合&#xff1a;Boosting算法 1. Boosting核心思想 Boosting算法是一种集成学习方法&#xff0c;其核心思想是通过组合多个弱学习器&#xff08;即准确率略高于随机猜测的学习器&#xff09;来构建一个强学习器&#xff08;即准确率较高的学习器&#xff09…

【C++】——list的介绍及使用 模拟实现

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 文章目录 前言 一、list的介绍及使用 1.1 list的介绍 1.2 list的使用 1.2.1 list的构造 1.2.2 list iterator的使用 1.2.3 list capacity 1.2.4 list element access 1.…

open-sora

Open-Sora&#xff0c;高效复现类Sora视频生成方案开源&#xff01;魔搭社区最佳实践教程来啦&#xff01;https://mp.weixin.qq.com/s/WMQIDgZs2MBPGtx18XSXgw Open-Sora开源方案讲解开源但“平替”的方案。https://mp.weixin.qq.com/s/nPYCzgBA7hIsPZ6PCyXxKQOpen-Sora/docs…

蓝桥杯真题Day48 倒计时5天 练了几道真题小程序+回溯剪枝应用一个小程序

[蓝桥杯 2023 省 A] 更小的数 题目描述 小蓝有一个长度均为 n 且仅由数字字符 0∼9 组成的字符串&#xff0c;下标从0到 n−1&#xff0c;你可以将其视作是一个具有n位的十进制数字num&#xff0c;小蓝可以从num 中选出一段连续的子串并将子串进行反转&#xff0c;最多反转一次…

系统思考—策略性陪伴

每次与客户的相遇和合作&#xff0c;我都深感这不仅是工作的一部分&#xff0c;更是缘分的一种体现。释迦摩尼曾说&#xff1a;“只有很深很深的缘份&#xff0c;才能在同一条路上走了又走&#xff0c;同一个地方去了又去&#xff0c;同一个人见了又见。” 这些话让我更加珍惜与…

代码随想录算法训练营第三十七天|738.单调递增的数字、968.监控二叉树

代码随想录算法训练营第三十七天|738.单调递增的数字、968.监控二叉树 738.单调递增的数字 当且仅当每个相邻位数上的数字 x 和 y 满足 x < y 时&#xff0c;我们称这个整数是单调递增的。 给定一个整数 n &#xff0c;返回 小于或等于 n 的最大数字&#xff0c;且数字呈…

自然语言控制机械臂:ChatGPT与机器人技术的融合创新(上)

引言&#xff1a; 自OpenAI发布ChatGPT以来&#xff0c;世界正迅速朝着更广泛地将AI技术融合到机器人设备中的趋势发展。机械手臂&#xff0c;作为自动化与智能化技术的重要组成部分&#xff0c;在制造业、医疗、服务业等领域的应用日益广泛。随着AI技术的进步&#xff0c;机械…

数据结构篇:深度剖析跳跃表及与B+树优劣分析

本文旨在探讨跳跃表的特性及其在实际应用场景中的作用&#xff0c;同时对其与B树进行比较&#xff0c;以帮助更好地理解和运用这两种数据结构。 跳跃表 什么是跳跃表&#xff08;skip list&#xff09; 跳跃表是一种基于跳跃链表的有序数据结构&#xff0c;它是一种多层链表&…

阿里云租用服务器GPU配置报价单_1年_一个月_1小时价格表

阿里云GPU服务器租用价格表包括包年包月价格、一个小时收费以及学生GPU服务器租用费用&#xff0c;阿里云GPU计算卡包括NVIDIA V100计算卡、T4计算卡、A10计算卡和A100计算卡&#xff0c;GPU云服务器gn6i可享受3折优惠&#xff0c;阿里云服务器网aliyunfuwuqi.com分享阿里云GPU…

高创新 | [24年新算法]NRBO-XGBoost回归+交叉验证基于牛顿拉夫逊优化算法-XGBoost多变量回归预测

高创新 | [24年新算法]NRBO-XGBoost回归交叉验证基于牛顿拉夫逊优化算法-XGBoost多变量回归预测 目录 高创新 | [24年新算法]NRBO-XGBoost回归交叉验证基于牛顿拉夫逊优化算法-XGBoost多变量回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现 [24年新算…

dPET论文笔记

PBPK论文笔记 题目&#xff1a;Self-supervised Learning for Physiologically-Based Pharmacokinetic Modeling in Dynamic PET 摘要 动态正电子发射断层扫描成像 &#xff08;dPET&#xff09; 提供示踪剂的时间分辨图像。从 dPET 中提取的时间活动曲线 &#xff08;TAC&a…

竞赛 地铁大数据客流分析系统 设计与实现

文章目录 1 前言1.1 实现目的 2 数据集2.2 数据集概况2.3 数据字段 3 实现效果3.1 地铁数据整体概况3.2 平均指标3.3 地铁2018年9月开通运营的线路3.4 客流量相关统计3.4.1 线路客流量排行3.4.2 站点客流量排行3.4.3 入站客流排行3.4.4 整体客流随时间变化趋势3.4.5 不同线路客…

npm 切换成淘宝源,以及遇到npm 报错如何解决

淘宝源&#xff1a;npm config set registryhttps://registry.npmmirror.com/ 然后再npm下 package-lock.json这个删了 npm i再试一下