Rezlynx API

pmschg_PostToRoom

This method is used to post charges to a resident guest folio. The charges can consist of one or more individual items, which can optionally be grouped under a header.

Resident guest folio The charges can be posted against a room reference (room name or number), against a telephone extension number associated a room, or against a reservation number. If posting against a room reference or telephone extension, the system will actually post to the primary guest reservation which is resident in the room. In the vast majority of cases, there would only be one resident reservation associated with a room, but it is technically possible to have more than one. It is generally better to post to a reservation reference to be absolutely clear on this point. Furthermore, if <FolioID> is supplied, it is possible to post to an individual guest folio within a multi-guest reservation, e.g. if splitting a bill between room guests. If no <FolioID> is supplied, the system will post to the primary guest folio in a multi-guest reservation (which will have a Folio ID of '1').
Grouped under a header If the <Header> element is excluded, then the items will not be grouped together and each line item will appear on the guest bill as a separate item. However, if the <Header> element is included, the items will be grouped together on the guest bill using the description supplied in the header and the value equal to the total of the individual values. This option is preferred by many hoteliers. Grouping items together like this also makes it easier to view in posting reports and on-screen bills. In all cases the individual items are stored for reporting and financial analysis.
Sales analysis codes Each charge must be posted with a corresponding sales analysis code used to identify the type of charge, e.g. telephone, bar, spa, and so on. The codes in use for a site are configurable and therefore can be different from site to site. The list of codes in use can be obtained using pmscfg_AnalList.
Tax codes VAT (Value Added Tax) is calculated by the Rezlynx PMS according to the sales analysis code and is therefore not referenced specifically in the posting method. All values used in the posting method should be gross values.

Parameters

NameTypeDescription
SessionIdstringSession ID, obtained at log-in
PostingMethod"PostingMethod_RoomID", "PostingMethod_Booking_RoomRef" or "PostingMethod_TelExtNo"Posting method (room, booking reference or telephone extension)
PostingParameterstringThis is the value of the parameter defined by PostingMethod, e.g. if using PostingMethod_RoomID then PostingParameter would be the room name or number, e.g. "200"
FolioIDintFolio ID, if the bill is split by multiple folios
Header(Header, see below)Posting header
Transactions(Financial transactions, see below)List of financial transactions

Parameters (Header)

NameTypeDescription
AnalysisCodestringSales analysis code
DescriptionstringDescription
QuantityintQuantity
ExternalInvoiceNostringOptional: if posted transactions are already invoiced in an external system, e.g. POS, the document number of that operation can be passed as a parameter

Parameters (Financial Transaction)

NameTypeDescription
AnalysisCodestringSales analysis code
DescriptionstringDescription
QuantityintQuantity
GrossTotaldecimalGross total value
ShiftNointShift number (or '-1' if not applicable)

Returned data

None

Request URL

https://pmsws.eu.guestline.net/rlxsoaprouter/rlxsoap.asmx?op=pmschg_PostToRoom

Request headers

Name Type Description
(optional) string Media type of the body sent to the API.

Request body

<pmschg_PostToRoom xmlns="http://tempuri.org/RLXSOAP19/RLXSOAP19">
    <SessionID>d9de5589-5781-45bd-a5bd-a385f6d19bce</SessionID>
    <PostingMethod>PostingMethod_RoomID</PostingMethod>
    <PostingParameter>002</PostingParameter>
    <FolioID>-1</FolioID>
    <Header>
        <AnalysisCode>FOOD</AnalysisCode>
        <Description>Crystal Room – Beverage – Order No. 12345</Description>
        <Quantity>1</Quantity>
        <ExternalInvoiceNo>INV001</ExternalInvoiceNo>
    </Header>
    <Transactions>
        <FinancialTransaction>
            <AnalysisCode>FOOD</AnalysisCode>
            <Description>Dinner</Description>
            <Quantity>1</Quantity>
            <GrossTotal>35.50</GrossTotal>
            <ShiftNo>-1</ShiftNo>
        </FinancialTransaction>
        <FinancialTransaction>
            <AnalysisCode>BARDRINK</AnalysisCode>
            <Description>Bar Drinks</Description>
            <Quantity>1</Quantity>
            <GrossTotal>12.75</GrossTotal>
            <ShiftNo>-1</ShiftNo>
        </FinancialTransaction>
    </Transactions>
</pmschg_PostToRoom>

Responses

200 OK

Representations

<pmschg_PostToRoomResponse xmlns="http://tempuri.org/RLXSOAP19/RLXSOAP19">
  <pmschg_PostToRoomResult>
    <ExceptionCode>0</ExceptionCode>
    <ExceptionDescription>No error</ExceptionDescription>
  </pmschg_PostToRoomResult>
</pmschg_PostToRoomResponse>

Code samples

@ECHO OFF



curl -v -X POST "https://pmsws.eu.guestline.net/rlxsoaprouter/rlxsoap.asmx?op=pmschg_PostToRoom"
-H "Content-Type: text/xml"

--data-ascii "{body}" 
using System;
using System.Net.Http.Headers;
using System.Text;
using System.Net.Http;
using System.Web;

namespace CSHttpClientSample
{
    static class Program
    {
        static void Main()
        {
            MakeRequest();
            Console.WriteLine("Hit ENTER to exit...");
            Console.ReadLine();
        }
        
        static async void MakeRequest()
        {
            var client = new HttpClient();
            var queryString = HttpUtility.ParseQueryString(string.Empty);

            // Request headers


            
            
            var uri = "https://pmsws.eu.guestline.net/rlxsoaprouter/rlxsoap.asmx?op=pmschg_PostToRoom&" + queryString;

            HttpResponseMessage response;

            // Request body
            byte[] byteData = Encoding.UTF8.GetBytes("{body}");

            using (var content = new ByteArrayContent(byteData))
            {
               content.Headers.ContentType = new MediaTypeHeaderValue("< your content type, i.e. application/json >");
               response = await client.PostAsync(uri, content);
            }

        }
    }
}	
// // This sample uses the Apache HTTP client from HTTP Components (http://hc.apache.org/httpcomponents-client-ga/)
import java.net.URI;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

public class JavaSample 
{
    public static void main(String[] args) 
    {
        HttpClient httpclient = HttpClients.createDefault();

        try
        {
            

            URIBuilder builder = new URIBuilder("https://pmsws.eu.guestline.net/rlxsoaprouter/rlxsoap.asmx?op=pmschg_PostToRoom");


            URI uri = builder.build();
            HttpPost request = new HttpPost(uri);
            request.setHeader("Content-Type", "text/xml");


            // Request body
            StringEntity reqEntity = new StringEntity("{body}");
            request.setEntity(reqEntity);

            HttpResponse response = httpclient.execute(request);
            HttpEntity entity = response.getEntity();

            if (entity != null) 
            {
                System.out.println(EntityUtils.toString(entity));
            }
        }
        catch (Exception e)
        {
            System.out.println(e.getMessage());
        }
    }
}

<!DOCTYPE html>
<html>
<head>
    <title>JSSample</title>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
</head>
<body>

<script type="text/javascript">
    $(function() {
        var params = {
            // Request parameters
        };
                  

        $.ajax({
            url: "https://pmsws.eu.guestline.net/rlxsoaprouter/rlxsoap.asmx?op=pmschg_PostToRoom" + $.param(params),
            beforeSend: function(xhrObj){
                // Request headers
                xhrObj.setRequestHeader("Content-Type","text/xml");
            },
            type: "POST",
            // Request body
            data: "{body}",
        })
        .done(function(data) {
            alert("success");
        })
        .fail(function() {
            alert("error");
        });
    });
</script>
</body>
</html>
#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
                      

    NSString* path = @"https://pmsws.eu.guestline.net/rlxsoaprouter/rlxsoap.asmx?op=pmschg_PostToRoom";
    NSArray* array = @[
                         // Request parameters
                         @"entities=true",
                      ];
    
    NSString* string = [array componentsJoinedByString:@"&"];
    path = [path stringByAppendingFormat:@"?%@", string];

    NSLog(@"%@", path);

    NSMutableURLRequest* _request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:path]];
    [_request setHTTPMethod:@"POST"];
    // Request headers
    [_request setValue:@"text/xml" forHTTPHeaderField:@"Content-Type"];
    // Request body
    [_request setHTTPBody:[@"{body}" dataUsingEncoding:NSUTF8StringEncoding]];
    
    NSURLResponse *response = nil;
    NSError *error = nil;
    NSData* _connectionData = [NSURLConnection sendSynchronousRequest:_request returningResponse:&response error:&error];

    if (nil != error)
    {
        NSLog(@"Error: %@", error);
    }
    else
    {
        NSError* error = nil;
        NSMutableDictionary* json = nil;
        NSString* dataString = [[NSString alloc] initWithData:_connectionData encoding:NSUTF8StringEncoding];
        NSLog(@"%@", dataString);
        
        if (nil != _connectionData)
        {
            json = [NSJSONSerialization JSONObjectWithData:_connectionData options:NSJSONReadingMutableContainers error:&error];
        }
        
        if (error || !json)
        {
            NSLog(@"Could not parse loaded json with error:%@", error);
        }
        
        NSLog(@"%@", json);
        _connectionData = nil;
    }
    
    [pool drain];

    return 0;
}
<?php
// This sample uses the Apache HTTP client from HTTP Components (http://hc.apache.org/httpcomponents-client-ga/)
require_once 'HTTP/Request2.php';
                      

$request = new Http_Request2('https://pmsws.eu.guestline.net/rlxsoaprouter/rlxsoap.asmx?op=pmschg_PostToRoom');
$url = $request->getUrl();

$headers = array(
    // Request headers
    'Content-Type' => 'text/xml',
);

$request->setHeader($headers);

$parameters = array(
    // Request parameters
);

$url->setQueryVariables($parameters);

$request->setMethod(HTTP_Request2::METHOD_POST);

// Request body
$request->setBody("{body}");

try
{
    $response = $request->send();
    echo $response->getBody();
}
catch (HttpException $ex)
{
    echo $ex;
}

?>
########### Python 2.7 #############
import httplib, urllib, base64

headers = {
    # Request headers
    'Content-Type': 'text/xml',
}

params = urllib.urlencode({
})

try:
    conn = httplib.HTTPSConnection('pmsws.eu.guestline.net/rlxsoaprouter/rlxsoap.asmx')


    conn.request("POST", "pmschg_PostToRoom%s" % params, "{body}", headers)
    response = conn.getresponse()
    data = response.read()
    print(data)
    conn.close()
except Exception as e:
    print("[Errno {0}] {1}".format(e.errno, e.strerror))

####################################

########### Python 3.2 #############
import http.client, urllib.request, urllib.parse, urllib.error, base64

headers = {
    # Request headers
    'Content-Type': 'text/xml',
}

params = urllib.parse.urlencode({
})

try:
    conn = http.client.HTTPSConnection('developers.azure-api.net')
    conn.request("POST", "/rezlynx-web-service/?soapAction=http://tempuri.org/RLXSOAP19/RLXSOAP19/pmschg_PostToRoom&%s" % params, "{body}", headers)
    response = conn.getresponse()
    data = response.read()
    print(data)
    conn.close()
except Exception as e:
    print("[Errno {0}] {1}".format(e.errno, e.strerror))

####################################
require 'net/http'


uri = URI('https://pmsws.eu.guestline.net/rlxsoaprouter/rlxsoap.asmx?op=pmschg_PostToRoom')


request = Net::HTTP::Post.new(uri.request_uri)
# Request headers
request['Content-Type'] = 'text/xml'
# Request body
request.body = "{body}"

response = Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https') do |http|
    http.request(request)
end

puts response.body