Parcourir la source

fix: 移动支付调整

zhengjie il y a 1 an
Parent
commit
1a58fa14d8
7 fichiers modifiés avec 657 ajouts et 190 suppressions
  1. 116 107
      Business/MobilePay.cs
  2. 446 4
      Common/SMCipher.cs
  3. 1 1
      HeFeiMI.csproj
  4. 29 17
      Helper/EncryptHelper.cs
  5. 40 8
      Helper/InvokeHelper.cs
  6. 23 49
      Helper/JsonHelper.cs
  7. 2 4
      InsuBusiness.cs

+ 116 - 107
Business/MobilePay.cs

@@ -47,40 +47,40 @@ namespace PTMedicalInsurance.Business
         }
         public int   MobilePaySettlement(out string outPar)
         {
-            string errMsg, patInfo, YH6201Inpar, YH6202Inpar;
-            //YH6201Rtn, YH6202Rtn,YH6301Inpar,YH6301Rtn;
+            string errMsg, patInfo, M6201Inpar, M6202Inpar;
+            //M6201Rtn, M6202Rtn,M6301Inpar,M6301Rtn;
             outPar = "";
             try
             {
 
-                EncryptHelper eh = new EncryptHelper();
+                //EncryptHelper eh = new EncryptHelper();
                 if (GetPatientInfo(out errMsg) != 0)
                 {
                     outPar = errMsg;
                     return -1;
                 }
                 patInfo = errMsg;
-                JObject jo1194Rtn = invoker.invokeCenterService("1194", JsonHelper.setCenterInpar("1194", patInfo));
+                JObject jo1194Rtn = invoker.invokeCenterService("1101", JsonHelper.setCenterInpar("1101", patInfo));
                 if (JsonHelper.parseCenterRtnValue(jo1194Rtn, out errMsg) != 0)
                 {
                     outPar = errMsg;
                     return -1;
                 }
                 setPatientInsuInfo(jo1194Rtn);
-                if (GetYH6201Inpar(out errMsg) != 0)
+                if (Get6201Inpar(out errMsg) != 0)
                 {
                     outPar = errMsg;
                     return -1;
                 }
                 Global.writeLog(errMsg);
-                YH6201Inpar = errMsg;
-                JObject joYH6201Rtn = invoker.invokeMPService("6201", eh.encrypt(errMsg));
-                if (JsonHelper.parseMPRtnValue(joYH6201Rtn, out errMsg) != 0)
+                M6201Inpar = errMsg;
+                JObject joM6201Rtn = invoker.invokeMPService("6201", errMsg);
+                if (JsonHelper.parseMPRtnValue(joM6201Rtn, out errMsg) != 0)
                 {
                     outPar = errMsg;
                     return -1;
                 }
-                JObject joEncData = JObject.Parse(eh.decrypt(errMsg));
+                JObject joEncData = JObject.Parse(errMsg);
                 Global.writeLog(JsonHelper.Compress(joEncData));
                 //设置
                 setPatientBy6201Rtn(joEncData);
@@ -90,20 +90,20 @@ namespace PTMedicalInsurance.Business
                     outPar = errMsg;
                     return -1;
                 }
-                //YH6202
-                if (GetYH6202Inpar(JObject.Parse(YH6201Inpar),  out errMsg) != 0)
+                //M6202
+                if (Get6202Inpar(JObject.Parse(M6201Inpar),  out errMsg) != 0)
                 {
                     outPar = errMsg;
                     return -1;
                 }
-                YH6202Inpar = errMsg;
-                JObject joYH6202Rtn = invoker.invokeMPService("6202", eh.encrypt(YH6202Inpar));
-                if (JsonHelper.parseMPRtnValue(joYH6202Rtn, out errMsg) != 0)
+                M6202Inpar = errMsg;
+                JObject joM6202Rtn = invoker.invokeMPService("6202", M6202Inpar);
+                if (JsonHelper.parseMPRtnValue(joM6202Rtn, out errMsg) != 0)
                 {
                     outPar = errMsg;
                     return -1;
                 }
-                joEncData = JObject.Parse(eh.decrypt(errMsg));
+                joEncData = JObject.Parse(errMsg);
                 Global.writeLog(JsonHelper.Compress(joEncData));
                 //设置
                 setSettlementsBy6202Rtn(joEncData);
@@ -115,14 +115,14 @@ namespace PTMedicalInsurance.Business
                     return -1;
                 }
                 //6301查询具体明细信息
-                //if (GetYH6301Inpar(out errMsg) != 0)
+                //if (Get6301Inpar(out errMsg) != 0)
                 //{
                 //    outPar = errMsg;
                 //    return -1;
                 //}
-                //YH6301Inpar = errMsg;
-                //JObject joYH6301Rtn = invoker.invokeMPService("6301", eh.encrypt(YH6301Inpar));
-                //if (JsonHelper.parseMPRtnValue(joYH6301Rtn, out errMsg) != 0)
+                //M6301Inpar = errMsg;
+                //JObject joM6301Rtn = invoker.invokeMPService("6301", eh.encrypt(M6301Inpar));
+                //if (JsonHelper.parseMPRtnValue(joM6301Rtn, out errMsg) != 0)
                 //{
                 //    outPar = errMsg;
                 //    return -1;
@@ -139,7 +139,7 @@ namespace PTMedicalInsurance.Business
                 //}
                 //返回给HIS后端 
                 JObject joPreSettl = JObject.Parse(JsonHelper.getDestValue(joEncData, "extData.preSetl"));
-                //JObject joTmp = JObject.Parse(JsonHelper.getDestValue(joYH6201Rtn, "encData"));
+                //JObject joTmp = JObject.Parse(JsonHelper.getDestValue(joM6201Rtn, "encData"));
                 JObject joTmp = new JObject();
                 joTmp.Add("insutype", MPat.insuType);
                 joTmp.Add("psn_no", MPat.psn_no);
@@ -168,26 +168,26 @@ namespace PTMedicalInsurance.Business
         }
         public int MobilePayConfirmSettlement(out string outPar)
         {
-            string errMsg,  YH6301Inpar, YH6301Rtn;
+            string errMsg,  M6301Inpar;
             outPar = "";
             try
             {
-                EncryptHelper eh = new EncryptHelper();
+                //EncryptHelper eh = new EncryptHelper();
                 //6301查询具体明细信息
-                if (GetYH6301Inpar(out errMsg) != 0)
+                if (Get6301Inpar(out errMsg) != 0)
                 {
                     outPar = errMsg;
                     return -1;
                 }
-                YH6301Inpar = errMsg;
-                JObject joYH6301Rtn = invoker.invokeMPService("6301", eh.encrypt(YH6301Inpar));
-                if (JsonHelper.parseMPRtnValue(joYH6301Rtn, out errMsg) != 0)
+                M6301Inpar = errMsg;
+                JObject joM6301Rtn = invoker.invokeMPService("6301",M6301Inpar);
+                if (JsonHelper.parseMPRtnValue(joM6301Rtn, out errMsg) != 0)
                 {
                     outPar = errMsg;
                     return -1;
                 }
-                JObject joEncData = JObject.Parse(eh.decrypt(errMsg));
-                JObject joSettlInfo = JObject.Parse(JsonHelper.getDestValue(joEncData, "extData.SETLINFO"));
+                JObject joEncData = JObject.Parse((errMsg));
+                JObject joSettlInfo = JObject.Parse(JsonHelper.getDestValue(joEncData, "output.data"));
                 Global.writeLog(JsonHelper.Compress(joEncData));
                 //设置
                 setSettlementsBy6301Rtn(joSettlInfo);
@@ -220,13 +220,13 @@ namespace PTMedicalInsurance.Business
             {
 
                 /**目前从微信那边处理退费
-                                if (GetYH6203Inpar(out errMsg) != 0)
+                                if (Get6203Inpar(out errMsg) != 0)
                                 {
 
                                 }
                                 YH6203Inpar = errMsg;
-                                JObject jo6203Rtn = invoker.invokeMPService("6203", YH6203Inpar);
-                                //YH6202
+                                JObject jo6203Rtn = invoker.invokeMPService("6203", M6203Inpar);
+                                //M6202
                                 if (ParseCenterRtnValue(jo6203Rtn, out errMsg) != 0)
                                 {
 
@@ -312,7 +312,7 @@ namespace PTMedicalInsurance.Business
         {
             MPat.insuplc_admdvs = JsonHelper.getDestValue(jo, "output.baseinfo.insuplc_admdvs");
             MPat.psn_no = JsonHelper.getDestValue(jo, "output.baseinfo.psn_no");
-            MPat.insuType = JsonHelper.getDestValue(jo, "output.baseinfo.insutype");
+            MPat.insuType = JsonHelper.getDestValue(jo, "output.insuinfo[0].insutype");
             Global.pat.insuplc_admdvs = MPat.insuplc_admdvs;
             Global.pat.psn_no = MPat.psn_no;
             Global.pat.insuType = MPat.insuType;
@@ -329,7 +329,7 @@ namespace PTMedicalInsurance.Business
         public void setSettlementsBy6202Rtn(JObject jo)
         {
             MSettl.settlID = JsonHelper.getDestValue(jo, "payOrdId");
-            MPat.payOrdId = JsonHelper.getDestValue(jo, "payOrdId");
+            MPat.payOrdId = MSettl.settlID;
             MSettl.ordStas = JsonHelper.getDestValue(jo, "ordStas");
             MSettl.sumamt = getDecimalFee(jo, "feeSumamt");
             MSettl.personCashPay = getDecimalFee(jo, "ownPayAmt");
@@ -361,45 +361,47 @@ namespace PTMedicalInsurance.Business
         public void setSettlementsBy6301Rtn(JObject jo)
         {
             //MPat.settlID = JsonHelper.getDestValue(jo, "setl_id");
-            MPat.psn_no = JsonHelper.getDestValue(jo, "psn_no");
-            MPat.naty = JsonHelper.getDestValue(jo, "naty");
+            //MPat.psn_no = JsonHelper.getDestValue(jo, "psn_no");
+            //MPat.naty = JsonHelper.getDestValue(jo, "naty");
             //MPat.name = JsonHelper.getDestValue(jo, "name");
-            MPat.age = JsonHelper.getDestValue(jo, "age");
-            MPat.gend = JsonHelper.getDestValue(jo, "gend");
-            MPat.certNO = JsonHelper.getDestValue(jo, "certno");
-            MPat.brdy = JsonHelper.getDestValue(jo, "brdy");
-            MPat.insuType = JsonHelper.getDestValue(jo, "insutype");
-            MPat.psn_type = JsonHelper.getDestValue(jo, "psn_type");
-            MPat.mdtrtcertType = JsonHelper.getDestValue(jo, "mdtrt_cert_type");
-            MPat.medType = JsonHelper.getDestValue(jo, "med_type");
+            //MPat.age = JsonHelper.getDestValue(jo, "age");
+            //MPat.gend = JsonHelper.getDestValue(jo, "gend");
+            //MPat.certNO = JsonHelper.getDestValue(jo, "certno");
+            //MPat.brdy = JsonHelper.getDestValue(jo, "brdy");
+            //MPat.insuType = JsonHelper.getDestValue(jo, "insutype");
+            //MPat.psn_type = JsonHelper.getDestValue(jo, "psn_type");
+            //MPat.mdtrtcertType = JsonHelper.getDestValue(jo, "mdtrt_cert_type");
+            //MPat.medType = JsonHelper.getDestValue(jo, "med_type");
             //MPat.insuplc_admdvs = JsonHelper.getDestValue(jo, "insuplc_admdvs");
-            //MPat.payOrdId = JsonHelper.getDestValue(jo, "payOrdId");
+
+            MPat.payOrdId = JsonHelper.getDestValue(jo, "payOrdId");
             MSettl.ordStas = JsonHelper.getDestValue(jo, "ordStas");
-            MSettl.sumamt = getDecimalFee(jo, "medfee_sumamt");
-            MSettl.personCashPay = getDecimalFee(jo, "psn_cash_pay");
-            MSettl.accountPaySumamt = getDecimalFee(jo, "acct_pay");
-            MSettl.fundPaySumamt = getDecimalFee(jo, "fund_pay_sumamt");
+            MSettl.sumamt = getDecimalFee(jo, "feeSumamt");
+            MSettl.personCashPay = getDecimalFee(jo, "ownPayAmt");
+            MSettl.accountPaySumamt = getDecimalFee(jo, "psnAcctPay");
+            MSettl.fundPaySumamt = getDecimalFee(jo, "fundPay");
+
             //MSettl.deposit = getDecimalFee(jo, "deposit");
-            MSettl.clearingOrgan = JsonHelper.getDestValue(jo, "clr_optins");
-            MSettl.clearingType = JsonHelper.getDestValue(jo, "clr_type");
-            MSettl.clearingWay = JsonHelper.getDestValue(jo, "clr_way");
-            MSettl.civilserviceAllowancePay = getDecimalFee(jo, "cvlserv_pay");
-            MSettl.ownPayAmount = getDecimalFee(jo, "fulamt_ownpay_amt");
-            MSettl.overLimitAmountmt = getDecimalFee(jo, "overlmt_selfpay");
-            MSettl.preSelfPayAmount = getDecimalFee(jo, "preselfpay_amt");
-            MSettl.inPolicyRangeAmount = getDecimalFee(jo, "inscp_scp_amt");
-            MSettl.actualPayDeductible = getDecimalFee(jo, "act_pay_dedc");
-            MSettl.healthInsurancePay = getDecimalFee(jo, "hifp_pay");
-            MSettl.healthInsuranceRatio = getDecimalFee(jo, "pool_prop_selfpay");
-            MSettl.enterpriseSupplementPay = getDecimalFee(jo, "hifes_pay");
-            MSettl.seriousIllnessPay = getDecimalFee(jo, "hifmi_pay");
-            MSettl.largeExpensesSupplementPay = getDecimalFee(jo, "hifob_pay");
-            MSettl.medicalAssistPay = getDecimalFee(jo, "maf_pay");
-            MSettl.hospitalPartAmount = getDecimalFee(jo, "hosp_part_amt");
-            MSettl.otherPay = getDecimalFee(jo, "oth_pay");
-            MSettl.personPaySumamt = getDecimalFee(jo, "psn_part_amt");
-            MSettl.balance = getDecimalFee(jo, "balc");
-            MSettl.accountMutualAidAmount = getDecimalFee(jo, "acct_mulaid_pay");
+            //MSettl.clearingOrgan = JsonHelper.getDestValue(jo, "clr_optins");
+            //MSettl.clearingType = JsonHelper.getDestValue(jo, "clr_type");
+            //MSettl.clearingWay = JsonHelper.getDestValue(jo, "clr_way");
+            //MSettl.civilserviceAllowancePay = getDecimalFee(jo, "cvlserv_pay");
+            //MSettl.ownPayAmount = getDecimalFee(jo, "fulamt_ownpay_amt");
+            //MSettl.overLimitAmountmt = getDecimalFee(jo, "overlmt_selfpay");
+            //MSettl.preSelfPayAmount = getDecimalFee(jo, "preselfpay_amt");
+            //MSettl.inPolicyRangeAmount = getDecimalFee(jo, "inscp_scp_amt");
+            //MSettl.actualPayDeductible = getDecimalFee(jo, "act_pay_dedc");
+            //MSettl.healthInsurancePay = getDecimalFee(jo, "hifp_pay");
+            //MSettl.healthInsuranceRatio = getDecimalFee(jo, "pool_prop_selfpay");
+            //MSettl.enterpriseSupplementPay = getDecimalFee(jo, "hifes_pay");
+            //MSettl.seriousIllnessPay = getDecimalFee(jo, "hifmi_pay");
+            //MSettl.largeExpensesSupplementPay = getDecimalFee(jo, "hifob_pay");
+            //MSettl.medicalAssistPay = getDecimalFee(jo, "maf_pay");
+            //MSettl.hospitalPartAmount = getDecimalFee(jo, "hosp_part_amt");
+            //MSettl.otherPay = getDecimalFee(jo, "oth_pay");
+            //MSettl.personPaySumamt = getDecimalFee(jo, "psn_part_amt");
+            //MSettl.balance = getDecimalFee(jo, "balc");
+            //MSettl.accountMutualAidAmount = getDecimalFee(jo, "acct_mulaid_pay");
         }
 
         public void setSettlementsByInPar()
@@ -428,7 +430,7 @@ namespace PTMedicalInsurance.Business
                 joInpar.Add("mdtrt_cert_type", "02");//就诊凭证类型
                 joInpar.Add("mdtrt_cert_no", MPat.certNO);//就诊凭证编号
                 joInpar.Add("card_sn", "");//卡识别码
-                joInpar.Add("begntime", "");//开始时间  获取历史参保信息时传入
+                joInpar.Add("begntime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//开始时间  获取历史参保信息时传入
                 joInpar.Add("psn_cert_type", "01");//就诊凭证类型为“ 02” 时默认传 01 代表身份 证,其他证件类型按实际上传
                 joInpar.Add("certno", MPat.certNO);//证件号码
                 joInpar.Add("psn_name", MPat.name);//姓名
@@ -448,8 +450,8 @@ namespace PTMedicalInsurance.Business
             }
         }
 
-        //组织YH6201入参
-        public int GetYH6201Inpar(out string outparam)
+        //组织M6201入参
+        public int Get6201Inpar(out string outparam)
         {
             string errMsg = "";
             outparam = "";
@@ -528,7 +530,7 @@ namespace PTMedicalInsurance.Business
                 //joInpar.Add("initRxOrd", JsonHelper.getDestValue(joInsuAdmObj, "initRxOrd"));//要续方的原处方流水 前端传入
                 //joInpar.Add("rxCircFlag", JsonHelper.getDestValue(joInsuAdmObj, "rxCircFlag"));//电子处方流转标志 前端传入
                 MSettl.settlTime = Convert.ToDateTime(JsonHelper.getDestValue(joMdtrtinfo, "begntime"));
-                //joInpar.Add("begntime", JsonHelper.getDestValue(joMdtrtinfo, "begntime"));//开始时间
+                joInpar.Add("begntime", JsonHelper.getDestValue(joMdtrtinfo, "begntime"));//开始时间
                 joInpar.Add("idNo", JsonHelper.getDestValue(joPatBaseInfo, "credNo"));//证件号码
                 joInpar.Add("userName", JsonHelper.getDestValue(joPatBaseInfo, "patName"));//用户姓名
                 joInpar.Add("idType", JsonHelper.getDestValue(joPatBaseInfo, "credCode"));//证件类别
@@ -544,11 +546,11 @@ namespace PTMedicalInsurance.Business
                 joInpar.Add("medType", MPat.medType);//医疗类别 前端传入
                 joInpar.Add("feeType", JsonHelper.getDestValue(joInsuAdmObj, "feeType"));//费用类型 前端传入
                 joInpar.Add("medfeeSumamt", JsonHelper.getDestValue(joFee, "medfeeSumamt"));//医疗费总额
-                //joInpar.Add("acctUsedFlag", JsonHelper.getDestValue(joInsuAdmObj, "acctUsedFlag"));//个人账户使用标志 前端传入
-                //joInpar.Add("mainCondDscr", JsonHelper.getDestValue(joMdtrtinfo, "mainCondDscr"));//主要病情描述
-                //joInpar.Add("diseCodg", JsonHelper.getDestValue(joMdtrtinfo, "diseCodg"));//病种编码
-                //joInpar.Add("diseName", JsonHelper.getDestValue(joMdtrtinfo, "diseName"));//病种名称
-                //joInpar.Add("psnSetlway", JsonHelper.getDestValue(joInsuAdmObj, "psnSetlway"));//个人结算方式 前端传入
+                joInpar.Add("acctUsedFlag", JsonHelper.getDestValue(joInsuAdmObj, "acctUsedFlag"));//个人账户使用标志 前端传入
+                joInpar.Add("mainCondDscr", JsonHelper.getDestValue(joMdtrtinfo, "mainCondDscr"));//主要病情描述
+                joInpar.Add("diseCodg", JsonHelper.getDestValue(joMdtrtinfo, "diseCodg"));//病种编码
+                joInpar.Add("diseName", JsonHelper.getDestValue(joMdtrtinfo, "diseName"));//病种名称
+                joInpar.Add("psnSetlway", JsonHelper.getDestValue(joInsuAdmObj, "psnSetlway"));//个人结算方式 前端传入
                 joInpar.Add("chrgBchno", JsonHelper.getDestValue(joFee, "chrgBchno"));//收费批次号
                 //joInpar.Add("pubHospRfomFlag", JsonHelper.getDestValue(joInsuAdmObj, "pubHospRfomFlag"));//公立医院改革标志
                 //joInpar.Add("invono", JsonHelper.getDestValue(joMdtrtinfo, "invono"));//发票号
@@ -573,8 +575,8 @@ namespace PTMedicalInsurance.Business
                 //joInpar.Add("dscgDed", JsonHelper.getDestValue(joMdtrtinfo, "dscgDed"));//出院床位
                 //joInpar.Add("dscgWay", JsonHelper.getDestValue(joMdtrtinfo, "dscgWay"));//离院方式
                 //joInpar.Add("dieDate", JsonHelper.getDestValue(joMdtrtinfo, "dieDate"));//死亡日期
-                //joInpar.Add("matnType", JsonHelper.getDestValue(joMdtrtinfo, "matnType"));//生育类别
-                //joInpar.Add("expContent", JsonHelper.getDestValue(joInsuAdmObj, "expContent"));//扩展参数 前端传入
+                joInpar.Add("matnType", JsonHelper.getDestValue(joMdtrtinfo, "matnType"));//生育类别
+                joInpar.Add("extData", JsonHelper.getDestValue(joInsuAdmObj, "expContent"));//扩展参数 前端传入
                 //joInpar.Add("midSetlFlag", JsonHelper.getDestValue(joInsuAdmObj, "midSetlFlag"));//中途结算标志 前端传入
                 joInpar.Add("diseinfoList", jaDiseinfoList);//诊断或症状明细
                 joInpar.Add("feedetailList", jaFeedetailList);//费用明细
@@ -589,23 +591,23 @@ namespace PTMedicalInsurance.Business
 
                 JObject joData = new JObject();
                 joData.Add("data",joInpar);
-                outparam = joInpar.ToString();
+                outparam = joData.ToString();
                 return 0;
             }
             catch (Exception ex)
             {
 
-                outparam = "GetYH6201Inpar:" + ex.Message;
+                outparam = "Get6201Inpar:" + ex.Message;
                 return -1;
             }
             finally
             {
-                Global.writeLog("GetYH6201Inpar","",outparam);
+                Global.writeLog("Get6201Inpar","",outparam);
             }
         }
 
         //获取入参,入参基本为类局部变量
-        public int GetYH6202Inpar(JObject joYH6201Inpar,  out string outparam)
+        public int Get6202Inpar(JObject joM6201Inpar,  out string outparam)
         {
             outparam = "";
             try
@@ -621,29 +623,29 @@ namespace PTMedicalInsurance.Business
                 joInpar.Add("ecChnlAppId", "");
                 joInpar.Add("ecChnlUserId", "");
                 joInpar.Add("mdtrtId", MPat.mdtrtID);
-                joInpar.Add("chrgBchno", JsonHelper.getDestValue(joYH6201Inpar, "chrgBchno"));//收费批次号 
-                joInpar.Add("feeType", JsonHelper.getDestValue(joYH6201Inpar, "feeType"));//费用类别
+                joInpar.Add("chrgBchno", JsonHelper.getDestValue(joM6201Inpar, "chrgBchno"));//收费批次号 
+                //joInpar.Add("feeType", JsonHelper.getDestValue(joM6201Inpar, "feeType"));//费用类别
                 //joInpar.Add("deposit", JsonHelper.getDestValue(joInsuAdmObj, "deposit"));//住院押金
-                joInpar.Add("expContent", "");//扩展数据
+                joInpar.Add("expData", "");//扩展数据
                 //joInpar.Add("acctUsedFlag", "");//个账使用标识
-                //JObject joData = new JObject();
-                //joData.Add("data",joInpar);
-                outparam = joInpar.ToString();
+                JObject joData = new JObject();
+                joData.Add("data", joInpar);
+                outparam = joData.ToString();
                 return 0;
             }
             catch (Exception ex)
             {
-                outparam = "GetYH6202Inpar:" + ex.Message;
+                outparam = "Get6202Inpar:" + ex.Message;
                 return -1;
             }
             finally
             {
-                Global.writeLog("GetYH6202Inpar", "", outparam);
+                Global.writeLog("Get6202Inpar", "", outparam);
             }
         }
 
-        //组织YH6203入参
-        public int GetYH6203Inpar(out string outparam)
+        //组织M6203入参
+        public int Get6203Inpar(out string outparam)
         {
             string errMsg = "";
             outparam = "";
@@ -669,26 +671,28 @@ namespace PTMedicalInsurance.Business
                 joInpar.Add("cashRefdAmt", JsonHelper.getDestValue(joInsuAdmObj, "PersonCashPay"));//现金退费金额
                 joInpar.Add("ecToken", MPat.token);//电子凭证授权Token  前端传入
                 joInpar.Add("refdType", "ALL");//退费类型  前端传入
-                joInpar.Add("expContent", "");//扩展数据  前端传入
+                joInpar.Add("expData", "");//扩展数据  前端传入
                 joInpar.Add("payAuthNo", MPat.payAuthNo);//支付授权码  前端传入
 
-                outparam = joInpar.ToString();
+                JObject joData = new JObject();
+                joData.Add("data", joInpar);
+                outparam = joData.ToString();
                 return 0;
             }
             catch (Exception ex)
             {
 
-                outparam = "GetYH6203Inpar:" + ex.Message;
+                outparam = "Get6203Inpar:" + ex.Message;
                 return -1;
             }
             finally
             {
-                Global.writeLog("GetYH6203Inpar", "", outparam);
+                Global.writeLog("Get6203Inpar", "", outparam);
             }
         }
 
         //获取入参,入参基本为类局部变量
-        public int GetYH6301Inpar(out string outparam)
+        public int Get6301Inpar(out string outparam)
         {
             outparam = "";
             try
@@ -709,22 +713,25 @@ namespace PTMedicalInsurance.Business
                 joInpar.Add("idNo", MPat.IDNO);//业务流水号 前端传入
                 joInpar.Add("userName", MPat.name);
                 joInpar.Add("idType", "01");
-                joInpar.Add("expContent", "");
-                outparam = joInpar.ToString();
+                joInpar.Add("expData", "");
+
+                JObject joData = new JObject();
+                joData.Add("data", joInpar);
+                outparam = joData.ToString();
                 return 0;
             }
             catch (Exception ex)
             {
-                outparam = "GetYH6301Inpar:" + ex.Message;
+                outparam = "Get6301Inpar:" + ex.Message;
                 return -1;
             }
             finally
             {
-                Global.writeLog("GetYH6301Inpar", "", outparam);
+                Global.writeLog("Get6301Inpar", "", outparam);
             }
         }
 
-        public int GetYH6401Inpar(out string outparam)
+        public int Get6401Inpar(out string outparam)
         {
             string errMsg = "";
             outparam = "";
@@ -750,21 +757,23 @@ namespace PTMedicalInsurance.Business
                 joInpar.Add("cashRefdAmt", JsonHelper.getDestValue(joInsuAdmObj, "PersonCashPay"));//现金退费金额
                 joInpar.Add("ecToken", MPat.token);//电子凭证授权Token  前端传入
                 joInpar.Add("refdType", "ALL");//退费类型  前端传入
-                joInpar.Add("expContent", "");//扩展数据  前端传入
+                joInpar.Add("expData", "");//扩展数据  前端传入
                 joInpar.Add("payAuthNo", MPat.payAuthNo);//支付授权码  前端传入
 
-                outparam = joInpar.ToString();
+                JObject joData = new JObject();
+                joData.Add("data", joInpar);
+                outparam = joData.ToString();
                 return 0;
             }
             catch (Exception ex)
             {
 
-                outparam = "GetYH6203Inpar:" + ex.Message;
+                outparam = "Get6203Inpar:" + ex.Message;
                 return -1;
             }
             finally
             {
-                Global.writeLog("GetYH6203Inpar", "", outparam);
+                Global.writeLog("Get6203Inpar", "", outparam);
             }
         }
        

+ 446 - 4
Common/SMCipher.cs

@@ -372,7 +372,7 @@ namespace AnHuiMI.Common
                 return null;
             }
 
-            String data = Encoding.Default.GetString(Hex.Encode(encryptedData));
+            string data = Encoding.Default.GetString(Hex.Encode(encryptedData));
 
             byte[] c1Bytes = Hex.Decode(Encoding.Default.GetBytes(data.Substring(0, 130)));
             int c2Len = encryptedData.Length - 97;
@@ -445,13 +445,455 @@ namespace AnHuiMI.Common
             byte[] c3 = new byte[32];
             cipher.Dofinal(c3);
 
-            String sc1 = Encoding.Default.GetString(Hex.Encode(c1.GetEncoded()));
-            String sc2 = Encoding.Default.GetString(Hex.Encode(source));
-            String sc3 = Encoding.Default.GetString(Hex.Encode(c3));
+            string sc1 = Encoding.Default.GetString(Hex.Encode(c1.GetEncoded()));
+            string sc2 = Encoding.Default.GetString(Hex.Encode(source));
+            string sc3 = Encoding.Default.GetString(Hex.Encode(c3));
 
             return (sc1 + sc2 + sc3).ToUpper();
         }
         #endregion
 
     }
+
+    class SM4
+    {
+        public const int SM4_ENCRYPT = 1;
+        public const int SM4_DECRYPT = 0;
+
+        private long GET_ULONG_BE(byte[] b, int i)
+        {
+            long n = (long)(b[i] & 0xff) << 24 | (long)((b[i + 1] & 0xff) << 16) | (long)((b[i + 2] & 0xff) << 8) | (long)(b[i + 3] & 0xff) & 0xffffffffL;
+            return n;
+        }
+
+        private void PUT_ULONG_BE(long n, byte[] b, int i)
+        {
+            b[i] = (byte)(int)(0xFF & n >> 24);
+            b[i + 1] = (byte)(int)(0xFF & n >> 16);
+            b[i + 2] = (byte)(int)(0xFF & n >> 8);
+            b[i + 3] = (byte)(int)(0xFF & n);
+        }
+
+        private long SHL(long x, int n)
+        {
+            return (x & 0xFFFFFFFF) << n;
+        }
+
+        private long ROTL(long x, int n)
+        {
+            return SHL(x, n) | x >> (32 - n);
+        }
+
+        private void SWAP(long[] sk, int i)
+        {
+            long t = sk[i];
+            sk[i] = sk[(31 - i)];
+            sk[(31 - i)] = t;
+        }
+
+        public byte[] SboxTable = new byte[] { (byte) 0xd6, (byte) 0x90, (byte) 0xe9, (byte) 0xfe,
+            (byte) 0xcc, (byte) 0xe1, 0x3d, (byte) 0xb7, 0x16, (byte) 0xb6,
+            0x14, (byte) 0xc2, 0x28, (byte) 0xfb, 0x2c, 0x05, 0x2b, 0x67,
+            (byte) 0x9a, 0x76, 0x2a, (byte) 0xbe, 0x04, (byte) 0xc3,
+            (byte) 0xaa, 0x44, 0x13, 0x26, 0x49, (byte) 0x86, 0x06,
+            (byte) 0x99, (byte) 0x9c, 0x42, 0x50, (byte) 0xf4, (byte) 0x91,
+            (byte) 0xef, (byte) 0x98, 0x7a, 0x33, 0x54, 0x0b, 0x43,
+            (byte) 0xed, (byte) 0xcf, (byte) 0xac, 0x62, (byte) 0xe4,
+            (byte) 0xb3, 0x1c, (byte) 0xa9, (byte) 0xc9, 0x08, (byte) 0xe8,
+            (byte) 0x95, (byte) 0x80, (byte) 0xdf, (byte) 0x94, (byte) 0xfa,
+            0x75, (byte) 0x8f, 0x3f, (byte) 0xa6, 0x47, 0x07, (byte) 0xa7,
+            (byte) 0xfc, (byte) 0xf3, 0x73, 0x17, (byte) 0xba, (byte) 0x83,
+            0x59, 0x3c, 0x19, (byte) 0xe6, (byte) 0x85, 0x4f, (byte) 0xa8,
+            0x68, 0x6b, (byte) 0x81, (byte) 0xb2, 0x71, 0x64, (byte) 0xda,
+            (byte) 0x8b, (byte) 0xf8, (byte) 0xeb, 0x0f, 0x4b, 0x70, 0x56,
+            (byte) 0x9d, 0x35, 0x1e, 0x24, 0x0e, 0x5e, 0x63, 0x58, (byte) 0xd1,
+            (byte) 0xa2, 0x25, 0x22, 0x7c, 0x3b, 0x01, 0x21, 0x78, (byte) 0x87,
+            (byte) 0xd4, 0x00, 0x46, 0x57, (byte) 0x9f, (byte) 0xd3, 0x27,
+            0x52, 0x4c, 0x36, 0x02, (byte) 0xe7, (byte) 0xa0, (byte) 0xc4,
+            (byte) 0xc8, (byte) 0x9e, (byte) 0xea, (byte) 0xbf, (byte) 0x8a,
+            (byte) 0xd2, 0x40, (byte) 0xc7, 0x38, (byte) 0xb5, (byte) 0xa3,
+            (byte) 0xf7, (byte) 0xf2, (byte) 0xce, (byte) 0xf9, 0x61, 0x15,
+            (byte) 0xa1, (byte) 0xe0, (byte) 0xae, 0x5d, (byte) 0xa4,
+            (byte) 0x9b, 0x34, 0x1a, 0x55, (byte) 0xad, (byte) 0x93, 0x32,
+            0x30, (byte) 0xf5, (byte) 0x8c, (byte) 0xb1, (byte) 0xe3, 0x1d,
+            (byte) 0xf6, (byte) 0xe2, 0x2e, (byte) 0x82, 0x66, (byte) 0xca,
+            0x60, (byte) 0xc0, 0x29, 0x23, (byte) 0xab, 0x0d, 0x53, 0x4e, 0x6f,
+            (byte) 0xd5, (byte) 0xdb, 0x37, 0x45, (byte) 0xde, (byte) 0xfd,
+            (byte) 0x8e, 0x2f, 0x03, (byte) 0xff, 0x6a, 0x72, 0x6d, 0x6c, 0x5b,
+            0x51, (byte) 0x8d, 0x1b, (byte) 0xaf, (byte) 0x92, (byte) 0xbb,
+            (byte) 0xdd, (byte) 0xbc, 0x7f, 0x11, (byte) 0xd9, 0x5c, 0x41,
+            0x1f, 0x10, 0x5a, (byte) 0xd8, 0x0a, (byte) 0xc1, 0x31,
+            (byte) 0x88, (byte) 0xa5, (byte) 0xcd, 0x7b, (byte) 0xbd, 0x2d,
+            0x74, (byte) 0xd0, 0x12, (byte) 0xb8, (byte) 0xe5, (byte) 0xb4,
+            (byte) 0xb0, (byte) 0x89, 0x69, (byte) 0x97, 0x4a, 0x0c,
+            (byte) 0x96, 0x77, 0x7e, 0x65, (byte) 0xb9, (byte) 0xf1, 0x09,
+            (byte) 0xc5, 0x6e, (byte) 0xc6, (byte) 0x84, 0x18, (byte) 0xf0,
+            0x7d, (byte) 0xec, 0x3a, (byte) 0xdc, 0x4d, 0x20, 0x79,
+            (byte) 0xee, 0x5f, 0x3e, (byte) 0xd7, (byte) 0xcb, 0x39, 0x48 };
+
+        public uint[] FK = { 0xa3b1bac6, 0x56aa3350, 0x677d9197, 0xb27022dc };
+
+        public uint[] CK = { 0x00070e15,0x1c232a31,0x383f464d,0x545b6269,
+                                        0x70777e85,0x8c939aa1,0xa8afb6bd,0xc4cbd2d9,
+                                        0xe0e7eef5,0xfc030a11,0x181f262d,0x343b4249,
+                                        0x50575e65,0x6c737a81,0x888f969d,0xa4abb2b9,
+                                        0xc0c7ced5,0xdce3eaf1,0xf8ff060d,0x141b2229,
+                                        0x30373e45,0x4c535a61,0x686f767d,0x848b9299,
+                                        0xa0a7aeb5,0xbcc3cad1,0xd8dfe6ed,0xf4fb0209,
+                                        0x10171e25,0x2c333a41,0x484f565d,0x646b7279 };
+
+        private byte sm4Sbox(byte inch)
+        {
+            int i = inch & 0xFF;
+            byte retVal = SboxTable[i];
+            return retVal;
+        }
+
+        private long sm4Lt(long ka)
+        {
+            long bb = 0L;
+            long c = 0L;
+            byte[] a = new byte[4];
+            byte[] b = new byte[4];
+            PUT_ULONG_BE(ka, a, 0);
+            b[0] = sm4Sbox(a[0]);
+            b[1] = sm4Sbox(a[1]);
+            b[2] = sm4Sbox(a[2]);
+            b[3] = sm4Sbox(a[3]);
+            bb = GET_ULONG_BE(b, 0);
+            c = bb ^ ROTL(bb, 2) ^ ROTL(bb, 10) ^ ROTL(bb, 18) ^ ROTL(bb, 24);
+            return c;
+        }
+
+        private long sm4F(long x0, long x1, long x2, long x3, long rk)
+        {
+            return x0 ^ sm4Lt(x1 ^ x2 ^ x3 ^ rk);
+        }
+
+        private long sm4CalciRK(long ka)
+        {
+            long bb = 0L;
+            long rk = 0L;
+            byte[] a = new byte[4];
+            byte[] b = new byte[4];
+            PUT_ULONG_BE(ka, a, 0);
+            b[0] = sm4Sbox(a[0]);
+            b[1] = sm4Sbox(a[1]);
+            b[2] = sm4Sbox(a[2]);
+            b[3] = sm4Sbox(a[3]);
+            bb = GET_ULONG_BE(b, 0);
+            rk = bb ^ ROTL(bb, 13) ^ ROTL(bb, 23);
+            return rk;
+        }
+
+        private void sm4_setkey(long[] SK, byte[] key)
+        {
+            long[] MK = new long[4];
+            long[] k = new long[36];
+            int i = 0;
+            MK[0] = GET_ULONG_BE(key, 0);
+            MK[1] = GET_ULONG_BE(key, 4);
+            MK[2] = GET_ULONG_BE(key, 8);
+            MK[3] = GET_ULONG_BE(key, 12);
+            k[0] = MK[0] ^ (long)FK[0];
+            k[1] = MK[1] ^ (long)FK[1];
+            k[2] = MK[2] ^ (long)FK[2];
+            k[3] = MK[3] ^ (long)FK[3];
+            for (; i < 32; i++)
+            {
+                k[(i + 4)] = (k[i] ^ sm4CalciRK(k[(i + 1)] ^ k[(i + 2)] ^ k[(i + 3)] ^ (long)CK[i]));
+                SK[i] = k[(i + 4)];
+            }
+        }
+
+        private void sm4_one_round(long[] sk, byte[] input, byte[] output)
+        {
+            int i = 0;
+            long[] ulbuf = new long[36];
+            ulbuf[0] = GET_ULONG_BE(input, 0);
+            ulbuf[1] = GET_ULONG_BE(input, 4);
+            ulbuf[2] = GET_ULONG_BE(input, 8);
+            ulbuf[3] = GET_ULONG_BE(input, 12);
+            while (i < 32)
+            {
+                ulbuf[(i + 4)] = sm4F(ulbuf[i], ulbuf[(i + 1)], ulbuf[(i + 2)], ulbuf[(i + 3)], sk[i]);
+                i++;
+            }
+            PUT_ULONG_BE(ulbuf[35], output, 0);
+            PUT_ULONG_BE(ulbuf[34], output, 4);
+            PUT_ULONG_BE(ulbuf[33], output, 8);
+            PUT_ULONG_BE(ulbuf[32], output, 12);
+        }
+
+        private byte[] padding(byte[] input, int mode)
+        {
+            if (input == null)
+            {
+                return null;
+            }
+
+            byte[] ret = (byte[])null;
+            if (mode == SM4_ENCRYPT)
+            {
+                int p = 16 - input.Length % 16;
+                ret = new byte[input.Length + p];
+                Array.Copy(input, 0, ret, 0, input.Length);
+                for (int i = 0; i < p; i++)
+                {
+                    ret[input.Length + i] = (byte)p;
+                }
+            }
+            else
+            {
+                int p = input[input.Length - 1];
+                ret = new byte[input.Length - p];
+                Array.Copy(input, 0, ret, 0, input.Length - p);
+            }
+            return ret;
+        }
+
+        public void sm4_setkey_enc(SM4_Context ctx, byte[] key)
+        {
+            ctx.mode = SM4_ENCRYPT;
+            sm4_setkey(ctx.sk, key);
+        }
+
+        public void sm4_setkey_dec(SM4_Context ctx, byte[] key)
+        {
+            int i = 0;
+            ctx.mode = SM4_DECRYPT;
+            sm4_setkey(ctx.sk, key);
+            for (i = 0; i < 16; i++)
+            {
+                SWAP(ctx.sk, i);
+            }
+        }
+
+        public byte[] sm4_crypt_ecb(SM4_Context ctx, byte[] input)
+        {
+            if ((ctx.isPadding) && (ctx.mode == SM4_ENCRYPT))
+            {
+                input = padding(input, SM4_ENCRYPT);
+            }
+
+            int length = input.Length;
+            byte[] bins = new byte[length];
+            Array.Copy(input, 0, bins, 0, length);
+            byte[] bous = new byte[length];
+            for (int i = 0; length > 0; length -= 16, i++)
+            {
+                byte[] inBytes = new byte[16];
+                byte[] outBytes = new byte[16];
+                Array.Copy(bins, i * 16, inBytes, 0, length > 16 ? 16 : length);
+                sm4_one_round(ctx.sk, inBytes, outBytes);
+                Array.Copy(outBytes, 0, bous, i * 16, length > 16 ? 16 : length);
+            }
+
+            if (ctx.isPadding && ctx.mode == SM4_DECRYPT)
+            {
+                bous = padding(bous, SM4_DECRYPT);
+            }
+            return bous;
+        }
+
+        public byte[] sm4_crypt_cbc(SM4_Context ctx, byte[] iv, byte[] input)
+        {
+            if (ctx.isPadding && ctx.mode == SM4_ENCRYPT)
+            {
+                input = padding(input, SM4_ENCRYPT);
+            }
+
+            int i = 0;
+            int length = input.Length;
+            byte[] bins = new byte[length];
+            Array.Copy(input, 0, bins, 0, length);
+            byte[] bous = null;
+            List<byte> bousList = new List<byte>();
+            if (ctx.mode == SM4_ENCRYPT)
+            {
+                for (int j = 0; length > 0; length -= 16, j++)
+                {
+                    byte[] inBytes = new byte[16];
+                    byte[] outBytes = new byte[16];
+                    byte[] out1 = new byte[16];
+
+                    Array.Copy(bins, i * 16, inBytes, 0, length > 16 ? 16 : length);
+                    for (i = 0; i < 16; i++)
+                    {
+                        outBytes[i] = ((byte)(inBytes[i] ^ iv[i]));
+                    }
+                    sm4_one_round(ctx.sk, outBytes, out1);
+                    Array.Copy(out1, 0, iv, 0, 16);
+                    for (int k = 0; k < 16; k++)
+                    {
+                        bousList.Add(out1[k]);
+                    }
+                }
+            }
+            else
+            {
+                byte[] temp = new byte[16];
+                for (int j = 0; length > 0; length -= 16, j++)
+                {
+                    byte[] inBytes = new byte[16];
+                    byte[] outBytes = new byte[16];
+                    byte[] out1 = new byte[16];
+
+                    Array.Copy(bins, i * 16, inBytes, 0, length > 16 ? 16 : length);
+                    Array.Copy(inBytes, 0, temp, 0, 16);
+                    sm4_one_round(ctx.sk, inBytes, outBytes);
+                    for (i = 0; i < 16; i++)
+                    {
+                        out1[i] = ((byte)(outBytes[i] ^ iv[i]));
+                    }
+                    Array.Copy(temp, 0, iv, 0, 16);
+                    for (int k = 0; k < 16; k++)
+                    {
+                        bousList.Add(out1[k]);
+                    }
+                }
+
+            }
+
+            if (ctx.isPadding && ctx.mode == SM4_DECRYPT)
+            {
+                bous = padding(bousList.ToArray(), SM4_DECRYPT);
+                return bous;
+            }
+            else
+            {
+                return bousList.ToArray();
+            }
+        }
+    }
+
+    class SM4_Context
+    {
+        public int mode;
+
+        public long[] sk;
+
+        public bool isPadding;
+
+        public SM4_Context()
+        {
+            this.mode = 1;
+            this.isPadding = true;
+            this.sk = new long[32];
+        }
+    }
+
+    class SM4Utils
+    {
+        public string secretKey = "";
+        public string iv = "";
+        public bool hexstring = false;
+
+        public string Encrypt_ECB(string plainText,string key)
+        {
+            this.secretKey = key;
+            return Encrypt_ECB(plainText);
+        }
+        public string Encrypt_ECB(string plainText)
+        {
+            SM4_Context ctx = new SM4_Context();
+            ctx.isPadding = true;
+            ctx.mode = SM4.SM4_ENCRYPT;
+
+            byte[] keyBytes;
+            if (hexstring)
+            {
+                keyBytes = Hex.Decode(secretKey);
+            }
+            else
+            {
+                keyBytes = Encoding.Default.GetBytes(secretKey);
+            }
+
+            SM4 sm4 = new SM4();
+            sm4.sm4_setkey_enc(ctx, keyBytes);
+            byte[] encrypted = sm4.sm4_crypt_ecb(ctx, Encoding.Default.GetBytes(plainText));
+
+            string cipherText = Encoding.Default.GetString(Hex.Encode(encrypted));
+            return cipherText;
+        }
+        public string Decrypt_ECB(string cipherText,string key)
+        {
+            this.secretKey = key;
+            return Decrypt_ECB(cipherText);
+        }
+        public string Decrypt_ECB(string cipherText)
+        {
+            SM4_Context ctx = new SM4_Context();
+            ctx.isPadding = true;
+            ctx.mode = SM4.SM4_DECRYPT;
+
+            byte[] keyBytes;
+            if (hexstring)
+            {
+                keyBytes = Hex.Decode(secretKey);
+            }
+            else
+            {
+                keyBytes = Encoding.Default.GetBytes(secretKey);
+            }
+
+            SM4 sm4 = new SM4();
+            sm4.sm4_setkey_dec(ctx, keyBytes);
+            byte[] decrypted = sm4.sm4_crypt_ecb(ctx, Hex.Decode(cipherText));
+            return Encoding.Default.GetString(decrypted);
+        }
+        public string Encrypt_CBC(string plainText)
+        {
+            SM4_Context ctx = new SM4_Context();
+            ctx.isPadding = true;
+            ctx.mode = SM4.SM4_ENCRYPT;
+
+            byte[] keyBytes;
+            byte[] ivBytes;
+            if (hexstring)
+            {
+                keyBytes = Hex.Decode(secretKey);
+                ivBytes = Hex.Decode(iv);
+            }
+            else
+            {
+                keyBytes = Encoding.Default.GetBytes(secretKey);
+                ivBytes = Encoding.Default.GetBytes(iv);
+            }
+
+            SM4 sm4 = new SM4();
+            sm4.sm4_setkey_enc(ctx, keyBytes);
+            byte[] encrypted = sm4.sm4_crypt_cbc(ctx, ivBytes, Encoding.Default.GetBytes(plainText));
+
+            string cipherText = Encoding.Default.GetString(Hex.Encode(encrypted));
+            return cipherText;
+        }
+
+        public string Decrypt_CBC(string cipherText)
+        {
+            SM4_Context ctx = new SM4_Context();
+            ctx.isPadding = true;
+            ctx.mode = SM4.SM4_DECRYPT;
+
+            byte[] keyBytes;
+            byte[] ivBytes;
+            if (hexstring)
+            {
+                keyBytes = Hex.Decode(secretKey);
+                ivBytes = Hex.Decode(iv);
+            }
+            else
+            {
+                keyBytes = Encoding.Default.GetBytes(secretKey);
+                ivBytes = Encoding.Default.GetBytes(iv);
+            }
+
+            SM4 sm4 = new SM4();
+            sm4.sm4_setkey_dec(ctx, keyBytes);
+            byte[] decrypted = sm4.sm4_crypt_cbc(ctx, ivBytes, Hex.Decode(cipherText));
+            return Encoding.Default.GetString(decrypted);
+        }
+    }
+     
 }

+ 1 - 1
HeFeiMI.csproj

@@ -4,7 +4,7 @@
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProjectGuid>{E9B4D618-13F0-4864-9C4C-28B8A6532653}</ProjectGuid>
+    <ProjectGuid>{98043A21-220F-4A37-BC0C-67779940FD3E}</ProjectGuid>
     <OutputType>Library</OutputType>
     <AppDesignerFolder>Properties</AppDesignerFolder>
     <RootNamespace>AnHuiMI</RootNamespace>

+ 29 - 17
Helper/EncryptHelper.cs

@@ -12,20 +12,17 @@ namespace PTMedicalInsurance.Helper
 {
     class EncryptHelper
     {
-        //private string ak = "1G94963I20403F60C80A00005FF7A699";
-        //private string sk = "APyE9G1D+C8g3qV3Z6VshXztOa55YJBgwN+P4WqU5n0x";
-        //private string appid = "1G94963HS03V3F60C80A00000DB330D8";
 
-
-        private string ak = "1H1INA1L90OH3F60C80A00008119D616";
-        private string sk = "APCIAgJqh3+AcK/IXL1WJD130i2q+6UblRxQzus3+sVw";
+        private string appSecret = "1H1INA1L90OH3F60C80A00008119D616";
         private string appid = "1H1INA1L30OG3F60C80A0000DEE43558";
         public string encrypt(string data)
         {
             string encryptData = "";
             try
-            {
-                //encryptData = GMUtilLib.SignUtil.encryptMsg(appid, ak, sk, data);
+            { 
+                SM4Utils sm4 = new SM4Utils();
+                string newKey = sm4.Encrypt_ECB(appSecret,appid);
+                encryptData = sm4.Encrypt_ECB(data,newKey.Substring(0,32));
                 return encryptData;
             }
             catch (Exception ex)
@@ -35,7 +32,7 @@ namespace PTMedicalInsurance.Helper
             }
             finally
             {
-                Global.writeLog("ak:" + ak +";sk:" + sk + ";appid:" + appid,data,encryptData);
+                Global.writeLog(";appid:" + appid,data,encryptData);
             }
         }
 
@@ -44,7 +41,9 @@ namespace PTMedicalInsurance.Helper
             string encryptData = "";
             try
             {
-                //encryptData = GMUtilLib.SignUtil.signSm3WithSm2(appid, ak, sk, data);
+                SM4Utils sm4 = new SM4Utils();
+                string newKey = sm4.Encrypt_ECB(appSecret, appid);
+                encryptData = sm4.Decrypt_ECB(data, newKey.Substring(0, 32));
                 return encryptData;
             }
             catch (Exception ex)
@@ -54,22 +53,32 @@ namespace PTMedicalInsurance.Helper
             }
             finally
             {
-                Global.writeLog("ak:" + ak + ";sk:" + sk + ";appid:" + appid, data, encryptData);
+                Global.writeLog(";appid:" + appid, data, encryptData);
             }
         }
 
         public string signWithSM2(JObject obj)
         {
-            string data = sortKeys(obj);
+            JObject joSign = JObject.Parse(JsonHelper.toJsonString(obj));
+            Global.writeLog("去除空值:" + joSign.ToString());
+
+            string data = sortKeys(joSign);
+            Global.writeLog("排序:"+data);
+
+            data += appSecret;
+            Global.writeLog("加secret:" + data);
+
             Sm2Crypto crypto = new Sm2Crypto();
-            string publicKey = "", privateKey = "";
-            Sm2Crypto.GetKey(out privateKey, out publicKey);
+            string publicKey = "BPwaiORlFqBIiMMTyeATozdSsLCxlGa/8ouTosiHKKmVeSnSWRgdIHOEXzyCVQlRzPCsKB24ZA4E3G8t9biN1E=", privateKey = "APCIAgJqh3+AcK/IXL1WJD130i2q+6UblRxQzus3+sVw";
+            //Sm2Crypto.GetKey(out privateKey, out publicKey);
 
             crypto.PublicKey = publicKey;
             crypto.PrivateKey = privateKey;
 
             crypto.Str = data;
-            return crypto.Encrypt();
+            string ret = crypto.Encrypt();
+            // base64
+            return Convert.ToBase64String(Encoding.UTF8.GetBytes(ret));
         }
 
         public string sortKeys(JObject obj) {
@@ -116,7 +125,7 @@ namespace PTMedicalInsurance.Helper
             }
             finally
             {
-                Global.writeLog("ak:" + ak + ";sk:" + sk + ";appid:" + appid, data + ";" + encryptData, error);
+                Global.writeLog(";appid:" + appid, data + ";" + encryptData, error);
             }
         }
 
@@ -125,6 +134,9 @@ namespace PTMedicalInsurance.Helper
             string data = "";
             try
             {
+                //string newKey = SM4.Encrypt(appSecret, appid)?.Substring(0, 32);
+                //encryptData = SM4.Decrypt(encryptData, newKey);
+
                 //data = GMUtilLib.SignUtil.decryptMsg(ak, sk, encryptData);
                 return data;
             }
@@ -135,7 +147,7 @@ namespace PTMedicalInsurance.Helper
             }
             finally
             {
-                Global.writeLog("ak:" + ak + ";sk:" + sk + ";appid:" + appid, encryptData, data);
+                Global.writeLog(";appid:" + appid, encryptData, data);
             }
         }
     }

+ 40 - 8
Helper/InvokeHelper.cs

@@ -33,7 +33,7 @@ using File = System.IO.File;
 
 namespace PTMedicalInsurance.Helper
 {
-    class InvokeHelper
+    public class InvokeHelper
     {
         private string serviceURL;
         private string authorization;
@@ -497,20 +497,52 @@ namespace PTMedicalInsurance.Helper
         /// <param name="funNO"></param>
         /// <param name="data"></param>
         /// <returns></returns>
+        /// 
         public JObject invokeMPService(string funNO, string data)
+        {
+            return invokeMPService(funNO,JObject.Parse(data));
+        }
+        public JObject invokeMPService(string funNO, JObject joInput)
         {
             JObject joRtn = new JObject();
             String outPar = "";
             try
             {
-                //Global.inf.centerURL = "http://10.67.240.74:8086/1.0.0/hsa-fsi-" + funNO;
-                Global.curEvt.URL = Global.inf.centerURL + funNO;
+                string url = "";
+                switch (funNO)
+                {
+                    case "6201":
+                        url = "/org/local/api/hos/uldFeeInfo";
+                        break;
+                    case "6202":
+                        url = "/org/local/api/hos/pay_order";
+                        break;
+                    case "6203":
+                        url = "/org/local/api/hos/refund_Order";
+                        break;
+                    case "6301":
+                        url = "/org/local/api/hos/query_order_info";
+                        break;
+                    case "6401":
+                        url = "/org/local/api/hos/revoke_order";
+                        break;
+                    default:
+                        break;
+                }
+                EncryptHelper encrypt = new EncryptHelper();
+                string data = JsonHelper.setMPCenterInpar(funNO, joInput);
+
+                Global.curEvt.URL = "http://10.66.159.55:7080" + url;
                 joRtn = invokeCenterService(data);
-                outPar = JsonHelper.Compress(joRtn);
-                return joRtn;
 
-                
+                string encryptData = JsonHelper.getDestValue(joRtn, "encData");
+                if (!string.IsNullOrEmpty(encryptData))
+                {
+                    //解密
+                    joRtn.Add("output", encrypt.decrypt(encryptData));
+                }
 
+                return joRtn;
             }
             catch (Exception ex)
             {
@@ -523,8 +555,8 @@ namespace PTMedicalInsurance.Helper
             }
             finally
             {
-                Global.writeLog(funNO + "(" + Global.curEvt.URL + ")", JsonHelper.Compress(data), joRtn.ToString());
-                this.saveCenterLog(JsonHelper.Compress(data), joRtn.ToString(), JsonHelper.Compress(data), joRtn.ToString());
+                Global.writeLog(funNO + "(" + Global.curEvt.URL + ")", joInput.ToString(), joRtn.ToString());
+                this.saveCenterLog(joInput.ToString(), joRtn.ToString(), joInput.ToString(), joRtn.ToString());
             }
         }
         /// <summary>

+ 23 - 49
Helper/JsonHelper.cs

@@ -238,52 +238,27 @@ namespace PTMedicalInsurance.Helper
         /// <param name="infno"></param>
         /// <param name="input"></param>
         /// <returns></returns>
-        public static string setMPCenterInpar(string infno, string input)
+        public static string setMPCenterInpar(string infno, JObject joInput)
         {
             dynamic Jo = new JObject();
-            Jo.infno = infno;
-            Global.curEvt.msgid = Global.inf.hospitalNO + DateTime.Now.ToString("yyyyMMddHHmmssffff");
-            Jo.msgid = Global.curEvt.msgid;
-
-            if (Global.inf.areaCode == "")
-            {
-                Global.inf.areaCode = "530100";
-            }
-
-            if (Global.pat.insuplc_admdvs == "")
-            {
-                Global.pat.insuplc_admdvs = Global.inf.areaCode;
-            }
-            Jo.insuplc_admdvs = Global.pat.insuplc_admdvs;
-
-            Jo.mdtrtarea_admvs = "530100";
-            Global.pat.mdtrtarea_admvs = Jo.mdtrtarea_admvs;
-            Jo.recer_sys_code = "KunMing";
-            Jo.dev_safe_info = Global.inf.dev_safe_info; //设备编号
-            Jo.cainfo = Global.inf.cainfo;//
-            Jo.signtype = "asn1"; ;
-            Jo.infver = "v1.0";
-            Jo.opter_type = Global.user.type; ;
-            Jo.opter = Global.user.ID; ;
-            Jo.opter_name = Global.user.name; ;
-            Jo.inf_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
-            Jo.fixmedins_code = Global.inf.hospitalNO;
-            Jo.fixmedins_name = Global.inf.hospitalName;
-            Jo.sign_no = Global.curEvt.signno;
-
-            if (input != "")
-            {
-                JObject joInput = (JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(input);
-
-                Jo.cainfo = "";
-                Jo.Add("input", JObject.FromObject(joInput));
-
-            }
-            else
-            {
-                Jo.cainfo = "";
-                Jo.Add("input", "");
-            }
+            Jo.appId = "1H1INA1L30OG3F60C80A0000DEE43558";
+            //Global.curEvt.msgid = Global.inf.hospitalNO + DateTime.Now.ToString("yyyyMMddHHmmssffff");
+            //Jo.msgid = Global.curEvt.msgid;
+            Jo.data = joInput["data"];
+            Jo.encType = "SM4";
+            Jo.signtype = "SM2";
+            Jo.version = "2.0.1";
+            Jo.timestamp = DateTime.Now.ToString("yyyyMMddHHmmss");
+
+            EncryptHelper encrypt = new EncryptHelper();
+            // 签名
+            string signData = encrypt.signWithSM2(Jo);
+            // 加密
+            string encryptData = encrypt.encrypt(joInput["data"].ToString());
+            Global.writeLog("加密:" + encryptData);
+
+            Jo.signData =  signData;
+            Jo.encData = encryptData;
 
             return Jo.ToString();
         }
@@ -300,14 +275,14 @@ namespace PTMedicalInsurance.Helper
             Jo.infno = infno;
             Global.curEvt.msgid = Global.inf.hospitalNO + DateTime.Now.ToString("yyyyMMddHHmmssffff");
             Jo.msgid = Global.curEvt.msgid;
-                                
 
-            // 参保地
-            Jo.insuplc_admdvs = Global.pat.insuplc_admdvs;
-            if (Global.pat.insuplc_admdvs == "")
+            if (string.IsNullOrEmpty(Global.pat.insuplc_admdvs))
             {
                 Global.pat.insuplc_admdvs = Global.inf.areaCode;
             }
+
+            // 参保地
+            Jo.insuplc_admdvs = Global.pat.insuplc_admdvs;
             // 就医地
             Jo.mdtrtarea_admvs = Global.inf.areaCode;
 
@@ -477,7 +452,6 @@ namespace PTMedicalInsurance.Helper
                 string success = getDestValue(joRtn, "success");
                 string message = getDestValue(joRtn, "message");
                 string encData = getDestValue(joRtn, "encData");
-                //Global.writeLog("success:" + success);
                 if (success != "True")
                 {
                     errorMsg = message;

+ 2 - 4
InsuBusiness.cs

@@ -74,13 +74,13 @@ namespace PTMedicalInsurance
                 
                 if ((businessType == "M6") || (businessType == "M6C") || (businessType == "M6Confirm"))
                 {
-                    Environment.CurrentDirectory = @"D:\HttpServerAPI\bin\libs";
+                    Environment.CurrentDirectory = @"D:\HttpServerAPI\bin";
                 }
                 return 0;
             }
             catch (Exception ex)
             {
-                errMsg = "parseInparam 解析入参异常:" + errMsg;
+                errMsg = "parseInparam 解析入参异常:" + ex.Message;
                 return -1;
             }
 
@@ -1608,9 +1608,7 @@ namespace PTMedicalInsurance
                                 //    frmSettlList.btnPrint_Click(null, null);
                                 //}
                             }
-
                             return JsonHelper.setIrisReturnValue(0, "", null).ToString();
-                            break;
                         }
                     case "Log"://日志
                         {