C# 淘宝商品微信返利助手开发-(五)返利助手开发(3)淘口令如何通过API转换为链接

系列教程一目录:返利助手原理

系列教程二目录:返利助手开放文档以及帐号申请地址

系列教程三目录:返利助手开发(1)API介绍

系列教程四目录:返利助手开发(2)淘宝分享的内容如何只取淘口令

系列教程五目录:返利助手开发(3)淘口令如何通过API转换为链接

系列教程六目录:返利助手开发(4)如果通过淘口令解析的出来的地址获得返利信息

系列教程七目录:返利助手开发(5)如何将优惠券地址转为淘口令

系列教程八目录:微信号对接

系列教程九目录:编写一个vue页面用于复制淘口令

#通过上分分享我们知道了如何通过方法来只取到淘口令的值,这时候我们如何通过淘口令解析出商品的链接呢
API文档
其实淘宝有API来把淘口令转换为链接并取到商品ID
淘口令API.png
在开始API编写前我在最开始的编写过程中没有加入公众参数导致后面一直请求API失败,虽然本章内容是要讲解taobao.tbk.tpwd.convert这个接口但是所有API都得传入公共参数这个内容,所以在本章中我觉得先讲解公众参数的封装以便后面的快速调用

公共参数.png
展开公众参数我们发现里面有一堆东西这里可能有人难道就大了,我这里把里面的内容做整理
封装了一个实体类来存储这里东西一些固定的东西我已经赋值了

  public class initdata{public String method { get; set; }public String app_key { get; set; }public String target_app_key { get; set; }public String sign_method { get; set; } = "md5";public String session { get; set; }public String timestamp { get; set; } = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss", DateTimeFormatInfo.InvariantInfo);public String format { get; set; } = "json";public String v { get; set; } = "2.0";public String partner_id { get; set; } = "top-apitools";public Boolean simplify { get; set; }}

写到这里有细心的朋友已经法相了这里还有一个必传的内容我没有写那就是sign这个字段
为什么我没有把sign字段写进来呢因为我们看sign的算法介绍
Sign.png
Sign这个字段是需要将公众参数和业务参数,全部通过ASCII码排序过后
然后拼接,拼接后的值再拿去md5加密再hmac密码

既然每次都要都这麻烦的话我们把方法给封装一下

 public class AppUtil{/// <summary>/// 将参数排序组装/// </summary>/// <param name="param"></param>/// <returns></returns>public static string BuildParamStr(Dictionary<string, string> param){if (param == null || param.Count == 0){return "";}Dictionary<string, string> ascDic = param.OrderBy(o => o.Key).ToDictionary(o => o.Key, p => p.Value);StringBuilder sb = new StringBuilder();foreach (var item in ascDic){if (!string.IsNullOrEmpty(item.Value)){sb.Append(item.Key).Append("=").Append(item.Value).Append("&");}}return sb.ToString().Substring(0,sb.ToString().Length-1);}public static string signParam(Dictionary<string, string> param, string appkey){if (param == null || param.Count == 0){return "";}param.Add("key", appkey);string blankStr = BuildParamStr(param);return MD5Encrypt(blankStr);}/// <summary>/// 将实体转化为json/// </summary>/// <param name="o"></param>/// <returns></returns>public static string ObjectToJson(object o){string json = JsonConvert.SerializeObject(o);return json;}/// <summary>/// md5加签/// </summary>/// <param name="strText"></param>/// <returns></returns>public static string MD5Encrypt(string strText){MD5 md5 = new MD5CryptoServiceProvider();byte[] result = md5.ComputeHash(System.Text.Encoding.UTF8.GetBytes(strText));// 第四步:把二进制转化为大写的十六进制StringBuilder results = new StringBuilder();for (int i = 0; i < result.Length; i++){results.Append(result[i].ToString("X2"));}return results.ToString();}public static string SignTopRequest(IDictionary<string, string> parameters, string secret, string signMethod){// 第一步:把字典按Key的字母顺序排序IDictionary<string, string> sortedParams = new SortedDictionary<string, string>(parameters, StringComparer.Ordinal);IEnumerator<KeyValuePair<string, string>> dem = sortedParams.GetEnumerator();// 第二步:把所有参数名和参数值串在一起StringBuilder query = new StringBuilder();if (Constants.SIGN_METHOD_MD5.Equals(signMethod)){query.Append(secret);}while (dem.MoveNext()){string key = dem.Current.Key;string value = dem.Current.Value;if (!string.IsNullOrEmpty(key) && !string.IsNullOrEmpty(value)){query.Append(key).Append(value);}}// 第三步:使用MD5/HMAC加密byte[] bytes;if (Constants.SIGN_METHOD_HMAC.Equals(signMethod)){HMACMD5 hmac = new HMACMD5(Encoding.UTF8.GetBytes(secret));bytes = hmac.ComputeHash(Encoding.UTF8.GetBytes(query.ToString()));}else{query.Append(secret);MD5 md5 = MD5.Create();bytes = md5.ComputeHash(Encoding.UTF8.GetBytes(query.ToString()));}// 第四步:把二进制转化为大写的十六进制StringBuilder result = new StringBuilder();for (int i = 0; i < bytes.Length; i++){result.Append(bytes[i].ToString("X2"));}return result.ToString();}}

这样我们通过调用 AppUtil的 SignTopRequest方法就可以得到sign值了,可能这里每次都要反复写公共直还是有点麻烦我们进一步封装一下

  private Dictionary<string, string> buildBasicParam(initdata rsp){Dictionary<string, string> param = new Dictionary<string, string>();if (!String.IsNullOrEmpty(rsp.method)){param.Add("method", rsp.method);}if (!String.IsNullOrEmpty(rsp.app_key)){param.Add("app_key", rsp.app_key);}if (!String.IsNullOrEmpty(rsp.sign_method)){param.Add("sign_method", rsp.sign_method);}if (!String.IsNullOrEmpty(rsp.session)){param.Add("session", rsp.session);}if (!String.IsNullOrEmpty(rsp.timestamp)){param.Add("timestamp", rsp.timestamp);}if (!String.IsNullOrEmpty(rsp.format)){param.Add("format", rsp.format);}if (!String.IsNullOrEmpty(rsp.v)){param.Add("v", rsp.v);}return param;}
        string appkey = SiteConfig.GetSite("appkey");string appsecret = SiteConfig.GetSite("appsecret");string sessionkey = SiteConfig.GetSite("sessionkey");string adzone_id = SiteConfig.GetSite("adzone_id");string site_id = SiteConfig.GetSite("site_id");string usertoken = SiteConfig.GetSite("usertoken");string Taobaourl = SiteConfig.GetSite("Taobaourl");public string AutoUrl(string method, Dictionary<string, string> adddic){initdata rsp = new initdata();rsp.method = method;rsp.app_key = appkey;rsp.session = sessionkey;rsp.sign_method = "hmac";Dictionary<string, string> paramDic = buildBasicParam(rsp);paramDic = paramDic.Concat(adddic).ToDictionary(k => k.Key, v => v.Value);paramDic.Add("sign", AppUtil.SignTopRequest(paramDic, appsecret, "hmac"));WebUtils utils = new WebUtils();string  shorturl = utils.DoPost(Taobaourl, paramDic);return shorturl;}

封装好之后我们每次只用调用AutoUrl将每个接口的这业务参数传过来个就能快速的完成对各个接口的访问了

至于这个接口我们通过 这么一段简短代码就能实现对API的访问了

     Dictionary<string, string> param = new Dictionary<string, string>();param.Add("password_content", password_content);param.Add("adzone_id", adzone_id);string  Url= taoserver.AutoUrl("taobao.tbk.tpwd.convert", param);

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

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

相关文章

C# 淘宝商品微信返利助手开发-(六)返利助手开发(4)如何通过淘口令解析的出来的地址获得返利信息

系列教程一目录&#xff1a;返利助手原理 系列教程二目录&#xff1a;返利助手开放文档以及帐号申请地址 系列教程三目录&#xff1a;返利助手开发&#xff08;1&#xff09;API介绍 系列教程四目录&#xff1a;返利助手开发&#xff08;2&#xff09;淘宝分享的内容如何只取…

template标签_Django实战: 利用自定义模板标签实现仿CSDN博客月度归档

应网友慕之岩的请求&#xff0c;现提供下Django项目中如何使用自定义标签实现仿CSDN博客的月度归档(如下图所示)。要求按月统计每个月发表的博文篇数, 跳过空白月份&#xff0c;最后结果按发布时间逆序排列。点击每个月份可以看到详细博文列表清单。本文着重讲述如何实现&#…

javascript的stack overflow

写一个很简单的页面和脚本 1<html>2<head>3<title>fanweixiaos test</title>4<script type"text/javascript">5function onclick() 6{ 7 alert(范维肖); 8} 9</script>10</head>11<body>12<input type"b…

Hibernate中inverse属性与cascade属性

Hibernate集合映射中&#xff0c;经常会使用到"inverse"和"cascade"这两个属性。对于我这样&#xff0c;Hibernate接触不深和语文水平够烂的种种因素&#xff0c;发现这两个属性实在是难以理解&#xff0c;无奈只好将这个两个属性解释工作交给了Google和Ba…

h5 nan_h5页面在不同ios设备上的问题总结

最近在写嵌入到小程序webview的一个h5页面&#xff0c;是一个文章评论的功能&#xff0c;这个过程中&#xff0c;遇到很多兼容性的问题&#xff0c;在不同机型上的表现也很不一致&#xff0c;所以总结了以下这些问题&#xff0c;记录下来&#xff0c;以便以后查看。1、日期问题…

C# 淘宝商品微信返利助手开发-(七)返利助手开发(5)如何将优惠券地址转为淘口令

系列教程一目录&#xff1a;返利助手原理 系列教程二目录&#xff1a;返利助手开放文档以及帐号申请地址 系列教程三目录&#xff1a;返利助手开发&#xff08;1&#xff09;API介绍 系列教程四目录&#xff1a;返利助手开发&#xff08;2&#xff09;淘宝分享的内容如何只取…

ftp改为sftp_科普!一文详解 FTP、FTPS 与 SFTP 的原理

FTP、FTPS 与 SFTP 简介FTPFTP 即 文件传输协议&#xff08;英语&#xff1a;File Transfer Protocol 的缩写&#xff09;是一个用于计算机网络上在客户端和服务器之间进行文件传输的应用层协议。完整的 FTP 是由 FTP 服务器 和 FTP 客户端组成的&#xff0c;客户端可以将本地的…

动手学servlet(四) cookie和session

Cookie cookie是保存在客户端的一个“键值对”&#xff0c;用来存储用户的一些信息 cookie的应用&#xff1a; -在电子商务会话中标识用户 -对网站进行定制&#xff0c;比如你经常浏览哪些内容&#xff0c;就展示哪些页面给你 -网站广告&#xff0c;比如百度联盟&#xff0c;你…

16进制 转为图片 php_Python 十六进制hex-bytes-str之间的转换和Bcc码的生成

前言近期做测试模拟器用到了hex-bytes-str之间的转换bcc码的校验&#xff0c;这里总结了一些方法。实例直接上代码转为十六进制&#xff08;Hex&#xff09;字符串def 执行代码&#xff1a;方法&#xff1a;getStringFromNumber(size,value)参数一为生成几个batys&#xff0c;参…

推荐一个国外SaaS产品-Olark

Olark www.olark.com 是国外非常出名的一个在线客服工具。 现在国内很多人创业失败的原因是&#xff1a;什么都想自己做&#xff0c;不利用现有资源&#xff0c;结果造成做出来的东西什么都有&#xff0c;什么都不好用。 我们应该好好学习国外的小团队&#xff0c;他们只做一件…

粗暴,干就完了----徐晓冬似的C语言自学笔记-----实现一个链表结构

1 #include <stdio.h>2 #include <stdlib.h>3 #define N 54 /*N 假定数组长度为5*/5 typedef struct snode6 {7 int data;8 struct snode *next; 9 } SNODE;10 11 /*第一步&#xff0c;添加链表头信息*/12 SNODE *createhead(int a[])13 {14 SNODE *h,…

C# 淘宝商品微信返利助手开发-(二)返利助手开放文档以及帐号申请地址

系列教程一目录&#xff1a;返利助手原理 系列教程二目录&#xff1a;返利助手开放文档以及帐号申请地址 系列教程三目录&#xff1a;返利助手开发&#xff08;1&#xff09;API介绍 系列教程四目录&#xff1a;返利助手开发&#xff08;2&#xff09;淘宝分享的内容如何只取…

比较难的sql面试题,令我比较郁闷!

一组通话记录&#xff08;总共500万条&#xff09;:ID 主叫号码 被叫号码 通话起始时间 通话结束时间 通话时长1 98290000 0215466546656 2007-02-01 09:49:53.000 2007-02-01 09:50:16.000 232 98290000 021546654666 2007-02-01 09:50:29.000 2007-02-01 09:5…

阿里云ESC服务器数据快速转移至轻量应用服务器

ECS服务器的换ECS的服务器已有的数据转换就很简单了&#xff0c;直接创建自定义镜像&#xff0c;创建完成后新服务器直接更换系统盘然后选择你创建的镜像就直接吧你的数据可软件一起直接移到新的ECS的服务器了 可是坑爹的是&#xff0c;新买的轻量应用服务器里面左找右找也找…

js udp通信_nodejs源码分析第十九章 -- udp模块

udp不是面向连接的协议&#xff0c;所以使用上会比tcp简单&#xff0c;他和tcp一样&#xff0c;使用四元组来标记通信的双方&#xff08;单播的情况下&#xff09;。我们看看udp作为服务器和客户端的时候的流程。1 在c语言中使用udp1.1 服务器流程&#xff08;伪代码&#xff0…

SVN 清理失败解决方案

SVN有时因各种不明原因导致清理失败&#xff0c;可以采取如下解决办法进行处理&#xff1a; 方法一&#xff1a; 删除根目录下隐藏文件夹“.svn” 然后在根目录文件夹 外面的空白处 检出。比如你项目文件夹名为“D:/source” 则svn检出时,在“source”外面的D盘(D:/) 空白处上右…

将SQL-SERVER逆向工程导入Power-Design中并给表的字段添加注释

PD是一款不错的数据库设计工具&#xff0c;我们在项目开发的时候直接采用正向工程&#xff0c;设计好数据库后逆向将数据库导入PD中&#xff0c;并在PD中添加数据库字段的注释&#xff0c;便于新人的理解和学习&#xff0c;PD支持Oracle、SqlServer等数据库&#xff0c;是很强大…

腾讯微博Android客户端开发——自动获取验证码

上一节给大家讲解通过调用android系统自带的浏览器进行授权认证的&#xff0c;使用该种方式能很容易的完成认证&#xff0c;但是该种方式有个弊端&#xff0c;也就是如果使用第三方的浏览器如UC、天天等&#xff0c;输入完QQ账号信息点击“授权”后并不能再次跳转到MainActivit…

put请求方式参数如何传_TP5请求(request)变量

可以通过Request对象完成全局输入变量的检测、获取和安全过滤&#xff0c;支持包括$_GET、$_POST、$_REQUEST、$_SERVER、$_SESSION、$_COOKIE、$_ENV等系统变量&#xff0c;以及文件上传信息。检测变量是否设置可以使用has方法来检测一个变量参数是否设置&#xff0c;如下&…