Browse Source

perf : 移动支付优化

zhengjie 1 year ago
parent
commit
fc188cf810

+ 62 - 0
Business/IMobilePay.cs

@@ -0,0 +1,62 @@
+using Newtonsoft.Json.Linq;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace PTMedicalInsurance.Business
+{
+    interface IMobilePay
+    {
+        /// <summary>
+        /// 【6101】解析医保电子凭证二维码
+        /// </summary>
+        /// <param name="inParam"></param>
+        /// <returns></returns>
+        JObject parseEcCode(string inParam);
+
+        /// <summary>
+        /// 【6201】费用明细上传
+        /// </summary>
+        /// <param name="inParam"></param>
+        /// <returns></returns>
+        JObject uploadFeeDetails(string inParam);
+
+        /// <summary>
+        /// 【6202】支付下单
+        /// </summary>
+        /// <param name="inParam"></param>
+        /// <returns></returns>
+        JObject payOrder(string inParam);
+
+        /// <summary>
+        /// 【6203】医保退费
+        /// </summary>
+        /// <param name="inParam"></param>
+        /// <returns></returns>
+        JObject cancelPay(string inParam);
+
+        /// <summary>
+        /// 【6204】医保订单信息同步(医保订单异步通知接口,应由服务端实现)
+        /// </summary>
+        /// <param name="inParam"></param>
+        /// <returns></returns>
+        JObject orderNotify(string inParam);
+
+        /// <summary>
+        /// 【6301】医保订单结算结果查询
+        /// </summary>
+        /// <param name="inParam"></param>
+        /// <returns></returns>
+        JObject orderQuery(string inParam);
+
+        /// <summary>
+        /// 【6302】医保结算结果通知
+        /// </summary>
+        /// <param name="inParam"></param>
+        /// <returns></returns>
+        JObject payNotify(string inParam);
+
+    }
+}

+ 2 - 2
Business/MobilePay.cs

@@ -1567,7 +1567,7 @@ namespace PTMedicalInsurance.Business
 
         #region  解析中心返回
         /// <summary>
-        /// 解析移动支付返参
+        /// 解析银海移动支付返参
         /// </summary>
         /// <param name="joRtn"></param>
         /// <param name="errorMsg"></param>
@@ -1581,7 +1581,7 @@ namespace PTMedicalInsurance.Business
             }
             catch (Exception ex)
             {
-                errorMsg = "解析移动支付返参发生异常:" + ex.Message;
+                errorMsg = "解析银海移动支付返参发生异常:" + ex.Message;
                 return -1;
             }
         }

+ 1 - 1
Common/GmUtil.cs

@@ -17,7 +17,7 @@ using Org.BouncyCastle.Utilities;
 using Org.BouncyCastle.Utilities.Encoders;
 using Org.BouncyCastle.X509;
 
-namespace AnHuiMI.Common
+namespace PTMedicalInsurance.Common
 {
 	public class GmUtil
 	{

+ 0 - 1
Common/SMLib/SMUtil.cs

@@ -7,7 +7,6 @@ using Org.BouncyCastle.Utilities.Encoders;
 using System;
 using System.Text;
 using Newtonsoft.Json.Linq;
-using AnHuiMI.Common;
 using Newtonsoft.Json;
 
 namespace GMCrypto.Lib

+ 1 - 1
Common/SignUtils.cs

@@ -9,7 +9,7 @@ using Org.BouncyCastle.Math;
 using Org.BouncyCastle.Utilities.Encoders;
 using PTMedicalInsurance.Variables;
 
-namespace AnHuiMI.Common
+namespace PTMedicalInsurance.Common
 {
     class SignUtils
     {

+ 1 - 10
Forms/SettlementChecklist.cs

@@ -17,8 +17,7 @@ using Newtonsoft.Json;
 using System.Threading;
 using PTMedicalInsurance.Business;
 using System.Reflection;
-using System.Runtime.InteropServices;
-using FastReportFrom;
+//using FastReportFrom;
 using System.IO;
 
 namespace PTMedicalInsurance.Forms
@@ -35,8 +34,6 @@ namespace PTMedicalInsurance.Forms
 
         private bool disposed = false;
 
-        Thread thread_test;
-
         private InvokeHelper invoker = new InvokeHelper();
         public SettlementChecklist()
         {
@@ -84,17 +81,11 @@ namespace PTMedicalInsurance.Forms
 
         protected virtual void Dispose1(bool disposing)
         {
-       
-            if (thread_test == null) return;
             if (disposed == false)
             {
                 if (disposing == true)
                 {
                     Thread.Sleep(100);
-                    Global.writeLog("Main - aborting my thread.");
-                    thread_test.Abort();//终止线程myThread
-                    thread_test.Join();//等待线程myThread结束
-                    Global.writeLog("Main - ending.");
                 }
                 //释放托管资源的代码
             }

+ 1 - 0
HeFeiMI.csproj

@@ -89,6 +89,7 @@
   <ItemGroup>
     <Compile Include="Business\AutoResizeForm.cs" />
     <Compile Include="Business\CenterBusiness.cs" />
+    <Compile Include="Business\IMobilePay.cs" />
     <Compile Include="Business\PreAndInProcessAnalysis.cs" />
     <Compile Include="Business\DataImoport.cs" />
     <Compile Include="Business\HisMainBusiness.cs" />

+ 27 - 8
Helper/EncryptHelper.cs

@@ -8,26 +8,45 @@ using Newtonsoft.Json;
 using Newtonsoft.Json.Linq;
 using PTMedicalInsurance.Variables;
 using GMCrypto.Lib;
+using PTMedicalInsurance.Common;
 
 namespace PTMedicalInsurance.Helper
 {
     class EncryptHelper
     {
+        
         //private string appSecret = "1G566663V0033F60C80A0000B26913B4";
         //private string privateKey = "DsexH970Mz9RAuu9SZtqdz/JwwZtppfS1lzOZvtO/Q==";
         //private static string appId = "1G566663I0023F60C80A00000A8F1C36";
 
-        //测试
-        private string appSecret = "1H1INA1L90OH3F60C80A00008119D616";   //appSecret 数字密钥sm4
-        private string privateKey = "APCIAgJqh3+AcK/IXL1WJD130i2q+6UblRxQzus3+sVw";     //渠道私密
-        public static string appId = "1H1INA1L30OG3F60C80A0000DEE43558";    //渠道ID
-        public string publicKey = "BDMsMM2HPRkaKSl2ynBbCRtJodP8Nh4G5IkEnV+7YHaCplkAZbPMsUlvJpWqQ+Q4sT7611xGSZ1/mPsqgqJ49zs=";            //平台公钥
+        //微信测试
+        //private string appSecret = "1H1INA1L90OH3F60C80A00008119D616";   //appSecret 数字密钥sm4
+        //private string privateKey = "APCIAgJqh3+AcK/IXL1WJD130i2q+6UblRxQzus3+sVw";     //渠道私密
+        //private string appId = "1H1INA1L30OG3F60C80A0000DEE43558";    //渠道ID
+        //private string publicKey = "BDMsMM2HPRkaKSl2ynBbCRtJodP8Nh4G5IkEnV+7YHaCplkAZbPMsUlvJpWqQ+Q4sT7611xGSZ1/mPsqgqJ49zs=";            //平台公钥
 
         //正式
         //private string ak = "1H62Q1KH205K76430B0A0000BF149773";
         //private string sk = "YbNObZNMdUgwgLUEyK4ixNSkaCF9OPtCdDth9APWYKU=";
         //private string appid = "1H62Q1KGP05J76430B0A00007144E257";
 
+        //支付宝测试
+        private string appSecret = "1HFEACAP303F3F60C80A0000039D8740";   //appSecret 数字密钥sm4
+        private string privateKey = "e5u2OBbOAofe0MJWFw9gyZXpPKHrNR8SAwhO4VctPdY=";     //渠道私密
+        private string appId = "1HFEACAOT03E3F60C80A000013E2CAE7";    //渠道ID
+        private string publicKey = "BAXEY2R5We2CGLWJEbT7U09IMMvi/yoa2R7qWfoRnmxYHNchjFUNb7OEDe5qEMFasfvoEkZFatqfd3qDLmuxkTg=";            //平台公钥
+
+        public EncryptHelper()
+        { }
+
+        public EncryptHelper(string appId,string secret,string prvKey,string pubKey)
+        {
+            this.appId = appId;
+            this.appSecret = secret;
+            this.privateKey = prvKey;
+            this.publicKey = pubKey;
+        }
+
 
         public string getSignText(string data)
         {
@@ -71,7 +90,7 @@ namespace PTMedicalInsurance.Helper
             }
             finally
             {
-                Global.writeLog("ak:" + appSecret + ";sk:" + privateKey + ";appid:" + appId, data, encryptData);
+                //Global.writeLog("【签名】ak:" + appSecret + ";sk:" + privateKey + ";appid:" + appId, data, encryptData);
             }
         }
 
@@ -89,7 +108,7 @@ namespace PTMedicalInsurance.Helper
             }
             finally
             {
-                Global.writeLog("ak:" + appSecret + ";sk:" + privateKey + ";appid:" + appId, signDto.ToString() + ";" + signData, error);
+                //Global.writeLog("【验签】ak:" + appSecret + ";sk:" + privateKey + ";appid:" + appId, signDto.ToString() + ";" + signData, error);
             }
         }
 
@@ -108,7 +127,7 @@ namespace PTMedicalInsurance.Helper
             }
             finally
             {
-                Global.writeLog("ak:" + appSecret + ";sk:" + privateKey + ";appid:" + appId, encryptData, data);
+                //Global.writeLog("【解密】ak:" + appSecret + ";sk:" + privateKey + ";appid:" + appId, encryptData, data);
             }
         }
     }

+ 80 - 50
Helper/InvokeHelper.cs

@@ -136,6 +136,20 @@ namespace PTMedicalInsurance.Helper
             // Global.inf.uploadURL = ini.ReadValue("CENTER", "upload");
             //Global.inf.downURL = ini.ReadValue("CENTER", "download");
             // Global.inf.ecURL = ini.ReadValue("CENTER", "ecToken");
+
+            Global.inf.mobilePayURL = ini.ReadValue("CENTER", "mobilePay");
+            Global.inf.ecPrescURL = ini.ReadValue("CENTER", "prescription");
+            // 移动支付
+            if (string.IsNullOrEmpty(Global.inf.mobilePayURL))
+            {
+                Global.inf.mobilePayURL = "http://10.66.159.55:7080";
+            }
+            // 电子处方
+            if (string.IsNullOrEmpty(Global.inf.ecPrescURL))
+            {
+                Global.inf.ecPrescURL = "http://10.123.185.12:8080/epc/api";
+            }
+
         }
         
         
@@ -439,18 +453,20 @@ namespace PTMedicalInsurance.Helper
             string prefix = Global.inf.centerURL;
             switch (funNo)
             {
-                case "9101":
-                    prefix = Global.inf.uploadURL;
-                    break;
-                case "9102":
-                    prefix = Global.inf.downURL;
+                case "4101A":
+                case "3101":
+                case "3102":
+                    prefix = "http://10.66.155.173:8086/1.0.0/hsa-fsi-";
                     break;
                 default:
                     prefix = Global.inf.centerURL;
                     break;
             }
-
-            prefix = "http://10.67.248.214:8086/1.0.0/hsa-fsi-";  //测试
+            //移动支付使用医保测试环境【测试】,正式使用时须去掉
+            if (funNo.StartsWith("62") || funNo.StartsWith("63") || funNo.StartsWith("64"))
+            {
+                prefix = "http://10.67.248.214:8086/1.0.0/hsa-fsi-";  //测试
+            }
 
             Global.curEvt.URL = prefix + funNo;
         }
@@ -477,20 +493,7 @@ namespace PTMedicalInsurance.Helper
                         return JObject.Parse(outPar);
                     }
                 }
-
-                //Global.inf.centerURL = "http://10.67.240.74:8086/1.0.0/hsa-fsi-" + funNO;
-                Global.curEvt.URL = Global.inf.centerURL + funNO;
-                if (funNO == "4101A") {
-                    Global.curEvt.URL = "http://10.66.155.173:8086/1.0.0/hsa-fsi-4101A";
-                }
-                if (funNO == "3101")
-                {
-                    Global.curEvt.URL = "http://10.66.155.173:8086/1.0.0/hsa-fsi-3101";
-                }
-                if (funNO == "3102")
-                {
-                    Global.curEvt.URL = "http://10.66.155.173:8086/1.0.0/hsa-fsi-3102";
-                }
+                setCenterURL(funNO);
 
                 joRtn = invokeCenterService(data);
                 return joRtn;
@@ -552,42 +555,69 @@ namespace PTMedicalInsurance.Helper
                 EncryptHelper encrypt = new EncryptHelper();
                 string data = JsonHelper.setMPCenterInpar(funNO, joInput);
                 // 移动支付地址
-                Global.curEvt.URL = "http://10.66.159.55:7080" + url;
-                joRtn = invokeCenterService(data);
+                Global.curEvt.URL = Global.inf.mobilePayURL + url;
 
-                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))
+                // 动态调试模式
+                if (Global.curEvt.enabledDebug)
                 {
-                    joRtn.Remove("encData");
-                    joRtn.Remove("signData");
-                    joRtn.Remove("data");
-                    //解密
-                    string decData = encrypt.decrypt(encData);
-                    // 验签
-                    JsonConvert.DefaultSettings = () => new JsonSerializerSettings
+                    CenterResult center = new CenterResult();
+                    center.setTradeNo(funNO);
+                    if (center.ShowDialog() == DialogResult.OK)
                     {
-                        FloatParseHandling = FloatParseHandling.Decimal
-                    };
-                    joRtn.Add("data", JToken.FromObject(JsonConvert.DeserializeObject(decData)));
+                        outPar = center.returnData;
+                        return JObject.Parse(outPar);
+                    }
+                }
 
-                    bool rtn = encrypt.verify(joRtn, signData);
-                    if (rtn)
-                    {
-                        Global.writeLog(funNO+ "【明文出参】:\r\n" + decData);
+                try
+                {
+                    joRtn = invokeCenterService(data);
 
-                        joRtn = JObject.Parse(decData);
-                        joRtn.Add("success", "True");
-                    }
-                    else
+                    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))
                     {
-                        Global.writeLog("验签失败,请核查!");
+                        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("验签通过!");
+                        }
+                        else
+                        {
+                            Global.writeLog("验签失败,请核查!");
+                        }
+
+                        if (!string.IsNullOrEmpty(decData))
+                        {
+                            Global.writeLog(funNO + "【明文出参】:\r\n" + decData);
+
+                            joRtn = JObject.Parse(decData);
+                            joRtn.Add("success", "True");
+                        }
                     }
+
+                    return joRtn;
+
+                }
+                finally
+                {
+                    this.saveCenterLog(JsonHelper.Compress(data), joRtn.ToString(), JsonHelper.Compress(data), joRtn.ToString());
                 }
 
-                return joRtn;
             }
             catch (Exception ex)
             {
@@ -600,8 +630,8 @@ namespace PTMedicalInsurance.Helper
             }
             finally
             {
-                //Global.writeLog(funNO + "(" + Global.curEvt.URL + ")", joInput.ToString(), joRtn.ToString());
-                //this.saveCenterLog(joInput.ToString(), joRtn.ToString(), joInput.ToString(), joRtn.ToString());
+                Global.writeLog(funNO + "(" + Global.curEvt.URL + ")", joInput.ToString(), joRtn.ToString());
+                this.saveCenterLog(joInput.ToString(), joRtn.ToString(), joInput.ToString(), joRtn.ToString());
             }
         }
         /// <summary>

+ 13 - 0
Variables/Struct.cs

@@ -40,7 +40,9 @@ namespace PTMedicalInsurance.Variables
         public string uploadURL;
         public string downURL;
         public string cardURL;
+        public string mobilePayURL;
         public string ecURL;
+        public string ecPrescURL;
         public string areaCode;
         public string dllName;
         public string version;
@@ -55,7 +57,18 @@ namespace PTMedicalInsurance.Variables
         public string CreditID;
         public string operatoType;
         public string fileName;
+    }
 
+    /// <summary>
+    /// 移动支付配置
+    /// </summary>
+    public struct MobilePayConfig
+    {
+        public string type;
+        public string appId;
+        public string appSecret;
+        public string privateKey;
+        public string publicKey;
     }
 
     //用户信息