当前位置: 首页 > news >正文

HJ1350接口(环保报送清单)

1、HJ1350接口(环保报送清单)示例代码

1.1登录获取token

function TFrmMain.LoginWeb(aQysb, aPwd: string): string;
vartoken, publicKey, input, loginstr: string;js: ISuperObject;cert: TStrings;
beginBLoginWeb := False;cert := TStringList.Create;url := 'https://nscqd.vecc.org.cn/vin/scqd/getPublicKey';response := HttpGet(url);js := SO(response);if js['status'].AsString = 'success' thenbeginpublicKey := js['data.publicKey'].AsString;cert.Add('-----BEGIN PUBLIC KEY-----');cert.Add(publicKey);cert.Add('-----END PUBLIC KEY-----');cert.SaveToFile('public.pem');cert.Free;loginstr := '{"username":"' + aQysb + '","password":"' + aPwd + '"}';loginstr := public_encrypt(loginstr);loginstr := StringReplace(loginstr, #$A, '', [rfReplaceAll]);js := SO();js.S['logininfo'] := loginstr;url := 'https://nscqd.vecc.org.cn/vin/scqd/login';response := HttpPostJson(url, js.AsString);response := UTF8Decode(response);js := SO(response);if js['status'].AsString = 'success' thenbeginFToken := js['data.token'].AsString;edtKey.Text := FToken;BLoginWeb := True;Result := FToken;endelsebeginShowError(js['errors'].AsString);Abort;end;endelsebeginShowError(js['errors'].AsString);Abort;end;
end;

1.2拼装JSON

一定要按照这个顺序,不然签名会出错

svin := '';
svin := svin + '[';
while not QrySJTS.Eof do
beginsvin := svin + '{';svin := svin + '"ccdate":"' + QrySJTS.FieldByName('ccdate').AsString + '",';svin := svin + '"ccjl":"' + QrySJTS.FieldByName('ccjl').AsString + '",';svin := svin + '"ccsy":"' + QrySJTS.FieldByName('ccsy').AsString + '",';svin := svin + '"dpscc":"' + QrySJTS.FieldByName('dpscc').AsString + '",';svin := svin + '"dpxh":"' + QrySJTS.FieldByName('dpxh').AsString + '",';svin := svin + '"fdjh":"' + QrySJTS.FieldByName('fdjh').AsString + '",';svin := svin + '"fdjsb":"' + QrySJTS.FieldByName('fdjsb').AsString + '",';svin := svin + '"fdjsccdz":"' + QrySJTS.FieldByName('fdjsccdz').AsString + '",';svin := svin + '"gkwww":"' + QrySJTS.FieldByName('gkwww').AsString + '",';svin := svin + '"obdwz":"' + QrySJTS.FieldByName('OBDWZ').AsString + '",';svin := svin + '"qddjh":"' + QrySJTS.FieldByName('QDDJH').AsString + '",';svin := svin + '"sb":"' + QrySJTS.FieldByName('sb').AsString + '",';svin := svin + '"sccdz":"' + QrySJTS.FieldByName('sccdz').AsString + '",';svin := svin + '"scdate":"' + QrySJTS.FieldByName('scdate').AsString + '",';svin := svin + '"vin":"' + QrySJTS.FieldByName('vin').AsString + '",';svin := svin + '"xslcgk":"' + QrySJTS.FieldByName('XSLCGK').AsString + '",';svin := svin + '"xxgkh":"' + QrySJTS.FieldByName('xxgkh').AsString + '",';svin := svin + '"zcdl":"' + QrySJTS.FieldByName('zcdl').AsString + '",';svin := svin + '"zljjzl":"' + QrySJTS.FieldByName('zljjzl').AsString + '",';svin := svin + '"zljzl":"' + QrySJTS.FieldByName('zljzl').AsString + '"';if QrySJTS.RecNo < QrySJTS.RecordCount thenbeginsvin := svin + '},';endelsebeginsvin := svin + '}';end;  QrySJTS.Next;
end;

签名方法

function SHA1(AData: string): string;
varLen: cardinal;mdctx: EVP_MD_CTX;inbuf, outbuf: array[0..1023] of char;
begin StrPCopy(inbuf, AData);LoadSSL;EVP_DigestInit(@mdctx, EVP_sha1);EVP_DigestUpdate(@mdctx, @inbuf, StrLen(inbuf));EVP_DigestFinal(@mdctx, @outbuf, Len);FreeSSL;BinToHex(outbuf, inbuf, Len);inbuf[2 * Len] := #0;result := StrPas(inbuf);
end;
http://www.jsqmd.com/news/33542/

相关文章:

  • 11月6号
  • 解决macOS升级到Tahoe后ssh-dss算法失效的问题
  • 20251106 正睿
  • 初识SQL语句
  • linux安装与命令
  • 25.11.6随笔联考总结
  • Cloudflare中的“托管质询”、“JavaScript质询“、”交互式质询”区别 - 狼人:
  • 数字识别模型
  • 完整教程:mysql表的操作——mysql表的约束
  • 洛谷 P5327
  • 完整教程:mysql表的操作——mysql表的约束
  • 2025年AI/LLM安全围栏/护栏/安全网关选型深度评估
  • 通过重写组件轻松掌握用JSX写Vue项目
  • 鸿蒙应用开发零基础入门:从工具到语言,轻松开启第一步
  • [Python刷题记录]-两两交换链表中的节点-链表-中等
  • #在线工具,柜位图工具
  • 洛谷 P3233
  • 组件理解
  • 搜维尔科技:Xsens动作捕捉系统实时捕捉人体运动数据,为人形机器人提供拟人化动作训练和实时控制支持
  • “模型法线到视图法线”的变换矩阵(normal matrix)的计算和作用
  • 首批凭借!华为云CodeArts Snap智能开发助手通过可信AI智能编码设备评估,获当前最高等级
  • 去年夏天
  • pythontip 字符串首位连接
  • aspose-pdf 修改pdf文件备忘录
  • 函数名与函数地址的关系(函数指针)
  • 第28节:网络同步与多人在线3D场景 - 详解
  • 别再选错!5分钟掌握AI Agent框架选型的方法
  • 完整教程:【Qt MOC预处理器解读与使用指南】
  • Linux - 7 磁盘管理篇
  • java word转 pdf