/// <summary>
        /// PreparedPayment contacts the server with the payment request data, and returns a GET URL to that
        /// payment. This is convenient for creating an order and then sending the URL e.g. in an email.
        /// </summary>
        /// <returns>PaymentLink</returns>
        public Uri PreparePayment(String ipAddress)
        {
            IpAddress = ipAddress;
            CalculateRequestValues();
            var    xmlBuilder = new HostedXmlBuilder();
            string xml        = xmlBuilder.GetXml(this);

            var secretWord = CrOrderBuilder.GetConfig()
                             .GetSecretWord(PaymentType.HOSTED, CrOrderBuilder.GetCountryCode());
            var sentMerchantId = CrOrderBuilder.GetConfig()
                                 .GetMerchantId(PaymentType.HOSTED, CrOrderBuilder.GetCountryCode());
            var payPageUrl = CrOrderBuilder.GetConfig()
                             .GetEndPoint(PaymentType.HOSTED);

            var baseUrl = payPageUrl.Replace("/payment", "");

            var hostedRequest = new HostedAdminRequest(xml, secretWord, sentMerchantId, baseUrl);

            var targetAddress = baseUrl + "/rest/preparepayment";

            var message    = HostedAdminRequest.HostedAdminCall(targetAddress, hostedRequest).Message;
            var messageDoc = new XmlDocument();

            messageDoc.LoadXml(message);
            var paymentId = messageDoc.SelectSingleNode("//id").InnerText;

            return(new Uri(baseUrl + "/preparedpayment/" + paymentId));
        }