ソースを参照

pref: 移动支付调整

zhengjie 1 年間 前
コミット
ca33f7e5dd
4 ファイル変更59 行追加55 行削除
  1. 1 1
      Business/MobilePay.cs
  2. 2 11
      ChongQingMI.csproj
  3. 42 3
      Helper/InvokeHelper.cs
  4. 14 40
      Helper/JsonHelper.cs

+ 1 - 1
Business/MobilePay.cs

@@ -110,7 +110,7 @@ namespace PTMedicalInsurance.Business
                 setPatientInsuInfo(jo1194Rtn);
 
                 //2201
-                JObject jo2201Rtn = OutpatientReg();
+                //JObject jo2201Rtn = OutpatientReg();
 
                 if (Get6201Inpar(out errMsg) != 0)
                 {

+ 2 - 11
ChongQingMI.csproj

@@ -32,22 +32,13 @@
     <WarningLevel>4</WarningLevel>
   </PropertyGroup>
   <ItemGroup>
-    <Reference Include="BouncyCastle.Crypto, Version=1.9.0.0, Culture=neutral, PublicKeyToken=0e99375e54769942, processorArchitecture=MSIL">
-      <HintPath>packages\Portable.BouncyCastle.1.9.0\lib\net40\BouncyCastle.Crypto.dll</HintPath>
+    <Reference Include="BouncyCastle.Crypto">
+      <HintPath>..\Demo\bin\Debug-yaohai\BouncyCastle.Crypto.dll</HintPath>
     </Reference>
     <Reference Include="FastReport, Version=2020.3.7.0, Culture=neutral, PublicKeyToken=db7e5ce63278458c, processorArchitecture=MSIL">
       <SpecificVersion>False</SpecificVersion>
       <HintPath>..\..\FastReport\FastReport.dll</HintPath>
     </Reference>
-    <Reference Include="FastReport.Bars">
-      <HintPath>..\..\FastReport\FastReport.Bars.dll</HintPath>
-    </Reference>
-    <Reference Include="FastReport.Compat">
-      <HintPath>..\..\FastReport\FastReport.Compat.dll</HintPath>
-    </Reference>
-    <Reference Include="FastReport.Editor">
-      <HintPath>..\..\FastReport\FastReport.Editor.dll</HintPath>
-    </Reference>
     <Reference Include="FastReportFrom">
       <HintPath>..\..\FastReport\FastReportFrom.dll</HintPath>
     </Reference>

+ 42 - 3
Helper/InvokeHelper.cs

@@ -296,14 +296,53 @@ namespace PTMedicalInsurance.Helper
         /// <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
             {
+                EncryptHelper encrypt = new EncryptHelper();
+                string data = JsonHelper.setMPCenterInpar(funNO, joInput);
+                // 移动支付地址
                 Global.curEvt.URL = Global.inf.centerURL + funNO;
                 joRtn = invokeCenterService(data);
-                outPar = JsonHelper.Compress(joRtn);
+
+                Global.writeLog(funNO + "【密文出参】:\r\n" + joRtn.ToString());
+
+                string encData = JsonHelper.getDestValue(joRtn, "encData");
+                string signData = JsonHelper.getDestValue(joRtn, "signData");
+                if (!string.IsNullOrEmpty(encData) && !string.IsNullOrEmpty(signData))
+                {
+                    joRtn.Remove("encData");
+                    joRtn.Remove("signData");
+                    joRtn.Remove("data");
+                    //解密
+                    string decData = encrypt.decrypt(encData);
+                    // 验签
+                    JsonConvert.DefaultSettings = () => new JsonSerializerSettings
+                    {
+                        FloatParseHandling = FloatParseHandling.Decimal
+                    };
+                    joRtn.Add("data", JToken.FromObject(JsonConvert.DeserializeObject(decData)));
+
+                    bool rtn = encrypt.verify(joRtn, signData);
+                    if (rtn)
+                    {
+                        Global.writeLog(funNO + "【明文出参】:\r\n" + decData);
+
+                        joRtn = JObject.Parse(decData);
+                        joRtn.Add("success", "True");
+                    }
+                    else
+                    {
+                        Global.writeLog("验签失败,请核查!");
+                    }
+                }
+
                 return joRtn;
 
                 
@@ -320,8 +359,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());
             }
         }
 

+ 14 - 40
Helper/JsonHelper.cs

@@ -20,6 +20,7 @@ using PTMedicalInsurance.Common;
 using System.IO;
 using PTMedicalInsurance.Variables;
 using Newtonsoft.Json;
+using GMCrypto.Lib;
 
 namespace PTMedicalInsurance.Helper
 {
@@ -278,60 +279,33 @@ namespace PTMedicalInsurance.Helper
             return setCenterInpar(infno, joInput);
         }
 
+        public static string setMPCenterInpar(string infno, JObject joInput)
+        {
+            return setMPCenterInpar(infno, joInput.ToString());
+        }
+
         /// <summary>
         /// 移动支付组织中心入参
         /// </summary>
         /// <param name="infno"></param>
         /// <param name="input"></param>
         /// <returns></returns>
-        public static string setMPCenterInpar(string infno, string input)
+        public static string setMPCenterInpar(string infno, string txtData)
         {
-            dynamic Jo = new JObject();
-            Jo.infno = infno;
-            Global.curEvt.msgid = Global.inf.hospitalNO + DateTime.Now.ToString("yyyyMMddHHmmssffff");
-            Jo.msgid = Global.curEvt.msgid;
+            EncryptHelper encrypt = new EncryptHelper();
 
-            if (Global.inf.areaCode == "")
-            {
-                Global.inf.areaCode = "530100";
-            }
+            string plainText = SignUtil.SortInput(JObject.Parse(txtData));
 
-            if (Global.pat.insuplc_admdvs == "")
-            {
-                Global.pat.insuplc_admdvs = Global.inf.areaCode;
-            }
-            Jo.insuplc_admdvs = Global.pat.insuplc_admdvs;
+            Global.writeLog(infno + "【明文入参】:\r\n" + plainText);
 
-            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;
+            string signData = "";
 
-            if (input != "")
-            {
-                JObject joInput = (JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(input);
 
-                Jo.cainfo = "";
-                Jo.Add("input", JObject.FromObject(joInput));
+            string output = encrypt.encrypt(txtData, ref signData);
 
-            }
-            else
-            {
-                Jo.cainfo = "";
-                Jo.Add("input", "");
-            }
+            Global.writeLog(infno + "【密文入参】:\r\n" + output);
 
-            return Jo.ToString();
+            return output;
         }
 
         /// <summary>