Example #1
0
		/// <summary>
		/// Sends request to the server and returns responses.
		/// </summary>
		/// <returns>
		/// Array of Response returned by server.
		/// </returns>
        public Response[] GetResponses()
        {
            List<Response> responses = new List<Response>();
            HttpWebRequest request = CreateWebRequest();
            HttpWebResponse webResponse = (HttpWebResponse)request.GetResponse();
            string responseText = new StreamReader(webResponse.GetResponseStream()).ReadToEnd();
            XElement responseXml = XElement.Parse(responseText);
            IEnumerable<XElement> envelopeElements = responseXml.Descendants(OperationEnvelopeNodeName);
            foreach (XElement envelope in envelopeElements)
            {
                Response liqpayResponse;
                string encodedOperationXml = envelope.Element(OperationXmlNodeName).Value.Trim();
                string operationXml = Encoding.UTF8.GetString(Convert.FromBase64String(encodedOperationXml));
                string signature = envelope.Element(SignatureNodeName).Value.Trim();
                if (this.SignatureProvider.GenerateSignature(operationXml) == signature)
                    liqpayResponse = Response.Create(operationXml);
                else
                    liqpayResponse = new InvalidResponse(ErrorCode.SignatureError, "Signatures does not match.", responseText);
                responses.Add(liqpayResponse);
            }

            return responses.ToArray();
        }
Example #2
0
		/// <summary>
		/// Parses server operation response XML and creates instance of class derived from Response which describes concrete response.
		/// </summary>
		/// <param name="operationXml">
		/// Operation response XML returned by server
		/// </param>
		/// <returns>
		/// Instance of class derived from Response which represents parsed operation response
		/// </returns>
        public static Response Create(string operationXml)
        {
            Response response;

            try
            {
                XElement operationXmlElement = XElement.Parse(operationXml);
                string action = operationXmlElement.Element(ActionNodeName).Value.Trim();
                switch (action.ToLower(CultureInfo.InvariantCulture))
                {
                    case LiqPayAction.SendMoney:
                        response = SendMoneyResponse.FromXml(operationXmlElement);
                        break;
                    case LiqPayAction.ViewBalance:
                        response = ViewBalanceResponse.FromXml(operationXmlElement);
                        break;
                    case LiqPayAction.ViewTransaction:
                        response = ViewTransactionResponse.FromXml(operationXmlElement);
                        break;
					case LiqPayAction.PhoneCredit:
						response = PhoneCreditResponse.FromXml(operationXmlElement);
						break;
                    default:
                        throw new LiqPayException(ErrorCode.UnknownAction, string.Format(CultureInfo.InvariantCulture, "Unknown LiqPay action: '{0}'.", action), operationXml);
                }
                response.Action = action;
                response.ApiVersion = operationXmlElement.Element(VersionNodeName).Value.Trim();
                response.Status = operationXmlElement.Element(StatusNodeName).Value.Trim();
                if (!response.Success)
                {
                    response.Code = operationXmlElement.Element(CodeNodeName).Value.Trim(ResponseTrimChars);
                    response.ResponseDescription = operationXmlElement.Element(ResponseDescriptionNodeName).Value.Trim(ResponseTrimChars);
                }
            }
            catch
            {
                response = new InvalidResponse();
                response.ResponseDescription = "Response xml is not well formed.";
            }
            response.ResponseText = operationXml;

            return response;
        }