Files

211 lines
11 KiB
C#
Raw Permalink Normal View History

2023-03-02 22:57:29 +08:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SMCryptoUtils;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace SMCryptoUtilsTest
{
internal class Program
{
static void Main(string[] args)
{
//应用ID
String appId = "57E2D561E97141A3871DEFB410ADD920";
//应用秘钥
String appSecret = "F30D0D261BA04063A0BCAEF19F8ADBCC";
//应用私钥
String privateKey = "AKyhfvPbT+tIJHJkZSDILrw7t+FOG1U58UcupYYTzCOj";
//平台公钥为了测试用例能验签成功平台公钥当前赋值为应用公钥的值应用公钥存放于处方中心不对外提供实际上拿到的平台公钥是用于验签处方中心返回的数据不能用于此demo
String publicKey = "BIFd2+2CgjuPAj5FMj5L/L3azTWu86suPtlIJkCo8zjQ44R7SQUUkTgZGdVelRQCM5pW+x9tZGzDPaUNbfD499w=";
JObject requestData = new JObject();
requestData.Add("appId", appId);
requestData.Add("encType", "SM4");
requestData.Add("signType", "SM2");
requestData.Add("timestamp", (long)(DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds);
JObject data = new JObject();
// data.Add("userName", "张三");
/***********说明此次data对象替换为实际传递的业务数据结构以下结构仅供测试参考。***********/
data = JObject.Parse("{\n" +
" \"insuPlcNo\": \"350100\",\n" +
" \"hospRxno\": \"3504874534935555553312259665232132\",\n" +
" \"prscTime\": \"2022-06-06 10:10:00\",\n" +
" \"valiDays\": 1,\n" +
" \"valiEndTime\": \"2022-06-07 10:10:00\",\n" +
" \"authNo\": \"\",\n" +
" \"bizTypeCode\": \"01\",\n" +
" \"diseinfo\": [\n" +
" {\n" +
" \"diagCode\": \"E11.900\",\n" +
" \"diagDept\": \"心血管内科\",\n" +
" \"diagDrName\": \"吴丽雅\",\n" +
" \"diagDrNo\": \"PTYS0000818231\",\n" +
" \"diagName\": \"急性胃炎\",\n" +
" \"diagSrtNo\": \"1\",\n" +
" \"diagTime\": \"2022-04-07 10:10:00\",\n" +
" \"diagType\": \"1\",\n" +
" \"maindiagFlag\": \"1\",\n" +
" \"tcmDiseCode\": \"\",\n" +
" \"tcmDiseName\": \"\",\n" +
" \"tcmsymp\": \"\",\n" +
" \"tcmsympCode\": \"\"\n" +
" }\n" +
" ],\n" +
" \"ecToken\": \"\",\n" +
" \"initRxno\": \"\",\n" +
" \"longRxFlag\": \"1\",\n" +
" \"maxReptCnt\": 0,\n" +
" \"mdtrtCertType\": \"02\",\n" +
" \"mdtrtCertNo\": \"110101198811090049\",\n" +
" \"cardSn\":\"\",\n" +
" \"mdtrtinfo\": {\n" +
" \"algsHis\": \"注射过敏\",\n" +
" \"certno\": \"110101198811090049\",\n" +
" \"diseCodg\": \"\",\n" +
" \"diseCondDscr\": \"\",\n" +
" \"diseName\": \"\",\n" +
" \"drCode\": \"YS9083982313\",\n" +
" \"drDeptCode\": \"KSBM89981\",\n" +
" \"drDeptName\": \"外科\",\n" +
" \"drProfttlCodg\": \"ZCBM29931\",\n" +
" \"drProfttlName\": \"主任医师\",\n" +
" \"extras\": {\n" +
" \"1\": \"1\"\n" +
" },\n" +
" \"fixmedinsCode\": \"H35010200364\",\n" +
" \"fixmedinsName\": \"福建中医药大学附属第二人民医院\",\n" +
" \"fstdiagFlag\": \"0\",\n" +
" \"gend\": \"1\",\n" +
" \"gesoVal\": 0,\n" +
" \"hiFeesetlName\": \"本地医疗保险\",\n" +
" \"hiFeesetlType\": \"2\",\n" +
" \"insutype\": \"310\",\n" +
" \"iptOtpNo\": \"ZYMZ8909232131231\",\n" +
" \"maindiagCode\": \"E11.900\",\n" +
" \"maindiagName\": \"急性胃炎\",\n" +
" \"mdtrtId\": \"JZID888888\",\n" +
" \"mdtrtTime\": \"2022-05-19 14:10:00\",\n" +
" \"medType\": \"11\",\n" +
" \"medTypeName\": \"普通门诊\",\n" +
" \"medfeeSumamt\": 36.88,\n" +
" \"nwbAge\": \"\",\n" +
" \"nwbFlag\": \"0\",\n" +
" \"otpIptFlag\": \"1\",\n" +
" \"patnAge\": 27,\n" +
" \"patnHgt\": 180,\n" +
" \"patnName\": \"张三三\",\n" +
" \"patnWt\": 80,\n" +
" \"pharCertType\": \"01\",\n" +
" \"pharCertno\": \"350401198510101010\",\n" +
" \"pharChkTime\": \"2022-04-07 10:10:01\",\n" +
" \"pharCode\": \"PTYS000088232\",\n" +
" \"pharDeptCode\": \"KS989831\",\n" +
" \"pharDeptName\": \"内科\",\n" +
" \"pharName\": \"林玉英\",\n" +
" \"pharPracCertNo\": \"YSBH99032313\",\n" +
" \"pharProfttlCodg\": \"01\",\n" +
" \"pharProfttlName\": \"高级药师\",\n" +
" \"prscDeptCode\": \"KFKS98231\",\n" +
" \"prscDeptName\": \"内科\",\n" +
" \"prscDrCertType\": \"01\",\n" +
" \"prscDrCertno\": \"350422196510101010\",\n" +
" \"prscDrName\": \"吴丽雅\",\n" +
" \"psnCertType\": \"01\",\n" +
" \"psnNo\": \"RYBH38384\",\n" +
" \"rgstFee\": 15.88,\n" +
" \"spDiseFlag\": \"1\",\n" +
" \"suckPrdFlag\": \"0\"\n" +
" },\n" +
" \"minInrvDays\": 2,\n" +
" \"reptFlag\": \"0\",\n" +
" \"reptdCnt\": 0,\n" +
" \"rxCotnFlag\": \"0\",\n" +
" \"rxDoscnt\": 1,\n" +
" \"rxDosePrdDays\": 3,\n" +
" \"rxDosunt\": \"包\",\n" +
" \"rxDrordDscr\": \"多喝水\",\n" +
" \"rxDrugCnt\": 1,\n" +
" \"rxFrquCodg\": \"13\",\n" +
" \"rxFrquName\": \"每天三次tid\",\n" +
" \"rxTypeCode\": \"1\",\n" +
" \"rxUsedWayCodg\": \"1\",\n" +
" \"rxUsedWayName\": \"口服\",\n" +
" \"rxdrugdetail\": [\n" +
" {\n" +
" \"basMednFlag\": \"1\",\n" +
" \"chemname\": \"恩替卡韦口服溶液\",\n" +
" \"diseCodg\": \"BZML000000001\",\n" +
" \"drugCnt\": 1,\n" +
" \"drugDosform\": \"片剂\",\n" +
" \"drugDosunt\": \"盒\",\n" +
" \"drugGenname\": \"恩替卡韦口服溶液\",\n" +
" \"drugPric\": 1.5,\n" +
" \"drugProdname\": \"恩替卡韦口服溶液\",\n" +
" \"drugSpec\": \"1支/盒\",\n" +
" \"drugSumamt\": 27,\n" +
" \"drugTotlcnt\": \"1\",\n" +
" \"drugTotlcntEmp\": \"盒\",\n" +
" \"drugstdcode\": \"BWM99-03131\",\n" +
" \"extras\": {},\n" +
" \"fixmedinsHilistId\": \"\",\n" +
" \"hospApprFlag\": \"1\",\n" +
" \"hospPrepFlag\": \"0\",\n" +
" \"impDrugFlag\": \"0\",\n" +
" \"mainMedcFlag\": \"\",\n" +
" \"medListCodg\": \"XJ05AFE013X001010108569\",\n" +
" \"medcBegntime\": \"2022-04-08 10:10:00\",\n" +
" \"medcDays\": 0,\n" +
" \"medcEndtime\": \"2022-04-08 10:10:00\",\n" +
" \"medcWayCodg\": \"1\",\n" +
" \"medcWayDscr\": \"口服\",\n" +
" \"mednTypeCode\": \"0100\",\n" +
" \"mednTypeName\": \"抗生素类抗感染药物\",\n" +
" \"prdrName\": \"成都第一制药有限公司\",\n" +
" \"prodBarc\": \"111111111\",\n" +
" \"rxItemTypeCode\": \"11\",\n" +
" \"rxItemTypeName\": \"西药\",\n" +
" \"sinDoscnt\": 2,\n" +
" \"sinDosunt\": \"片\",\n" +
" \"tcmdrugTypeCode\": \"1\",\n" +
" \"tcmdrugTypeName\": \"\",\n" +
" \"tcmherbFoote\": \"\",\n" +
" \"urgtFlag\": \"\",\n" +
" \"usedFrquCodg\": \"13\",\n" +
" \"usedFrquName\": \"每天三次tid)\"\n" +
" }\n" +
" ]\n" +
"}");
SMUtil sMUtil = new SMUtil();
//加密
String encData = sMUtil.encrypt(JsonConvert.SerializeObject(data, Formatting.None), appId, appSecret);
Console.WriteLine("加密:" + encData);
JObject signDto = (JObject)JObject.Parse(JsonConvert.SerializeObject(requestData, Formatting.None));
signDto.Add("data", data);
//加签
String signData = sMUtil.sign(signDto, appSecret, privateKey);
Console.WriteLine("加签:" + signData);
//报文
requestData.Add("encData", encData);
requestData.Add("signData", signData);
Console.WriteLine("报文:" + JsonConvert.SerializeObject(requestData, Formatting.None));
//解密
String decData = sMUtil.decrypt(encData, appId, appSecret);
Console.WriteLine("解密:" + decData);
//验签
Boolean isVerify = sMUtil.verify(signDto, appSecret, publicKey, signData);
Console.WriteLine("验签:" + isVerify);
Console.ReadKey();
}
}
}