private static EncryptParseItem ParseEncryptItem(string body, string rootNode, int indexOfRootNode) { var signDataStartIndex = indexOfRootNode + rootNode.Length + 2; var indexOfSign = body.IndexOf($"\"{AlipayConstants.SIGN}\"", StringComparison.Ordinal); var signDataEndIndex = indexOfSign - 1; if (signDataEndIndex < 0) { signDataEndIndex = body.Length - 1; } var length = signDataEndIndex - signDataStartIndex; var encyptContent = body.Substring(signDataStartIndex + 1, length - 2); var item = new EncryptParseItem { encryptContent = encyptContent, startIndex = signDataStartIndex, endIndex = signDataEndIndex }; return(item); }
/// <summary> /// 解析加密节点 /// </summary> /// <param name="request"></param> /// <param name="body"></param> private static EncryptParseItem ParseEncryptData(IAlipayRequest <T> request, string body) { var rootNode = request.GetApiName().Replace(".", "_") + AlipayConstants.RESPONSE_SUFFIX; var errorRootNode = AlipayConstants.ERROR_RESPONSE; var indexOfRootNode = body.IndexOf(rootNode, StringComparison.Ordinal); var indexOfErrorRoot = body.IndexOf(errorRootNode, StringComparison.Ordinal); EncryptParseItem result = null; if (indexOfRootNode > 0) { result = ParseEncryptItem(body, rootNode, indexOfRootNode); } else if (indexOfErrorRoot > 0) { result = ParseEncryptItem(body, errorRootNode, indexOfErrorRoot); } return(result); }