c# 对接第三方接口实现签名
官网文档要求如下:
Sign算法说明
举例:假设请求参数键值对如下
appkey : test2-xx page_no : 0 end_time : 2016-08-01 13:00:00 start_time : 2016-08-01 12:00:00 page_size : 40 sid : test2 timestamp : 1470042310 |
-
第一步 对数所有请求参数按照键名进行正序排序,排序结果如下,注意要保持键值对的对应关系且appsecret不参与运算。
appkey : test2-xx end_time : 2016-08-01 13:00:00 page_no : 0 page_size : 40 sid : test2 start_time : 2016-08-01 12:00:00 timestamp : 1470042310 |
-
第二步 循环对每个键值进行处理:
1.处理 appkey |
-
第三步 计算sign
1.获取appsecret 假如当前实例中的 appsecret 为 12345 2.将appsecret拼接在第二步的结果后面,注意没有任何拼接符,结果如下:06-appkey:0008-test2-xx;08-end_time:0019-2016-08-01 13:00:00;07-page_no:0001-0;09-page_size:0002-40;03-sid:0005-test2;10-start_time:0019-2016-08-01 12:00:00;09-timestamp:0010-147004231012345 3.将上述字符串进行md5加密后即可得到sign,要求MD5方法返回的是32位小写的MD5值,计算结果如下: ad4e6fe037ea6e3ba4768317be9d1309 4.将计算的sign作为一个请求参数放到参数列表中 sid : test2 appkey : test2-xx timestamp : 1470042310 start_time : 2016-08-01 12:00:00 end_time : 2016-08-01 13:00:00 page_no : 0 page_size : 40 sign : ad4e6fe037ea6e3ba4768317be9d1309 |
using System.Drawing;
using System.Text;
using System;
using static System.Net.Mime.MediaTypeNames;
using System.Reflection;
using System.Xml;
using System.Collections.Generic;
using System.Xml.Linq;
using System.Linq;Console.Write("开始:");
UTF8LengthPadding.Main();
Console.ReadLine();public class UTF8LengthPadding
{public static void Main(){//秘钥string appsecret = "12345";//参数类Parm parm = new Parm();//存放参数数据的集合Dictionary<string, string> dic = new Dictionary<string, string>();//循环类 添加到集合中Type myEntityType = parm.GetType();PropertyInfo[] properties = myEntityType.GetProperties();foreach (PropertyInfo property in properties){string propertyName = property.Name;object propertyValue = property.GetValue(parm);dic.Add(propertyName, propertyValue.ToString());}//对key进行排序var sortedKeys = dic.OrderBy(kvp => kvp.Key).ToDictionary(kvp => kvp.Key);//拼接结果string prestr = "";//最终结果string finalStr = "";foreach (var item in sortedKeys.Keys){//key的长度int keyLength = item.Length;//不足两位补0string key = keyLength.ToString("00");//拼接prestr = prestr + key;//组装key值prestr = prestr + "-" + item + ":";//组装value长度string valueStr = dic[item];//value长度int valueLength = valueStr.Length;//不足四位补0string value = valueLength.ToString("0000");//拼接prestr = prestr + value;//组装valueprestr = prestr + "-" + valueStr + ";";}//去掉最后一个;if (prestr.Length > 0){prestr = prestr.Substring(0, prestr.Length - 1);}//第三步 计算sign md5加密后,返回的是32位小写的MD5值finalStr = prestr + appsecret;Console.WriteLine(finalStr); // 输出Console.WriteLine(GetMD5_32(finalStr)); // 输出}/// <summary>/// 获得32位的MD5加密/// </summary>/// <param name="input"></param>/// <returns></returns>public static string GetMD5_32(string input){System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create();byte[] data = md5.ComputeHash(System.Text.Encoding.Default.GetBytes(input));StringBuilder sb = new StringBuilder();for (int i = 0; i < data.Length; i++){sb.Append(data[i].ToString("x2"));}return sb.ToString();}
}public class Parm
{public string appkey { get; set; } = "test2-xx";public string page_no { get; set; } = "0";public string end_time { get; set; } = "2016-08-01 13:00:00";public string start_time { get; set; } = "2016-08-01 12:00:00";public string page_size { get; set; } = "40";public string sid { get; set; } = "test2";public string timestamp { get; set; } = "1470042310";
}
相关文章:
c# 对接第三方接口实现签名
官网文档要求如下: Sign算法说明 举例:假设请求参数键值对如下 appkey : test2-xx page_no : 0 end_time : 2016-08-01 13:00:00 start_time : 2016-08-01 12:00:00 page_size : 40 sid : test2 timestamp : 1470042310 第一步 对数所有请求参数按照…...
数学建模评价类模型—层次分析法(无数据情况下)
目录 前言 一、评价类问题概述 二、AHP建模流程 1、过程描述 2、层次分析法—Matlab代码 三、权重计算 1、算术平均法 2、几何平均法 3、特征值法 目录 文章目录 前言 一、评价类问题概述 二、AHP建模流程 1、过程描述 2、层次分析法—Matlab代码 三、权重计算 算术平均法 前言…...
模拟实现strcat(字符串追加)
1.我们要知道stcat的作用是什么,字符串追加。 2.我们进行模仿,我们先将arr1不断,直到“\0”,我们加在后面。 //模拟实现strcat(字符串追加) char* my_strcat(char* arr1, const char* arr2) {assert(arr1 && arr2);char ret arr1;…...
HTTP简单概述
一. HTTP HTTP(HyperText Transfer Protocol)是用于在客户端和服务器之间传输超文本数据(如HTML)的应用层协议。它是万维网的基础协议,定义了浏览器和服务器之间如何请求和传输文档。HTTP有多个版本,每个版…...
掌握PyCharm代码片段管理器:提升编码效率的秘诀
掌握PyCharm代码片段管理器:提升编码效率的秘诀 PyCharm作为业界领先的集成开发环境(IDE),提供了许多便利的功能来提升开发者的编码效率,其中之一就是代码片段管理器。代码片段管理器允许开发者保存、管理和重用代码模…...
MyBatis动态代理和映射器
目录 1、映射器简介 (1)什么是mapper动态代理? (2)动态代理的规范 (3)如何使用动态代理 (4)为什么学映射器 (5)映射器与接口 (…...
ShardingSphere中的ShardingJDBC常见分片算法的实现
文章目录 ShardingJDBC快速入门修改雪花算法和分表策略核心概念分片算法简单INLINE分片算法STANDARD标准分片算法COMPLEX_INLINE复杂分片算法CLASS_BASED自定义分片算法HINT_INLINE强制分片算法 注意事项 ShardingJDBC Git地址 快速入门 现在我存在两个数据库,并…...
SpringBoot整合Flink CDC实时同步postgresql变更数据,基于WAL日志
SpringBoot整合Flink CDC实时同步postgresql变更数据,基于WAL日志 一、前言二、技术介绍(Flink CDC)1、Flink CDC2、Postgres CDC 三、准备工作四、代码示例五、总结 一、前言 在工作中经常会遇到要实时获取数据库(postgresql、m…...
ThinkPHP事件的使用
技术说明 1.ThinkPHP版本:支持6.0、8.0 2.使用场景:用户登陆后日志记录、通知消息发送等主流程、次流程分离等场景 3.说明:网上很多帖子说的不明不白的,建议大家自己手动尝试总结一下 4.事件手动绑定的时候,一定要…...
【Nuxt】服务端渲染 SSR
SSR 概述 服务器端渲染全称是:Server Side Render,在服务器端渲染页面,并将渲染好HTML返回给浏览器呈现。 SSR应用的页面是在服务端渲染的,用户每请求一个SSR页面都会先在服务端进行渲染,然后将渲染好的页面…...
Spring Boot整合WebSocket
说明:本文介绍如何在Spirng Boot中整合WebSocket,WebSocket介绍,参考下面这篇文章: WebSocket 原始方式 原始方式,指的是使用Spring Boot自己整合的方式,导入的是下面这个依赖 <dependency><g…...
《LeetCode热题100》---<5.③普通数组篇五道>
本篇博客讲解LeetCode热题100道普通数组篇中的五道题 第五道:缺失的第一个正数(困难) 第五道:缺失的第一个正数(困难) 方法一:将数组视为哈希表 class Solution {public int firstMissingPosi…...
Cocos Creator文档学习记录
Cocos Creator文档学习记录 一、什么是Cocos Creator 官方文档链接:Hello World | Cocos Creator 百度百科:Cocos Creator_百度百科 Cocos Creator包括开发和调试、商业化 SDK 的集成、多平台发布、测试、上线这一整套工作流程,可多次的迭…...
插入数据优化 ---大批量数据插入建议使用load
一.insert优化 1.批量插入 2.手动提交事务 3.主键顺序插入 二.大批量插入数据 如果一次性需要插入大批量数据,使用insert语句插入性能较低,此时可以使用MySQL数据库提供的load指令进行插入。操作如下 1.客户端连接服务端时,加入参数 --local-infine mysql --local-infine…...
【Linux】一篇总结!什么是重定向?输出重定向的作用是什么?什么又是追加重定向?
欢迎来到 CILMY23 的博客 🏆本篇主题为:一篇总结!什么是重定向?输出重定向的作用是什么?什么又是追加重定向? 🏆个人主页:CILMY23-CSDN博客 🏆系列专栏:Py…...
svn软件总成全内容
SVN软件总成 概述:本文为经验型文档 目录 D:\安装包\svn软件总成 的目录D:\安装包\svn软件总成\svn-base添加 的目录D:\安装包\svn软件总成\tools 的目录D:\安装包\svn软件总成\tools\sqlite-tools-win32-x86-3360000 的目录D:\安装包\svn软件总成\安装包-----bt lo…...
[激光原理与应用-118]:电源系统的接地详解:小信号的噪声干扰优化,从良好外壳接地开始
目录 一、电路的基本原理:电流回路 1、电流回路的基本概念 2、电流回路的特性 3、电流回路的类型 4、电流回路的应用 五、电流回路的注意事项 二、交流设备的接地 1.1 概述 1、交流工作接地的定义 2、交流工作接地的作用 3、交流工作接地的规范要求 4、…...
回测本身就是一种过度拟合?
这也许是一个絮絮叨叨的专题,跟大伙儿唠一唠量化相关的小问题,有感而发写到哪算哪,这是第一期,先唠个10块钱的~ 前段时间在某乎上看到这样一个问题『您怎么理解回测本身就是一种过度拟合?』 个人看来,回测本…...
什么是Arduino?
Arduino是一款便捷灵活、方便上手的开源电子原型平台,由欧洲的一个开发团队于2005年冬季开发。以下是关于Arduino的详细介绍: 一、基本概述 定义:Arduino是一个基于开放源代码的软硬件平台,它让电子设计更加简单快捷。通过Arduin…...
【机器学习基础】Scikit-learn主要用法
【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈Python机器学习 ⌋ ⌋ ⌋ 机器学习是一门人工智能的分支学科,通过算法和模型让计算机从数据中学习,进行模型训练和优化,做出预测、分类和决策支持。Python成为机器学习的首选语言,…...
python-素数回文数的个数(赛氪OJ)
[题目描述] 求 11 到 n 之间(包括 n),既是素数又是回文数的整数有多少个。输入: 一个大于 11 小于 10000 的整数 n。输出: 11 到 n 之间的素数回文数个数。样例输入1 23 样例输出1 1 提示: 回文数指左右对…...
OCC 网格化(二)-网格划分算法
目录 一、概述 二、详解 1. 线性偏转 (Linear Deflection) 2. 角偏转 (Angular Deflection) 三、示例 3.1 示例1 3.2 示例2 一、概述 在 Open CASCADE Technology (OCC) 中默认的网格划分算法BRepMesh_IncrementalMesh有两个主要的选项来定义三角剖分—线性和角偏转。 …...
pyecharts模块
PyEcharts 一个基于ECharts库的Python封装库,它使得开发者可以方便地在Python环境中创建交互式的图表,包括折线图、柱状图、饼图、地图等多种可视化效果。 优点: 易用性:PyEcharts提供了简单易懂的API,通过链式调用…...
深⼊理解指针(3)
1. 字符指针变量 2. 数组指针变量 3. ⼆维数组传参的本质 4. 函数指针变量 5. 函数指针数组 6. 转移表 1. 字符指针变量 在指针的类型中我们知道有⼀种指针类型为字符指针 ⼀般使⽤: char* 这两种方式都是把字符串中的首字符的地址赋值给pc。 在这串代码中 str1内容的地…...
黑马头条vue2.0项目实战(四)——首页—文章列表
目录 1. 头部导航栏 1.1 页面布局 1.2 样式调整中遇到的问题 2. 频道列表 2.1 页面布局 2.2 样式调整 2.3 展示频道列表 3. 文章列表 3.1 思路分析 3.2 使用 List 列表组件 3.3 加载文章列表数据 3.4 下拉刷新 3.5 设置上下padding固定头部和频道列表 3.6 记住列…...
UE5.4内容示例(4)UI_UMG - 学习笔记
https://www.unrealengine.com/marketplace/zh-CN/product/content-examples 《内容示例》是学习UE5的基础示例,可以用此熟悉一遍UE5的功能 UI示例 UI_UMG :基本UMGUI_CommonUI :UMG多层应用UI_SlatePostBuffer UI :FX的示例&…...
C#实现数据采集系统-配置文件化
系统优化-配置 配置信息ip端口,还有点位信息,什么的都是直接在代码里直接写死,添加点位,修改配置,比较麻烦,每次修改都需要重新生成打包。 所以将这些配置都改成配置文件,这样只需要修改配置文件,程序无须修改,即可更新。 配置代码: 如果我们有100个采集,一个个去…...
Java面试题 -- 为什么重写equals就一定要重写hashcode方法
在回答这个问题之前我们先要了解equals与hascode方法的本质是做什么的 1. equals方法 public boolean equals(Object obj) {return (this obj);}我们可以看到equals在不重写的情况下是使用判断地址值是否相同 所以默认的 equals 的逻辑就是判断的双方是否引用了一个对象&am…...
J031_使用TCP协议支持与多个客户端同时通信
一、需求文档 使用TCP协议支持与多个客户端同时通信。 1.1 Client package com.itheima.tcp2;import java.io.DataOutputStream; import java.io.OutputStream; import java.net.Socket; import java.util.Scanner;public class Client {public static void main(String[] a…...
二分查找(精确查找、范围搜索)
目录 1. 二分查找概述2. 精确查找2.1 【left,right】2. 2 【left,right) 3. 范围查找总结 1. 二分查找概述 二分查找法,也称为二分搜索法或折半查找法,是一种在有序数组中查找特定元素的搜索算法。其基本思想是&#x…...
一般网站前端是用什么做/百度移动端优化
点击上方“蓝色字”可关注我们!暴走时评:加密货币支付服务提供商BitPay已经邀请前Worldpay美国执行官Glen Braganza成为其新的首席财务官(CFO)。 Braganza在私募股权和公开市场拥有超过15年的经验,他解释自己为什么加入…...
密云广州网站建设/百度竞价投放
...
电子商务网站怎么做数据库/关键词查询工具免费
【数据库】数据库(database)就是存储数据的仓库,为了方便数据的存储和管理,将数据按照特定的规律存储在磁盘上。通过数据库管理系统,有效的组织和管理存储在数据库中的数据。 【数据库系统】数据库系统和数据库不是一个…...
网站建设哪家好公司/西地那非片能延时多久
虽说接触了好久的单片机或者说嵌入式开发,不过对于有些概念还是比较模糊,因此此系列将会从一些零碎的小知识点出发,慢慢的遍历整张嵌入式开发的地图。这次先来看一下中断向量表。至于为什么会提到中断向量表,主要是因为我自己在学…...
建设银行网站介绍/一站式网络推广服务
##JSON-RPC ---------- JSON-RPC是一个轻量级的远程调用协议,简单易用。 **请求数据体**: { "method": "getName", "params": ["1"], "id": 1 } method: 远端的方法名 params: 远程方法接收的参数列表 id: 本次请…...
三端互通传奇手游找服网站/最有效的15个营销方法
在使用电脑的时候,如果我们需要将一个分区的全部资料进行转移,放置在新的分区中,往往需要很长时间来复制粘贴,效率很低。那么如何才能快速的转移资料到新分区呢?其实,我们可以通过克隆分区的方式来进行分区资料的快速…...