工作中涉及到调用泛微的场景,官方的示例又臭又长,抽空用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();

net8获取泛微token以及访问api示例的更多相关文章

  1. 泛微e-cology和Oracle无法启动的解决方案

    最近公司的泛微OA无法访问,Oracle数据库也无法正常启动,尝试了好多方法,终于解决了,先说说基本情况,希望能给碰到同样问题的朋友带来一点帮助. 服务器操作系统:Window s Server 20 ...

  2. spring cloud+dotnet core搭建微服务架构:Api授权认证(六)

    前言 这篇文章拖太久了,因为最近实在太忙了,加上这篇文章也非常长,所以花了不少时间,给大家说句抱歉.好,进入正题.目前的项目基本都是前后端分离了,前端分Web,Ios,Android...,后端也基本 ...

  3. 泛微云桥e-birdge之金蝶云之家集成配置手册

    最近在配置金蝶云之家与泛微ecology的打通,没有看官方文档,直接配置,一直配置不通,看了官方文档后知道了少配置参数了,转载一下,省得四处去找了. 泛微云桥e-birdge之金蝶云之家集成配置手册 ...

  4. 泛微云桥e-Bridge安装手册

    有时候不看官方文档进行配置,可能会出现奇奇怪怪的问题,SO转载一下官方文档,顺带学习. 想超长体验此软件,请搜索本博客内容,有破解方法,仅用来学习使用,顺带进行二次开发,请勿使用在商业用途,谢谢. 泛 ...

  5. spring cloud+.net core搭建微服务架构:Api授权认证(六)

    前言 这篇文章拖太久了,因为最近实在太忙了,加上这篇文章也非常长,所以花了不少时间,给大家说句抱歉.好,进入正题.目前的项目基本都是前后端分离了,前端分Web,Ios,Android...,后端也基本 ...

  6. 微服务如何聚合 API 文档?这波秀~

    今天这篇文章介绍一下微服务如何聚合Swagger实现接口文档管理. 文章目录如下: 为什么需要聚合? 微服务模块众多,如果不聚合文档,则访问每个服务的API文档都需要单独访问一个Swagger UI界 ...

  7. 使用Flask设计带认证token的RESTful API接口[翻译]

    上一篇文章, 使用python的Flask实现一个RESTful API服务器端  简单地演示了Flask实的现的api服务器,里面提到了因为无状态的原则,没有session cookies,如果访问 ...

  8. [转载] 构建微服务:使用API Gateway

    原文: http://mp.weixin.qq.com/s?__biz=MzA5OTAyNzQ2OA==&mid=206889381&idx=1&sn=478ccb35294c ...

  9. spring cloud+dotnet core搭建微服务架构:Api网关(三)

    前言 国庆假期,一直没有时间更新. 根据群里面的同学的提问,强烈推荐大家先熟悉下spring cloud.文章下面有纯洁大神的spring cloud系列. 上一章最后说了,因为服务是不对外暴露的,所 ...

  10. Chris Richardson微服务翻译:构建微服务之使用API网关

    Chris Richardson 微服务系列翻译全7篇链接: 微服务介绍 构建微服务之使用API网关(本文) 构建微服务之微服务架构的进程通讯 微服务架构中的服务发现 微服务之事件驱动的数据管理 微服 ...

随机推荐

  1. 用了这么久SpringBoot却还不知道的一个小技巧

    前言 你可能调第三方接口喜欢启动application,修改,再启动,再修改,顺便还有个不喜欢写JUnitTest的习惯. 你可能有一天想要在SpringBoot启动后,立马想要干一些事情,现在没有可 ...

  2. 利用接口测试框架实现web状态的监控

    之前,我们已经说明了如何实现一个我们的接口测试框架RATF,当然这个框架不止可以用于管理我们的接口测试代码,我们还可以用他来对我们的web进行简单粗暴的监控. 原理: 1. 通过使用配置文件,对要监控 ...

  3. js调起android安卓与ios苹果方法 vue3.0 + ts

    let shareSelect = (ev :any) => { const u :any= navigator.userAgent; const win :any = window const ...

  4. Htttpclien循环自动生成图片,同时发送参数和文件,模拟http的post请求

    package org.jeecg.modules.bussiness.PostTests; import com.sun.tools.internal.xjc.reader.xmlschema.bi ...

  5. Mysql高级11-后台进程

    一.前言 MySQL的服务实现通过后台多个线程.内存池.文件交互来实现对外服务的,不同线程实现不同的资源操作,各个线程相互协助,共同来完成数据库的服务.MySQL常用的后台线程概括如下,分为Maste ...

  6. Solution -「THUPC 2021」区间矩阵乘法

    Description Link. 给定长度为 \(n\) 的序列 \(a_1, a_2, \dots, a_n\):共 \(m\) 组询问,每次询问给出 \(d,p_1,p_2\),求 \[\sum ...

  7. Centos7使用s3fs-fuse挂载minio对象存储实践

    Centos7使用s3fs-fuse挂载minio对象存储实践 事前准备 主机可以访问到对象存储API.例如minio默认的9000端口 主机安装好s3fs软件 已在minio上创建存储桶 安装s3f ...

  8. 12 款最棒 Vue 开源 UI 库

    文章目录 Element Plus - 经典中的经典,全面支持 Vue 3 TDesign Vue - 鹅厂优质 UI 组件,配套工具完满,设计工整,文档清晰 ArcoDesign Vue- 字节优质 ...

  9. Django框架——Web应用、基于SOCKET写一个web应用、 手撸简单web框架、http协议、Web框架(手撸自己的Web框架)、django简介以及简单使用

    文章目录 1 Web应用 一 Web应用程序是什么 1.1 Web应用程序的优点 1.2 Web应用程序的缺点 1.3 B/S架构优点 二 基于SOCKET写一个web应用 2.1 main.py 2 ...

  10. 43道Python经典案例题(有答案)

    1.有四个数字:1.2.3.4,能组成多少个互不相同且无重复数字的三位数?各是多少? for x in range(0,5): for y in range(0,5): for z in range( ...