首页 > 编程语言 >c# 对接第三方接口实现签名

c# 对接第三方接口实现签名

时间:2024-07-31 17:24:24浏览次数:14  
标签:string get c# 对接 System 接口 using prestr public


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;
            //不足两位补0
            string key = keyLength.ToString("00");
            //拼接
            prestr = prestr + key;
            //组装key值
            prestr = prestr + "-" + item + ":";

            //组装value长度
            string valueStr = dic[item];
            //value长度
            int valueLength = valueStr.Length;
            //不足四位补0
            string value = valueLength.ToString("0000");
            //拼接
            prestr = prestr + value;
            //组装value
            prestr = 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";
}

标签:string,get,c#,对接,System,接口,using,prestr,public
From: https://blog.csdn.net/qq_61596453/article/details/140828243

相关文章

  • Python - Lambda expressions as closures
    Aclosureisanestedfunctionthatcanaccessfreevariablesfromanenclosingfunctionevenafterithasfinisheditsexecution.Weknowthat,likenestedfunctiondefinitions,lambdaexpressionscanreferencevaluesfromtheenclosingscope,solambda......
  • Python - Creating jump tables using lambda functions
    Wecanplacelambdafunctioninsidelistanddictionaryliterals.Thiswaywecanuselambdaexpressionstocreatejumptables.>>>L=[lambdas:s.strip().lower(),... lambdas:s.strip().upper(),... lambdas:s.lstrip().title(),... lambd......
  • 暑假集训CSP提高模拟12
    暑假集训CSP提高模拟12\(T1\)P171.黑客\(40pts\)将式子进行二维差分。考虑枚举\(\frac{i+j}{\gcd(i,j)}=t\),并统计它能对答案产生的贡献。令\(\gcd(i,j)=1\),这样的话才会不重不漏。推式子,有\(\begin{aligned}&\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}[\fr......
  • Django 集成 celery 与执行结果监控
    Django集成celery与执行结果监控celery架构图一、搭建Django项目环境模块安装pipinstalldjango==3.2pipinstallcelerypipinstallredis#window环境下需要安装eventletpipinstalleventlet创建django项目django-adminstartprojectdjango_celery......
  • 汇川AM401的TCP服务端通信
    VARx建立连接:BOOL;abySendData_0:ARRAY[0..3]OFBYTE:=[76,79,78,13];abyRecvData_0:ARRAY[0..19]OFBYTE;TCP_Server_0:TCP_Server;TCP_Connect_0:TCP_Connect;TCP_Receive_0:TCP_Receive;TCP_Send_0:TCP_Send;iState......
  • exceptionx:灵活便捷的Python异常处理库,让异常处理更高效!
    exceptionxEnglish|中文exceptionx是一个灵活且便捷的Python异常处理库,允许你动态创建异常类,并提供多种异常处理机制。exceptionx的前身是gqylpy-exception。pip3installexceptionx动态创建异常使用exceptionx,你可以在需要时即时创建异常类,而无需提前定义。例如,如......
  • 设计模式 - 简单工厂模式(Simple Factory Pattern)
    设计模式-简单工厂模式(SimpleFactoryPattern)  概要  记忆关键字:工厂类创建对象  定义:通过工厂类创建对象,并且根据传入参数决定具体子类对象的做法,就是简单工厂模式  分析:如果一个类的实例需要在许多地方被创建和初始化,而初始化的代码也比较复杂。此时可以考虑......
  • 医疗产品血压计电子方案pcba设计与开发
    该电子血压计方案采用了单片机型号主控芯片型号SIC32F911RET6,封装型号LQFP64,通过单片机程序开发设计而成,主要组成结构是传感器、充气泵、阻塞纽带、lcd显示屏以及测量电路。通过绑定在手臂上拉紧测量,最终得出结果显示在lcd显示屏上,更能直观的看到自己的血压值一、臂式血......
  • 暑假集训CSP提高模拟 ∫[0,6] (x^2)/6 dx
    \[\text{暑假集训CSP提高模拟}\int^{6}_{0}\frac{x^{2}}{6}dx\]A.黑客显然这个题里只有\(999\)放在复杂度里是有可能对的,要么是\(999^{2}\)要么是\(999^{2}\log999\),显然应该是前者.考虑枚举全部的最简分数,然后乘上去,算的时候直接算当前分母/分子是最简分式的几倍(注意上......
  • @DisallowConcurrentExecution
    @DisallowConcurrentExecution这个注解的作用是防止同一个JobDetail的多个实例同时执行。如果一个任务还在执行中,而调度器尝试再次触发该任务,则新的触发会被阻塞,直到当前任务执行完成。也就是说,同一个任务在任意时间点上只能有一个实例在执行。使用场景:当你的任务不是线程安......