public void should_extract_correct_sign_content_when_response_has_nested_array() { String response = "{\"alipay_trade_create_response\":{\"code\":\"10000\",\"msg\":\"Success\",\"nested\":{\"a\":1,\"b\":\"2\"," + "\"array\":[\"1\",\"2\",\"3\"]},\"out_trade_no\":\"20150320010101001\",\"trade_no\":\"2019062322001446881000041395\"}," + "\"sign\":\"TS355N0QjK1r9GyD4YOsG5esszSUhESgwu1q5" + "+e1sWwqtPYe30CQ3v0QTEDdxYN9vm2No8V1KzuTSadrA4SZSkEkRchrcdVHCU8rCXOHWzS5wof8jg5S75y481kj3HqlpTaz" + "/EhvAXK8iC8Xz9CgPmvfLmAUNkxy0q05yV2wZAGNX0WElUOx1Lcd2FqeuRFMvBOq5TQ+SVqunfUMLic8rYsW" + "+smDHzIgjRcde8pHOZBMvmqDDzmyBLEgSbBswgHifQPDrhnGPlpk2U/nb8Sx7G8mWHEibtb8ClENcxtJEwcI0NN+erWO4Le" + "+jFVUOU0BqC4dxGBNX9AHCTZMEhfcZQ==\"}"; SignSourceData signSourceData = AlipaySignature.ExtractSignContent(response, 32); Assert.AreEqual(signSourceData.SourceData, "{\"code\":\"10000\",\"msg\":\"Success\",\"nested\":{\"a\":1,\"b\":\"2\"," + "\"array\":[\"1\",\"2\",\"3\"]},\"out_trade_no\":\"20150320010101001\",\"trade_no\":\"2019062322001446881000041395\"}"); }
public void should_extract_correct_sign_content_when_response_encrypted_and_with_blank_space() { string response = "{\"alipay_trade_create_response" + "\" : \"eyJjb2RlIjoiMTAwMDAiLCJtc2ciOiJTdWNjZXNzIiwib3V0X3RyYWRlX25vIjoiMjAxNTAzMjAwMTAxMDEwMDEiLCJ0" + "cmFkZV9ubyI6IjIwMTkwNjIzMjIwMDE0NDY4ODEwMDAwNDEzOTUifQ==\"," + "\"sign\":\"TS355N0QjK1r9GyD4YOsG5esszSUhESgwu1q5" + "+e1sWwqtPYe30CQ3v0QTEDdxYN9vm2No8V1KzuTSadrA4SZSkEkRchrcdVHCU8rCXOHWzS5wof8jg5S75y481kj3HqlpTaz" + "/EhvAXK8iC8Xz9CgPmvfLmAUNkxy0q05yV2wZAGNX0WElUOx1Lcd2FqeuRFMvBOq5TQ+SVqunfUMLic8rYsW" + "+smDHzIgjRcde8pHOZBMvmqDDzmyBLEgSbBswgHifQPDrhnGPlpk2U/nb8Sx7G8mWHEibtb8ClENcxtJEwcI0NN+erWO4Le" + "+jFVUOU0BqC4dxGBNX9AHCTZMEhfcZQ==\"}"; SignSourceData signSourceData = AlipaySignature.ExtractSignContent(response, 32); Assert.AreEqual(signSourceData.SourceData, "\"eyJjb2RlIjoiMTAwMDAiLCJtc2ciOiJTdWNjZXNzIiwib3V0X3RyYWRlX25vIjoiMjAxNTAzMjAwMTAxMD" + "EwMDEiLCJ0cmFkZV9ubyI6IjIwMTkwNjIzMjIwMDE0NDY4ODEwMDAwNDEzOTUifQ==\""); }
private static string ParseSignSourceData(string body, string rootNode, int indexOfRootNode) { int signDataStartIndex = indexOfRootNode + rootNode.Length + 2; int indexOfSign = body.IndexOf("\"" + AlipayConstants.SIGN + "\"", StringComparison.Ordinal); if (indexOfSign < 0) { return(null); } SignSourceData signSourceData = AlipaySignature.ExtractSignContent(body, signDataStartIndex); //如果提取的待验签原始内容后还有rootNode if (body.LastIndexOf(rootNode, StringComparison.Ordinal) > signSourceData.EndIndex) { throw new AopException("检测到响应报文中有重复的" + rootNode + ",验签失败。"); } return(signSourceData.SourceData); }