Sabre SOAP CreatePassengerNameRecordRQ NEED 5 error - sabre

I am trying to use the Sabre CreatePassengerNameRecordRQ SOAP request to create an PNR.
It is an Orchestrated APIs which combines EnhancedAirBookRQ and PassengerDetailsRQ
I keep running into error
EndTransactionLLSRQ: NEED 5.
I couldn't find information anywhere on what this error message means.
Any advise greatly appreciated.
Reponse
<ApplicationResults xmlns="http://services.sabre.com/STL_Payload/v02_01" status="NotProcessed">
<Error type="Application" timeStamp="2018-08-06T12:15:24.587-05:00">
<SystemSpecificResults>
<Message code="ERR.SP.BUSINESS_ERROR">PNR has not been created successfully, see remaining messages for details</Message>
</SystemSpecificResults>
</Error>
<Warning type="BusinessLogic" timeStamp="2018-08-06T12:15:23.989-05:00">
<SystemSpecificResults>
<Message code="WARN.SWS.HOST.ERROR_IN_RESPONSE">EndTransactionLLSRQ: NEED 5.</Message>
</SystemSpecificResults>
</Warning>
<Warning type="BusinessLogic" timeStamp="2018-08-06T12:15:24.034-05:00">
<SystemSpecificResults>
<Message code="WARN.SWS.HOST.ERROR_IN_RESPONSE">EndTransactionLLSRQ: NEED 5.</Message>
</SystemSpecificResults>
</Warning>
</ApplicationResults>

This is due to the TJR requirement of a 5. remark in the PNR.
Option 1: Add a 5. remark. You can ask the agency if they require a specific remark (as they do have the setting active to require the remark), and put that remark in. Otherwise just add any 5. remark to the PNR.
Option 2: Turn off the 5. requirement.
To do this you will need a Sabre terminal with SI9 access. Log into the PCC and do SI9 then W/KINR¥OFF
Hope this helps

Related

'DailySalesReportRQ' responds with an error 'TICKETING DATABASE ERROR'

Request to 'DailySalesReport' service responds with an error. What could be the possible reason?
security1.BinarySecurityToken = security.BinarySecurityToken;
var response = client.DailySalesReportRQ(ref messageHeader, ref security1, request.DailySalesReportRQ);
I received this error too "ERR.SWS.HOST.ERROR_IN_RESPONSE".
This is the request
<?xml version="1.0" encoding="UTF-16"?>
-<DailySalesReportRQ Version="2.0.0" TimeStamp="2020-12-13T18:34:56.6500346+03:00" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SalesReport xmlns="http://webservices.sabre.com/sabreXML/2011/10" StartDate="2018-10-01" PseudoCityCode="IPCC1"/>
</DailySalesReportRQ>
This is the response
<?xml version="1.0" encoding="UTF-16"?>
-<DailySalesReportRS Version="2.0.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-<ApplicationResults xmlns="http://services.sabre.com/STL/v01" status="NotProcessed">
-<Error timeStamp="2020-12-19T18:29:41+03:00" type="BusinessLogic">
-<SystemSpecificResults>
<Message>TICKETING DATABASE ERROR</Message>
<ShortText>ERR.SWS.HOST.ERROR_IN_RESPONSE</ShortText>
</SystemSpecificResults>
</Error>
</ApplicationResults>
</DailySalesReportRS>
#Oguzhn,
First of all, you must have a credential to access Sabre's web services, since with this access you should have access to a PCC with the volume of tickets issued, that is, in the CERT.SABRE environment you should have already issued tickets in this PCC.
Once you meet this requirement you will be able to generate daily sales reports with up to 30 days retroactive ie D-30.
In your request you are using the example settings ...
StartDate="YYYY-MM-DD", only the last 30 days
PseudoCityCode = "IPCC1", travel agency sales unit
... in this case you must adjust these values with real information from the travel agency, as you are using the references in the development document.
Here is an example:
<SalesReport StartDate="2020-12-20" PseudoCityCode="4DC2"/>
You must change StartDate and PseudoCityCode to your agency's information.

Your app(s) are using a content provider with an unsafe implementation of openFile

I've received this email after publishing my app on playstore:
Hello Google Play Developer,
We reviewed [MyAppName], with package name com.example.myappname, and found that your app uses software that contains security vulnerabilities for users. Apps with these vulnerabilities can expose user information or damage a user’s device, and may be considered to be in violation of our Malicious Behavior policy.
Below is the list of issues and the corresponding APK versions that were detected in your recent submission. Please migrate your apps to use the updated software as soon as possible and increment the version number of the upgraded APK.
Your app(s) are using a content provider with an unsafe implementation of openFile.
To address this issue, follow the steps in this Google Help Center article.
Vulnerability APK Version(s) Deadline to fix
Path Traversal
Your app(s) are using a content provider with an unsafe implementation of openFile.
To address this issue, follow the steps in this Google Help Center article.
1 June 25, 2019
Vulnerability APK Version(s) Deadline to fix
To confirm you’ve upgraded correctly, submit the updated version of your app to the Play Console and check back after five hours. We’ll show a warning message if the app hasn’t been updated correctly.
I've used Realm database, iText pdf library, file provider in my app. I'm using FileProvider to open pdf file from storage using intent.
res>xml>provider_paths.xml
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path
name="external_files"
path="." />
</paths>
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.example.appName">
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application
android:allowBackup="true"
android:icon="#mipmap/ic_icon"
android:label="#string/app_name"
android:roundIcon="#mipmap/ic_icon"
android:supportsRtl="true"
android:theme="#style/AppTheme">
...
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="#xml/provider_paths" />
</provider>
</application>
</manifest>
TemplatesFragment.java
File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/MyCvs/Templates/" + templateName);
Uri uriPdf = FileProvider.getUriForFile(getActivity(), BuildConfig.APPLICATION_ID + ".provider", file);
Intent target = new Intent(Intent.ACTION_VIEW);
target.setDataAndType(uriPdf, "application/pdf");
target.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
target.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
Intent intent = Intent.createChooser(target, "Open File");
try {
startActivity(intent);
} catch (Exception e) {
// Instruct the user to install a PDF reader here, or something
Toast.makeText(getActivity(), "" + e.getMessage(), Toast.LENGTH_SHORT).show();
}
Don't put "." in the path, instead, give the name of the folder that you wanna use.
For example, If you want to access/use Download folder then in provider_paths.xml:
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-path
name="downloads"
path="Download/" />
</paths>
They actually provide one with all one needs to know; see support.google.com:
Implementations of openFile in exported ContentProviders can be vulnerable if they do not properly validate incoming Uri parameters. A malicious app can supply a crafted Uri (for example, one that contains “/../”) to trick your app into returning a ParcelFileDescriptor for a file outside of the intended directory, thereby allowing the malicious app to access any file accessible to your app.
The FileProvider must reject any Uri containing .. ...which are deemed "exploitable".

WCF client methods called from ASP.NET app return 404 Not Found

I have a library that contains a Service Reference generated proxy to a remote ASMX web service. When I try to call methods on that proxy from an ASP.NET application, I get the following error:
System.ServiceModel.EndpointNotFoundException: There was no endpoint
listening at https://domain.com/path/to/the.asmx that could accept the
message. This is often caused by an incorrect address or SOAP action.
See InnerException, if present, for more details. --->
System.Net.WebException: The remote server returned an error: (404)
Not Found.
However, if I call the same methods from a simple console app dropped into the bin folder (and therefore referencing the exact same libraries), it works. I have the same, simple configuration in web.config and the console app's app.config:
<system.serviceModel>
<bindings>
<customBinding>
<binding name="ServicesSoap12">
<textMessageEncoding messageVersion="Soap12" />
<httpsTransport />
</binding>
</customBinding>
</bindings>
<client>
<endpoint address="https://domain.com/path/to/the.asmx"
binding="customBinding" bindingConfiguration="ServicesSoap12"
contract="TheContract" name="ServicesSoap12" />
</client>
</system.serviceModel>
Tracing revealed no further useful information. The ASMX endpoint is definitely available. What could cause this behavior, and what other troubleshooting steps can I take?
This turned out to be a parameter issue. My production code was passing null for an optional string parameter, but my test code was passing a guid. The parameter is optional in the contract, so I don't understand why it triggered a 404, but I'm able to consistently reproduce the problem by passing null.
The contract parameter is defined as follows:
<s:element minOccurs="0" maxOccurs="1" name="userdef1" type="s:string"/>
The 404 error threw me off from the beginning. It's a reminder to always write your test code exactly like the code that doesn't work.

TravelItineraryReadRQ version

Sabre Support.
I am confused about the version I can use in production SOAP API
In this page, it says current production version is 3.5.0
https://developer.sabre.com/docs/soap_apis/management/itinerary/Get_Itinerary/resources
But when I test production soap api according version 3.5.0 schema, it gives me time out.
Then I copy and modify the request according to your SOAPUI project sample,
which is version 2.0.0, it works.
Does it related to the CPAId I got from my boss?
Request Samples:
soap body as version 3.5.0. it gives me time out with or without xmlns in TravelItineraryReadRQ element.
<TravelItineraryReadRQ Version="3.5.0"
xmlns="http://webservices.sabre.com/sabreXML/2011/10"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<MessagingDetails></MessagingDetails>
<UniqueID ID="AAAAAA"/>
<ReturnOptions UnmaskCreditCard="false"/>
</TravelItineraryReadRQ>
soap body version 2.0.0.0. This works perfectly.
<TravelItineraryReadRQ Version="2.0.0"
xmlns="http://webservices.sabre.com/sabreXML/2011/10" xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<MessagingDetails>
<Transaction Code="PNR"/>
</MessagingDetails>
<UniqueID ID="AAAAAA"/>
</TravelItineraryReadRQ>
Cheers
Mark Lin.
TravelItineraryReadRQ
Is it possible that you are using TravelItineraryReadLLSRQ as an ActionCode?
If so, please try with TravelItineraryReadRQ and let me know if that does it.

How to set custom error message for Quota violation?

I tried multiple options of publishing custom error message for Quota violation. But I was not able to produce custom error message.
Please provide step by step process to generate custom error message. Thanks!
Create a Raise Fault Policy (but don't attach it to a flow):
<RaiseFault async="false" continueOnError="false" enabled="true" name="Fault-Bad-Quota">
<DisplayName>Fault-Bad-Quota</DisplayName>
<FaultRules/>
<Properties/>
<FaultResponse>
<Set>
<Headers/>
<Payload contentType="text/plain">My Custom Fault for {fault.name}</Payload>
<StatusCode>500</StatusCode>
<ReasonPhrase>Server Error</ReasonPhrase>
</Set>
</FaultResponse>
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</RaiseFault>
Add a Conditional Fault to your Proxy configuration
<FaultRules>
<FaultRule name="BadQuota">
<Step>
<Name>Fault-Bad-Quota</Name>
</Step>
<Condition>fault.name = "QuotaViolation"</Condition>
</FaultRule>
</FaultRules>
You can add a global fault policy to your proxy default.xml. If you're using the UI go to the word "default" right under your target.

Resources