private T DecryptResponseXmlContent <T>(string xml) where T : JdPayResponse { if (string.IsNullOrEmpty(xml)) { throw new Exception("Content is Empty!"); } var entity = JdPayUtil.Deserialize <T>(xml); if (!string.IsNullOrEmpty(entity?.Encrypt)) { var base64EncryptStr = Encoding.UTF8.GetString(Convert.FromBase64String(entity.Encrypt)); var reqBody = DES3.DecryptECB(DesKey, base64EncryptStr); var reqBodyDoc = new XmlDocument(); reqBodyDoc.LoadXml(reqBody); var inputSign = JdPayUtil.GetValue(reqBodyDoc, "sign"); var jdpayRoot = reqBodyDoc.SelectSingleNode("jdpay"); var signNode = jdpayRoot.SelectSingleNode("sign"); jdpayRoot.RemoveChild(signNode); var reqBodyStr = JdPayUtil.ConvertXmlToString(reqBodyDoc); var xmlh = xml.Substring(0, xml.IndexOf("<jdpay>")); if (!string.IsNullOrEmpty(xmlh)) { reqBodyStr = reqBodyStr.Replace("<?xml version=\"1.0\" encoding=\"UTF-8\"?>", xmlh); } if (JdPaySignature.RSACheckContent(reqBodyStr, inputSign, RSAPublicParameters)) { entity = JdPayUtil.Deserialize <T>(reqBody); } else { throw new Exception("sign check fail: check Sign and Data Fail!"); } entity.Body = reqBody; } else { entity.Body = xml; } return(entity); }
private T DecryptResponseXml <T>(string xml) where T : JdPayResponse { var entity = JdPayUtil.Deserialize <T>(typeof(T), xml); if (!string.IsNullOrEmpty(entity?.Encrypt)) { var key = Convert.FromBase64String(Options.DesKey); var base64EncryptStr = Encoding.UTF8.GetString(Convert.FromBase64String(entity.Encrypt)); var reqBody = Des3.Des3DecryptECB(key, base64EncryptStr); var reqBodyDoc = new XmlDocument(); reqBodyDoc.LoadXml(reqBody); var inputSign = JdPayUtil.GetValue(reqBodyDoc, "sign"); var jdpayRoot = reqBodyDoc.SelectSingleNode("jdpay"); var signNode = jdpayRoot.SelectSingleNode("sign"); jdpayRoot.RemoveChild(signNode); var reqBodyStr = JdPayUtil.ConvertXmlToString(reqBodyDoc); var xmlh = xml.Substring(0, xml.IndexOf("<jdpay>")); if (!string.IsNullOrEmpty(xmlh)) { reqBodyStr = reqBodyStr.Replace("<?xml version=\"1.0\" encoding=\"UTF-8\"?>", xmlh); } var sha256SourceSignString = Sha256.Encrypt(reqBodyStr); var decryptByte = JdPaySignature.Decrypt(inputSign, Options.RsaPublicKey); var decryptStr = Des3.BytesToString(decryptByte); if (sha256SourceSignString.Equals(decryptStr)) { entity = JdPayUtil.Deserialize <T>(typeof(T), reqBody); } else { throw new Exception("sign check fail: check Sign and Data Fail!"); } entity.Body = reqBody; } else { entity.Body = xml; } return((T)entity); }