首页 > 其他分享 >net8获取泛微token以及访问api示例

net8获取泛微token以及访问api示例

时间:2023-12-15 17:44:20浏览次数:24  
标签:Console 示例 spk System token api WriteLine var

工作中涉及到调用泛微的场景,官方的示例又臭又长,抽空用NET8简化了写法,为了简化http访问,用了Flurl.Http这个库。在座各位大佬,我们直接就看代码了  

using System.Security.Cryptography;
using System.Text.Json;
using Flurl.Http;

//请按照官方内容做好初始化工作 https://e-cloudstore.com/doc.html?appId=af09c25938714c26b9736f535ca20fc9
//后端接口清单 https://e-cloudstore.com/ec/api/applist/index.html#/

// 可以改写为扩展函数方便使用
var RSAEncrypt = (string spk, string payload) =>
{
    using var rsa = RSA.Create();
    rsa.ImportSubjectPublicKeyInfo(Convert.FromBase64String(spk), out _);
    var PlainTextBArray  = System.Text.Encoding.UTF8.GetBytes(payload);
    var CypherTextBArray = rsa.Encrypt(PlainTextBArray, RSAEncryptionPadding.Pkcs1);
    var Result = Convert.ToBase64String(CypherTextBArray);
    return Result;
};

var appid = "42520974-83D6-41F6-8773-0780A6EAB3D6";

// 1、注册仅需要进行一次
using var LocalRSA = RSA.Create();
var publicPem = LocalRSA.ExportRSAPublicKeyPem();
var privatePem = LocalRSA.ExportRSAPrivateKeyPem();
var registerDto = await "http://127.0.0.1/api/ec/dev/auth/regist"
    .WithHeader("appid", appid)
    .WithHeader("cpk", publicPem)
    .PostAsync()
    .ReceiveJson<JsonDocument>();
System.Console.WriteLine(registerDto.RootElement.GetRawText());
System.Console.WriteLine();

// 2、获取secrit,spk,执行第1步后保存在ECOLOGY_BIZ_EC表中,分别对应字段SECRIT,server_public_key
var secrit = registerDto.RootElement.GetProperty("secrit").GetString();
var spk = registerDto.RootElement.GetProperty("spk").GetString();
System.Console.WriteLine(secrit);
System.Console.WriteLine(spk);
System.Console.WriteLine();

// 3、获取access_token
var encryptSecret = RSAEncrypt(spk, secrit);
var applytokenDto = await "http://127.0.0.1/api/ec/dev/auth/applytoken"
    .WithHeader("appid", appid)
    .WithHeader("secret", encryptSecret)
    .PostAsync()
    .ReceiveJson<JsonDocument>();

var token = applytokenDto.RootElement.GetProperty("token").GetString();
System.Console.WriteLine(token);
System.Console.WriteLine();


// 4、获取流程
var userId = "1";
var encryptUserId = RSAEncrypt(spk, userId);
var getAllWorkflowRequestListDto = await "http://127.0.0.1/api/workflow/paService/getAllWorkflowRequestList"
    .WithHeader("appid", appid)
    .WithHeader("token", token)
    .WithHeader("userId", encryptUserId)
    .PostAsync()
    .ReceiveJson<JsonDocument>();
System.Console.WriteLine(getAllWorkflowRequestListDto.RootElement.GetRawText());
System.Console.WriteLine();

 

标签:Console,示例,spk,System,token,api,WriteLine,var
From: https://www.cnblogs.com/lludcmmcdull/p/17903874.html

相关文章

  • 【HarmonyOS】如何实现entry模块页面跳转HSP共享包页面(API9)
    【关键字】API9、ArkTS、跨包路由跳转、entry模块页面跳转HSP共享包页面 【写在前面】本篇文章主要介绍使用API9ArkTS开发鸿蒙应用时,如何实现从entry模块或feature模块页面,跳转到HSPlibrary模块的页面。 【开发步骤】第一步:在API9Stage模型的工程中,【右键-New-Module......
  • JavaScript-IndexedDB API
    概述随着浏览器的功能不断增强,越来越多的网站开始考虑,将大量数据储存在客户端,这样可以减少从服务器获取数据,直接从本地获取数据。现有的浏览器数据储存方案,都不适合储存大量数据:Cookie的大小不超过4KB,且每次请求都会发送回服务器;LocalStorage在2.5MB到10MB之间(各家浏览器不......
  • BAPI_ASSET_TRANSFER_POST Error
    1、BAPIACAM1X_MAX_DE-WAERS为初始值;货币金额1.000,00000000(AMOUNT格式)已传递,但无货币调用BAPI时,只传递了金额,没有传币种,补充币种。1LS_TRANSFERPOSTINGDATA-AMOUNT=1000.2LS_TRANSFERPOSTINGDATA-CURRENCY='CNY'.2、没有对资产000001000000-0000定义折旧范......
  • 抖音商品详情API接口在电商行业中的重要性及实时数据获取实现
    随着移动互联网的快速发展,电商行业不断壮大。抖音作为一款短视频社交应用,近年来在电商领域取得了显著成果。本文将探讨抖音商品详情API接口在电商行业中的重要性,以及如何通过实时数据获取提高业务效率。我们将介绍相关的技术背景、API接口的基础知识、实时数据获取的方法和代码实现......
  • 抖音关键词商品列表API:电商行业的成功之道及实时数据获取的魔力
    随着电商行业的快速发展,抖音作为一款短视频社交应用,已经成为电商领域的重要平台。抖音关键词商品列表API接口在电商行业中具有重要意义,它可以帮助商家快速获取商品信息,提高销售效率。本文将探讨抖音关键词商品列表API接口在电商行业中的重要性,以及如何通过实时数据获取提高业务效率......
  • 使用 FastEndpoints 来垂直切换Web API的控制器方法
    在我们开发项目的WebAPI的时候,随着项目功能要求越来越多,可能我们会为控制器基类增加越来越多的基础功能,有些功能有一定的适应性,但可能在一般的子类中用不到,而随着对控制器控制要求越来越精细,那么需要为基类或者子类增加更多的控制功能,这样随着迭代的进行,有些控制器的功能会显得越......
  • asp.net core 使用newtonsoft完美序列化WebApi返回的ValueTuple
    https://www.cnblogs.com/kugar/p/12334210.html   由于开发功能的需要,又懒得新建太多的class,所以ValueTuple是个比较好的偷懒方法,但是,由于WebApi需要返回序列化后的json,默认的序列化只能将ValueTuple定义的各个属性序列化成Item1...n  但是微软还是良心的为序列......
  • 【C++】异常处理 ④ ( 异常接口声明 | 异常接口语法 | 抛出一种类型的异常 | 抛出多种
    文章目录一、异常接口声明1、异常接口引入2、异常接口语法3、抛出一种类型的异常4、抛出多种类型的异常5、抛出任何类型异常-不声明异常接口/声明throw(...)6、不能抛出任何类型异常-声明throw()7、抛出异常类型错误博客总结://1.不会抛出异常voidfun()throw();......
  • Eolink Apikit「 零代码」快速发起 RPC 接口自动化测试
    RPC(RemoteProcedureCall)远程过程调用,是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC的核心思想是将远程服务抽象成一个接口,客户端通过调用这个接口,就可以实现对远程服务的访问。EolinkApikit支持多协议,RPC、DUBBO、HTTP、REST、Websocket......
  • FastAPI-响应处理和配置
    前篇学习了关于请求参数相关的约束验证,Request包括路径参数,查询参数,枚举参数,文件参数,类型验证,多参数嵌套验证,请求体嵌套验证,Cookie和Header等,了解完这些对于接口的请求基本就到位了.这篇便主要针对响应处理进行介绍Response项目结构主要来自慕课网......