Exemple #1
0
        /// <summary>
        /// Creates a string that includes the information from the request in a
        /// standardized (canonical) format.
        /// </summary>
        /// <param name="uri"></param>
        /// <param name="httpMethodName"></param>
        /// <param name="parameters"></param>
        /// <param name="preSignedHeaders"></param>
        /// <param name="requestPayload"></param>
        /// <returns>canonical request string</returns>
        /// <seealso cref="http://amazonpaycheckoutintegrationguide.s3.amazonaws.com/amazon-pay-api-v2/signing-requests.html"/>
        public string CreateCanonicalRequest(ApiRequest apiRequest, Dictionary <String, List <String> > preSignedHeaders)
        {
            string        path = apiRequest.Path.AbsolutePath;
            StringBuilder canonicalRequestBuilder = new StringBuilder();

            // if a body was passed to the request, convert it into a JSON string
            string body = string.Empty;

            if (apiRequest.Body != null)
            {
                body = apiRequest.BodyAsJsonString;
            }

            canonicalRequestBuilder.Append(apiRequest.HttpMethod.ToString())
            .Append(LineSeparator)
            .Append(canonicalBuilder.GetCanonicalizedURI(path))
            .Append(LineSeparator)
            .Append(canonicalBuilder.GetCanonicalizedQueryString(apiRequest.QueryParameters))
            .Append(LineSeparator)
            .Append(canonicalBuilder.GetCanonicalizedHeaderString(preSignedHeaders))
            .Append(LineSeparator)
            .Append(canonicalBuilder.GetSignedHeadersString(preSignedHeaders))
            .Append(LineSeparator)
            .Append(canonicalBuilder.HashThenHexEncode(body));

            return(canonicalRequestBuilder.ToString());
        }