{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"a9afa7ed-e267-4239-a688-a54724dde0ff","name":"Paygistix Client Developer's Guide","description":"<a href=\"https://why.pay.link/images/LearningCenter/more/image_48.png\"><img src=\"https://why.pay.link/images/LearningCenter/more/image_48.png\"></a>\n\n<h1>About this guide</h1><h2>Intended Audience</h2>\n\nThis guide is intended for ISVs looking to integrate their application with a robust payment solution that:\n\n<ul><li><p>Removes the POS application from the scope of PA-DSS compliance</p></li><li><p>Minimizes an end user’s or service provider’s scope of PCI DSS compliance</p></li><li><p>Provides a solution for EMV, NFC and other emerging payment technologies</p></li><li><p>Is backwards compatible with any integration (e.g. if there’s a new release of Paygistix Client, existing integrations will continue to function normally)</p></li><li><p>Offers value added technologies such as store-and-forward, signature capture, on-device tipping, digital<br>receipts, loyalty and more with minimal to no coding required</p></li><li><p>Allows users to use new hardware without requiring additional coding from the ISV</p></li></ul><h2>Associated Documentation</h2>\n\nCalls to Paygistix Client (covered in this document), Paygistix Gateway web services (covered in the Paygistix Core API Guide and associated SDK kits), Paygistix Web (covered in the Paygistix Web SDK), Paygistix Cloud (covered in the Paygistix Cloud Developers Guide and associated SDK kits), and PayLink (Covered covered in the PayLink API requirements document, are compatible and may be interchanged where appropriate. In other words, all transactions ultimately connect up to the Paygistix Gateway and tokens (referred to as PNRef) supplied in responses from any one of our integration technologies can be subsequently used to make calls with any other of our integration technologies.\n\n<h2>Supported Platforms</h2>\n\nPaygistix Client can be installed on the following Microsoft Operating Systems:\n\n<ul><li><p>Windows 7 or higher</p></li><li><p>Windows Server 2012 R2 or higher</p></li></ul>\n\nIn addition to the operating system, the following software needs to also be installed:\n\n<ul><li><p>Windows Script Host</p></li><li><p>Microsoft .NET Framework 4.5 or higher</p></li><li><p>Microsoft MSXML component</p></li></ul><h2>Windows Scripting</h2>\n\nThroughout this document we will be using the Microsoft Windows Script host to demonstrate sample code. If you would like a primer on Windows Scripting the following link can provide some valuable information: <a href=\"http://www.microsoft.com/technet/scriptcenter/topics/beginner/firststeps.mspx/\">http://www.microsoft.com/technet/scriptcenter/topics/beginner/firststeps.mspx/</a>\n\nThe Windows Script Host utility can launch small programs written in VBScript; which is a subset of the Microsoft Visual Basic programming language.\n\n<h2>MSXML Requirements</h2>\n\nMost of the scripts discussed in this document include some level of XML input and output. For these scripts to run and make the necessary internet requests, we will be utilizing MSXML which is a library of functions found in most installations of Windows.\n\nIt is likely that the example code included in this integration kit will work with the version of MSXML you have already installed. If you need further information on installing this library, please see the following link for help: [http://support.microsoft.com/kb/324460/](http://support.microsoft.com/kb/324460/)\n\n<h1>Installing the Application</h1><h2>Prerequisites</h2>\n\nBefore running the installer you should ensure that you have Microsoft .NET Framework 4.5 or higher installed. This can be downloaded directly from Microsoft using the following link if required.  \n<a href=\"http://www.microsoft.com/en-us/download/details.aspx?id=30653\">http://www.microsoft.com/en-us/download/details.aspx?id=30653/</a>\n\n<h2>Installing</h2><ol><li><p>Request a sandbox account here<a href=\"http://why.pay.link/developers\">http://why.pay.link/developers</a>.</p></li><li><p>A developer support representative will email you the installer package and an activation code</p></li><li><p>Run the install package as administrator.</p></li><li><p>Enter the activation Code. To request an additional activation code, contact developer support at 888-472-9564 or devsupport@paymentlogistics.com.</p></li></ol><h1>Configuration Parameters</h1><p>The following are the main configuration parameters that will be configured on your behalf by Payment Logistics. To request a configuration change, contact contact developer support at 888-472-9564 or devsupport@paymentlogistics.com.</p><ul><li><p><b>HttpServerPort = 8080</b></p></li><p>The port number Client uses to listen for HTTP requests.</p><li><p><b>ServerDomainOrIP = 127.0.0.1</b></p></li><p>The IP address to listen on, which is normally set to 127.0.0.1, except when running on a server. See the Advanced Features section for more information.</p><li><p><b>Gateway = https://cert.paygistix.net</b></p></li><p>The URL of the Paygistix gateway. For certification and testing use https://cert.paygistix.net , for production use https://ipn3.paygistix.net.</p><li><p><b>HttpsServerPort = 8081</b></p></li><p>The port number to use when using a local SSL connection. Contact Payment Logistics about how to install a local certificate for SSL.</p><li><p><b>WatchFolder = “c:\\folder\\” or “\\\\UNCPath\\Folder”</b></p></li><p>When using the filedrop method (for legacy systems that do not want to support more modern HTTP communication methods), this folder is set to listen for file requests to trigger transactions. We recommend setting this value to a specific folder on the same machine that Paygistix Client is installed. Using UNC file paths are less efficient as they cause Paygistix Client to poll for files rather than use windows messaging which is trigger based.</p><li><p><b>SAFMode=Proactive|Auto</b></p></li><p><b>Proactive </b>= If Paygistix Client detects that a transaction cannot be run online, SAF will automatically be enabled.</p><p><b>Auto </b>= Paygistix Client reads the response from the Pax device and/or Gateway, and depending on the response, the cardholder will be prompted to run the transaction offline. Auto mode was created to cover scenarios not covered by proactive mode, and it can be enabled alongside proactive mode.</p><li><p><b>AllowOfflineVoid = ON | OFF</b></p></li><ul><li><p><b>ON </b>= Allow voids of offline transactions that have not yet been uploaded/</p></li><li><p><b>OFF </b>= Blocks the voiding of offline transactions that have not yet been uploaded/</p></li></ul><p></p><p></p><li><p><b>ReturnExtendedCardData = YES | NO</b></p></li><p>If this value is set to YES, additional response parameters are returned when calling transactions such as /pay/auth, /pay/repeatauth, /pay/sale, /pay/repeatsale, /pay/credit, and /pay/billcard. These additional response parameters are:</p><ul><li><p><b>Last4 </b>= last 4 digits of the credit or debit card account number used</p></li><li><p><b>Name </b>= cardholder’s name</p></li></ul><p></p><li><p><b>MinimizeOnStartup = YES | NO</b></p></li><p>When set to YES, the card BIN (Bank Identification Number) is returned in Paygistix Client’s response. This is useful for POS systems that need to categorize transactions by BIN.</p><li><p><b>ReformatName= YES | NO</b></p></li><p>Returns the cardholder’s name as LASTNAME/FIRSTNAME vs. the default FIRSTNAME LASTNAME. For POS systems that create bar tabs based on the cardholder’s name, enabling this setting puts the last name first, which is desirable for some bars.</p><li><p><b>Logging = YES | NO</b></p></li><p>When set to YES, this records local Paygistix Client events in a graphical interface. The interface records events live as they happen and is useful for troubleshooting. This interface appears on the same windows endpoint Paygistix Client is running on.</p><li><p><b>LogFullParams = YES | NO</b></p></li><p>When set to YES, the full request and response parameters are logged within the Paygistix Client Control Panel, which is accessible to Payment Logistics personnel. This setting is helpful for debugging, but it should not be left on in a production environment as it can create superfluous logs.</p><li><p><b>Trace = YES | NO</b></p></li><p>When set to YES, the full request and response parameters for PATT and PayLink are logged. This setting is helpful for debugging, but it should not be left on in a production environment as it can create superfluous logs.</p><li><p><b>ReturnExpDate = YES | NO</b></p></li><p>When set to YES, pay/auth and pay/sale transaction responses include the expiration date of the card. This applies to credit, debit, and EBT.</p><li><p><b>TipOnlySale = YES | NO</b></p></li><p>When set to YES, sales where the tip amount equals the amount paid are allowed.</p><li><p><b>EMVReceipt = YES | NO</b></p></li><p>When set to “yes,” EMV receipt data is returned in the transaction response for EMV transactions.</p><li><p><b>CaptureAllTenderType = CREDIT | DEBIT |EBT | ALL</b></p></li><p>When a CaptureAll request is sent to Paygistix Client, this setting determines whether only credit, debit, or EBT batches close, or whether all of them will be closed.</p><li><p><b>PAXMode = ON | SERVER</b></p></li><ul><li><p><b>ON</b> = Use a single PAX Device</p></li><li><p><b>SERVER</b> = Run Paygistix Client in server mode allowing for remote requests and multiple PAX devices.</p></li></ul><p></p><li><p><b>PAXDevice = “COM1, {deviceid},MT30” or “192.168.0.99:10009, {deviceid},MT30”</b></p></li><p>Either the Serial or TCP/IP connection for the PAX device; Payment Logistics will supply the deviceid relating to your specific PAX device. For TCP/IP you must supply the IP address followed by the port number. Can be setup as MT30, SP30, S80, D200, D210 or S300 depending on which PAX device you have. The PAXDevice configuration is intended for use where there is a single MT30, SP30, S80, D200, or D210 associated with the Paygistix Client when used with PAXMode=ON.</p><li><p><b>PAXUserMapping =User1,192.168.0.99:10009,{deviceid1},MT30|User2,192.168.0.98:10009,{deviceid2},MT30|{…}</b></p></li><p>Similar to the PAXDevice option above, but allows multiple devices to be bound to different Paygistix users when running in server mode. PAXUserMapping is ideally suited to a multilane environment where PAXMode=SERVER. You must choose either PAXUserMapping or PAXDevice, but not both.</p><li><p><b>SNMapping=Serial1,Token1,IPAddress:Port,TerminalType1| Serial2,Token2,IPAddress:Port,TerminalType2</b></p></li><p>Similar to the PAXUserMapping option above, but allows for the use of PAX IP Registration.</p><li><p><b>PAXCaptureSignature = YES | NO</b></p></li><p>Whether to cause a PAX device to prompt the cardholder for a signature by default. If set to “NO” this can be manually initiated by sending the optional “Signature = “YES” parameter when calling the /pay/auth or /pay/sale function. Please note, when the PAX device collects a signature from the cardholder during an Auth or Sale function, that signature is automatically sent to the Paygistix Gateway and archived along with the merchant’s copy of the receipt. To capture a signature without a transaction, use the getsignature function.</p><li><p><b>SignaturePath = “c:\\Signature{PNREF}.jpg”</b></p></li><p>The name of the file to write the signature file to. This will replace {PNREF} with the transaction reference returned from the /pay/sale or /pay/auth transaction. Please note, when a signature is captured as part of a /pay/auth or /pay/sale transaction, the signature is always sent to the Paygistix Gateway for archival. The SignaturePath configuration option allows an image of the signature to also be stored on the merchant’s local windows environment.</p><li><p><b>PAXSignStatus = YES | NO</b></p></li><p><br>When set to YES, a status variable is returned to indicate the nature of the capture or whether it succeeded or not. For SignStaus, the following responses are possible:<br></p><ol><li><p>The signature was captured and stored on the terminal but not uploaded</p></li><li><p>The signature screen was aborted</p></li><li><p>The signature screen timed out</p></li><li><p>A signature was not captured</p></li><li><p>The signature uploaded successfully</p></li><li><p>The signature failed to upload</p></li><li><p>The signature was captured after the transaction had ended</p></li></ol><p></p><li><p><b>PAXTipRequest = YES | NO</b></p></li><p>Whether to automatically support inline Tip’s on the PAX device. If set to NO this can be manually initiated using the “TipRequest = YES” parameter when calling the /pay/sale function.</p><li><p><b>PAXCreditDebitButtons = YES | NO</b></p></li><p>When set to YES, a call to the /pay/sale function prompts the cardholder to choose Credit or Debit on the payment device screen, after selection the cardholder is prompted to swipe their card. If set to “NO,” this can be manually initiated by sending the “PaxCreditDebitButtons=”YES” parameter when calling. Please note, when using this feature, you will not know what tender type is used prior to the transaction occurring since the cardholder can choose their tender type on the PAX device. As such you will need to parse the “CardType” response parameter to determine the tender type and account for the sale properly in your system where desired.</p><li><p><b>PAXAutoClearBatch = YES | NO | 0-23</b></p></li><p></p><p>When set to YES, at 2am local computer time the PAX device is cleared of stored transactions (Transactions are cleared since they serve no purpose due to the fact that they are batched by the Paygistix Gateway instead of the terminal). If an hour other than 2am is desired, a whole integer between 0-23 can be set (Ex: 0 is 12:00 AM, and 23 is 11:00 PM). If set to NO, the POS will be responsible for daily clearing of the transactions using the /pay/clearbatch function.</p><li><p><b>PAXTimeoutSeconds = Numeric Value</b></p></li><p></p><p>The number of seconds that Paygistix Client will wait for a transaction to complete on a PAX Terminal. The timer begins once the transaction is sent to the terminal. If not set, the default time is 300 seconds.</p><li><p><b>PaxButtons = CDEFCGL</b></p></li><p>This parameter determines which payment buttons are displayed on the PAX screen. Since PAX devices can only show 4 buttons at a time, a combination of 4 letters max can be sent. They are the letters: C, D, E, G, or L.. These letters represent different payment types: Credit, Debit, EBT, Gift Card, and Loyalty respectively. (Usage Example: “CD” will display Credit and Debit buttons in that order. “CDEG” will display Credit, Debit, EBT and Gift buttons in that order.</p><li><p><b>TerminalResponse = YES | NO</b></p></li><p>Returns the result text from the payment device in the parameter “TerminalMessage.”</p><li><p><b>EMVReceipt = YES | NO</b></p></li><p>When set to YES, extra EMV data will be returned by Paygistix Client for Chip Card transactions. This is necessary for printing EMV receipts.</p><li><p><b>MinimizeOnStartup = YES | NO</b></p></li><p>When enabled, the Paygistix Client application window will minimize after starting up. This reduces occurrences where end users close the application window accidentally.</p><li><p><b>Note on SSL/TLS:</b></p></li><p>Beginning in Paygistix Client version 1.1.9, the server is also configured by default to listen on port 8081 for HTTPS (SSL/TLS encrypted) traffic however some additional configuration steps are required on each station. Please contact Payment Logistics for assistance with SSL/TLS configuration.</p></ul><p>Default Configuration upon installation:</p><ul><li><p>SERVERDOMAINORIP = 127.0.0.1</p></li><li><p>SERVERPORT = 8080</p></li><li><p>HTTPSSERVERPORT = 8081</p></li><li><p>GATEWAY = https://paygistixcert.paymentlogistics.net</p></li><li><p>PAXMODE = OFF</p></li></ul>\n\n*Configuration settings are no longer within the PaygistixClient.exe.config file but are now contained within the settings.xml file. This new encrypted file can be configured away from its default settings with the help of your Payment Logistics support representative.\n\n<h2>Launching Paygistix Client</h2>\n\nThe installer will add the Paygistix Client local server application to the Windows user “Startup” folder ensuring that the server automatically listens once the user logs in. Following installation, you can also manually start the server by selecting Paygistix Client from **Start->All Programs->Payment Logistics.**\n\nPaygistix Client can be run as a Windows Service. This is desirable for environments where the Windows machine running Paygistix Client is not always logged in with a windows user. To run Paygistix Client as a service, after installing:\n\n<ol><li><p>On the Windows machine, in the Windows Startup Folder, delete the Paygistix Client shortcut</p></li><li><p>Go to Windows services</p></li><li><p>ind “Paygistix Client Monitor Service”</p></li><li><p>Start the service</p></li><li><p>Set the Startup type to Automatic</p></li><li><p>Save</p></li></ol><h2>Paygistix Client Application Infrastructure</h2><p>The following graphics illustrate how Paygistix Client works in Client Mode and Server Mode.</p><p>Client Mode with Payment Terminal Option</p>\n\n<a href=\"https://why.pay.link/images/DeveloperCenter/client_mode.jpg\"><img src=\"https://why.pay.link/images/DeveloperCenter/client_mode.jpg\"></a>\n\n<p>Server Mode with Payment Terminal - Compatible with POS Systems Running on All Operating Systems</p>\n\n<a href=\"https://why.pay.link/images/DeveloperCenter/server_mode.jpg\"><img src=\"https://why.pay.link/images/DeveloperCenter/server_mode.jpg\"></a>\n\nPaygistix Client runs as a local web server on a Windows endpoint. In Client mode it runs on the actual POS workstation and is designed to accept local requests. In Server mode, it runs on a networked Windows endpoint and is designed to accept requests from multiple other endpoints which could be POS workstations, POS servers, mobile endpoints web servers or a combination thereof. Your application connects directly to Paygistix Client via HTTP or HTTPS. All payment screens and integrated terminals are managed by Paygistix Client in separate memory space and Paygistix Client and its integrated terminals handle all connections to the Paygistix Gateway. An integration with Paygistix Client provides a secure means of transaction processing outside of your application, maintains the benefits of a fully integrated payment processing solution and eliminates many of the challenges faced by application developers which are associated with integrated payments.\n\n<h1>Advanced Features</h1>\n\nIn this section we will cover some additional more advanced features including running Paygistix Client on a server with multiple machines attaching to it as clients and a method to communicate via the file system rather than via HTTP/HTTPS.\n\n<h2>Running Paygistix Client in Server Mode</h2><p>The main purpose for running Paygistix Client in server mode is if you have a number of POS devices and you want to centralize a single dedicated machine to handle the transaction routing for you, or you have a non-windows environment and want to require only a single windows endpoint to use Paygistix Client with. A change must be made to the Paygistix Client configuration settings to ensure the server is listening on a valid network IP address. This must be a static IP address too. You will need to supply the static IP address you wish to use to Payment Logistics to have the Paygistix Client configuration updated.</p><p>Your server firewall rules must allow machines on the network to connect via TCP/IP over the allocated port. The default port Paygistix Client listens on for HTTP traffic is 8080. The default port Paygistix Client listens on for HTTPS traffic is 8081.</p>\n\n**Warning:** When PAXMode is set to SERVER or ON, any functions called that involve interaction with the PAX device will use the “password” value that is pre-programmed in the PAX device and not the “password” sent in the call to the API.\n\n**Warning:** Any functions called that DO NOT involve interaction with the PAX device will require the passing of the proper Paygistix username and password.\n\n<h2>Calling Paygistix Client in Server Mode</h2>\n\nWhen calling Paygistix Client in Server mode, you must use the IP address and port of the server. An example of a VB script to call a sale which will initiate a transaction on a PAX device is as follows:\n\n```\n    'Setup URI for sale. Use IP address of server rather than local IP\n    Dim URI: URI = \"http://192.168.0.2:8080/pay/sale/?\"\n    'Append Username & Password (minimum requirements)\n    'set output type to XML for easy reading\n    URI = URI & \"Username=payg2783&Password=paylogtest&Output=XML\" \n    'Use MSXML to call the local web service\n    Dim xmlHttp: Set xmlHttp = CreateObject(\"Msxml2.ServerXMLHTTP\")\n    'Disable any timeouts\n    xmlHttp.setTimeouts 0,0,0,0\n    'Open the connection and send the request\n    xmlHttp.open \"GET\", URI, false\n    xmlHttp.send \n    'Output the response\n    WScript.echo \"Sample Script: Sale response\" & vbcrlf & xmlHttp.ResponseText\n    Set xmlHttp = nothing\n\n\n```\n\nFollowing the call to this function the PAX device will ask for a card to be swiped and on completion of the transaction the script will return the XML response to say if the transaction completed correctly or not.\n\n<h2>Configuring multiple PAX devices when working in a networking environment</h2>\n\nWhen working with multiple PAX devices on a network it is advisable to set each one up with a different username on Paygistix. This way you can account for and report on the individual terminals transactions.\n\nThe configuration settings must have a PAXUserMapping parameter as follows **“User1,192.168.0.99:10009,{deviceid1},MT30|User2,192.168.0.98:10009,{deviceid2},MT30|{…}”.**\n\nPlease contact your Payment Logistics support representative to configure these settings on your behalf. When using PAXUserMapping, each PAX device should be configured with a static IP on the internal network.\n\nYou can setup as many device / user combinations as you like; each one is separated with a pipe “|“ symbol. When initiating a transaction, simply send the appropriate username through in the calling function and this will determine which device will be targeted.\n\nBeginning with Paygistix Client version 2.2.3 release C, PAXUserMapping can be replaced with SNMapping. This allows PAX devices to be configured with dynamic IP addresses using DHCP. The PAX devices will automatically register their IP address with Paygistix which allows these devices to be plug and play. Anytime the device IP address changes, it is automatically updated in Paygistix in real-time.\n\nIn the example below you can see the only change you need to make to target a specific device is the Username parameter.\n\n```\n    'Setup URI for sale. Use IP address of server rather than local IP\n    Dim URI: URI = \"http://192.168.0.2:8080/pay/sale/?\"\n    'Append Username & Password (minimum requirements)\n    'set output type to XML for easy reading\n    URI = URI & \"Username=User1&Password=paylogtest&Output=XML\" \n    'Use MSXML to call the local web service\n    Dim xmlHttp: Set xmlHttp = CreateObject(\"Msxml2.ServerXMLHTTP\")\n    'Disable any timeouts\n    xmlHttp.setTimeouts 0,0,0,0\n    'Open the connection and send the request\n    xmlHttp.open \"GET\", URI, false\n    xmlHttp.send \n    'Output the response\n    WScript.echo \"Sample Script: Sale response\" & vbcrlf & xmlHttp.ResponseText\n    Set xmlHttp = nothing\n\n\n```\n\n<h2>Communicating via File Drop rather than HTTP</h2>\n\nInstead of using HTTP to communicate with Paygistix Client, you can set it up to work using files. This can come in handy when working with legacy systems that may have system limitations preventing HTTP(s) communication or are already accustomed to using a file drop method for payment integration.\n\n**WatchFolder = “c:\\\\folder\\\\” or “\\\\\\\\UNCPath\\\\Folder”**  \nWhen using filedrop method, this folder is set to listen for file requests to trigger transactions. See the Advanced Section later in this guide for more information regarding the file drop method. We recommend where possible to set this value to a specific folder on the same machine that Paygistix Client is installed. UNC file paths are less efficient as they have to poll for files rather than use windows messaging which is trigger based.\n\nInput files can be sent through as .TXT or .XML\n\nFor .TXT you need to pass through the values as Name Value Pairs. So for instance if you wanted to call a SALE using the test account, you would have the following content in your file.\n\n<p><b>Filename: c:\\drop files\\ABC123.TXT</b></p>\n\n```\nServiceType=SALE\nUserName=payg2783\nPassword=paylogtest\nAmount=10\nInvoiceNumber=ABC123\nOutput=NVP\n\n```\n\n<p>If you wish to use XML then you should output the file in the following format.</p><p><b>Filename: c:\\drop files\\ABC123.XML</b></p>\n\n```\n\"\n    SALE\n    payg2783\n    paylogtest\n    10.00\n    ABC123\n    XML\n\n```\n\nPaygistix Client monitors the watch folder for transaction files and when it sees a new one arrives it will consume the file and make the corresponding function call. Once the function has been processed, the result will be returned in a file with the same name as the input file but with the file extension .OUT. The response within the .out file will either be Name Value Pairs or XML depending on the format of the request.\n\n<h1>Digital Receipts</h1><p>ISVs who integrate with Paygistix Client can easily add support for PayLink Digital Receipts.</p>\n\n**What are Digital Receipts?**\n\n<p>An online version of a receipt that customers receive via text message.</p>\n\n**What's the big deal with Digital Receipts anyway?**\n\n<p>PayLink Digital Receipts allow ISVs to enhance the value proposition of their POS by enabling their merchants to connect with their customers digitally. For example, merchants can embed an advertisement, promotion, links to social media, website links, etc... right on the receipt itself.</p><p>Merchants can also enable PayLink Ratings to get valuable feedback from customers. When enabled, customers rate their experience from 1 to 5 stars right on the Digital Receipt. Merchants can then access this information in the PayLink Portal, empowering them to make informed decisions to improve their customer experience.</p>\n\n**How does a cardholder get their digital receipt?**\n\n<p>When a cardholder is checking out through a Pax Device it will prompt them for their phone number. Then they'll complete their payment per usual (EMV, contactless, etc...). Afterwards they'll receive a text with a link to their digital receipt.</p>\n\n**Does this work for ecommerce or Direct-to-Pax applications?**\n\n<p>Yes, but we offer a separate API for this. Contact devsupport@paymentlogistics.com for more information.</p>\n\n**Does this work for cash payments?**\n\n<p>Not at this time.</p>\n\n**What does it cost?**\n\n<p>Digital Receipts require merchants to sign up for a PayLink plan on https://why.pay.link.</p>\n\n**Specifications**\n\n<p>Paygistix Client’s Digital Receipt feature offers customers the option of receiving a link to their receipt via text message. This works through a prompt on the payment device that asks the customer how they want to receive their receipt. The options are Print, SMS, or None. The result of the customer’s selection is returned in the payment response, and includes the customer’s phone number if applicable. The prompt is shown during the payment process when the transaction is being run on the terminal, and is not a separate request.</p><p><a href=\"https://why.pay.link/templates/rt_fluent/custom/images/Phones/Receipt.png\"><img src=\"https://why.pay.link/templates/rt_fluent/custom/images/Phones/Receipt.png\"></a></p>\n\nThe receipt is sent in the /pay/sale request, and is a Base64 Encoded string. The string should be 32 columns wide, with each column separated by the string “\\\\n”. At the end of the string, append the string “{BODY}”.\n\nSample string:\n\n```\n1 Avocado Toast            $9.00\\n* Lemon Slice                   \\n================================\\nTip                        $0.13\\nTotal                      $9.13\\n================================\\n{BODY}\n\n```\n\nThis string would then get Base64 Encoded, and become:\n\n```\nMSBBdm9jYWRvIFRvYXN0ICAgICAgICAgICAgJDkuMDBcbiogTGVtb24gU2xpY2UgICAgICAgICAgICAgICAgICAgXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGlwICAgICAgICAgICAgICAgICAgICAgICAgJDAuMTNcblRvdGFsICAgICAgICAgICAgICAgICAgICAgICQ5LjEzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxue0JPRFl9\n\n```\n\nExample Request for a /pay/sale, with included receipt data:\n\n```\n\"\n    payg2783\n    paylogtest\n    9.13\n    9.13\n    ABC123\n    XML\nMSBBdm9jYWRvIFRvYXN0ICAgICAgICAgICAgJDkuMDBcbiogTGVtb24gU2xpY2UgICAgICAgICAgICAgICAgICAgXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGlwICAgICAgICAgICAgICAgICAgICAgICAgJDAuMTNcblRvdGFsICAgICAgICAgICAgICAgICAgICAgICQ5LjEzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxue0JPRFl9\n\n```\n\nThis generates the following receipt, and texts it to the customer automatically:  \n[https://dev.pay.link/mobile/cb200faa10894e13a285b4e4a0e2f51d](https://dev.pay.link/mobile/cb200faa10894e13a285b4e4a0e2f51d)\n\n<p><a href=\"https://why.pay.link/images/PostmanAPIDocs/q25_Digital_Receipt_4.png\"><img src=\"https://why.pay.link/images/PostmanAPIDocs/q25_Digital_Receipt_4.png\"></a></p><p>The payment/transaction response will include additional fields:</p>\n\n**ReceiptType:**\n\n<ul><li><p>S for SMS Text</p></li><li><p>P for Print</p></li><li><p>N for No Receipt</p></li></ul><p>Since this field is not required, if it is not present in the response then use the default system behavior of the POS.</p>\n\n**SMSTextNumber:**\n\n<ul><li><p>This field should be present when ReceiptType=S.</p></li><li><p>The format of the SMSTextNumber is “+18885729564”.</p></li></ul><p>Below is an example response returned from a MasterCard transaction using /pay/sale/:</p>\n\n```\n    10.00\n    OK7156\n    Address Match + 5 Zip\n    MASTERCARD\n    1a4a1d44-d715-4d7c-a3e5-f612d843c20c\n    ABC123\n    0026\n    APPROVED\n    John Doe\n    35898\n    SALE\n    0\n    Match\n    Match\n    S\n    +18885729564\n\n```\n\nEach merchant will need their own PayLink account. An account on our development servers will be provided for development, as well.\n\n<h1>Receipt Guidelines</h1>\n\nWith the introduction of EMV transactions comes new requirements for EMV transaction receipts. The purpose of this section is to provide guidelines for printing receipts for EMV transactions.\n\nThe following covers what new data will be included and how it will be returned in a Paygistix Client response. See below for examples of a typical transaction response and a paper receipt.\n\n**EMV Receipt Response Data**  \nBelow is a list and brief description of the Paygistix Client response parameters which will be included in the response returned for sale transactions in which an EMV card was used to complete the transaction.\n\n<table><tbody><tr><th>Parameter Name</th><th>Full Name</th><th>Description</th></tr><tr><td>Method</td><td>Entry Method</td><td>Method signifies the mode of entry used to collect the cardholder data. Possible values are: Manual | Swipe | Contactless | Scanner | Chip | Chip Fallback Swipe</td></tr><tr><td>TC</td><td>Transaction Certificate</td><td>A TC is a type of Application Cryptogram that is generated whenever a card approves a transaction during Card Action Analysis.</td></tr><tr><td>TVR</td><td>Terminal Verification Results</td><td>The TVR is a series of bits set by the terminal reading an EMV card, based on logical tests (for example has the card expired). This data object is used in the terminal's decision whether to accept, decline or go on-line for a payment transaction</td></tr><tr><td>AID</td><td>Application Identifier</td><td>An AID is used to uniquely identify each EMV application that a terminal supports, and every AID has an associated card scheme and parameters relating to how the application needs to be processed. A terminal may contain any number of such applications, and the list of each supported AID is used during Candidate List Creation to generate a list of applications that are mutually supported by both the terminal and the card.</td></tr><tr><td>TSI</td><td>Transaction Status Information</td><td>The TSI is a collection of indicators that the terminal will set to show what processing steps have been performed on the current transaction (e.g. Cardholder Verification, Data Authentication). Together with the TVR, this information enables the card and the host to manage risk and determine the correct outcome for the transaction.</td></tr><tr><td>ATC</td><td>Application Transaction Counter</td><td>A counter, maintained by the chip card application (incremented by the chip), that provides a sequential reference to each transaction. A duplicate ATC, a decrease in ATC or a large jump in ATC values may indicate data copying or other fraud to the issuer.</td></tr><tr><td>APPLAB</td><td>Application Label</td><td>Mnemonic associated with AID according to [ISO 7816-5]. Used in application selection. Application Label is optional in the File Control Information (FCI) of an Application Definition File (ADF) and optional in an ADF directory entry.</td></tr><tr><td>APPN</td><td>Application Preferred Name</td><td>EMV cards will often include an ‘application preferred name’, which is the name of the card application in the cardholder’s local language.</td></tr><tr><td>CVM</td><td>Cardholder Verification Method</td><td>Possible values are: PIN Verified | Signature | NotReq</td></tr><tr><td>PrintSigLine</td><td>Print Signature Line Indicator</td><td>This value indicates whether or not to print a signature line on a receipt.Possible values are: TRUE | FALSE =&gt; TRUE = Print Signature Line | FALSE = Don’t Print Signature Line</td></tr></tbody></table><h2>Example Paygistix Client EMV Transaction Response</h2>\n\n```\n  10.00\n  OK9816\n  Address Match + 5 Zip\n  MASTERCARD\n  a687d6fe-1700-40f1-8be3-13bf14694dc5\n  ABC123\n  APPROVED\n  237122\n  TRUE\n  0\n     ***Example EMV Data***\n      Chip\n      9B45AB13C3101576\n      0200008000\n      A0000000041010\n      E800\n      0001\n      MasterCard\n      Signature\n\n```\n\n<h2>Example EMV Transaction Receipt</h2>\n\nIn the image below the EMV data is highlighted in pink. This example does not include the APPN as it’s not returned for every EMV transaction.\n\nBesides EMV data, other data that should be printed on both EMV and non EMV receipts are: Card Type, Last 4 of Card number, Authorization Code, Merchant Name, Date, PNRef Number, Response (known as “Message” in the Paygistix Client Developers Guide), Date, and Time. See the Paygistix Client Developers guide for more information on obtaining the above data. Please note, as you will see below, in most cases using abbreviations to describe the data title is acceptable so long the title is reasonably identifiable.\n\n<a href=\"https://why.pay.link/images/DeveloperCenter/receipt_emv_1.png\"><img src=\"https://why.pay.link/images/DeveloperCenter/receipt_emv_1.png\"></a>\n\n**Questions?** Contact developer support at 888-472-9564","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":false,"owner":"3936658","collectionId":"a9afa7ed-e267-4239-a688-a54724dde0ff","publishedId":"TWDRqyxX","public":true,"publicUrl":"https://documenter-api.postman.tech/view/3936658/TWDRqyxX","privateUrl":"https://go.postman.co/documentation/3936658-a9afa7ed-e267-4239-a688-a54724dde0ff","customColor":{"top-bar":"FFFFFF","right-sidebar":"EBEBEB","highlight":"006fba"},"documentationLayout":"classic-double-column","customisation":null,"version":"8.10.0","publishDate":"2021-10-13T20:27:38.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{},"logos":{}},"statusCode":200},"environments":[],"user":{"authenticated":false,"permissions":{"publish":false}},"run":{"button":{"js":"https://run.pstmn.io/button.js","css":"https://run.pstmn.io/button.css"}},"web":"https://www.getpostman.com/","team":{"logo":"https://res.cloudinary.com/postman/image/upload/t_team_logo_pubdoc/v1/team/768118b36f06c94b0306958b980558e6915839447e859fe16906e29d683976f0","favicon":""},"isEnvFetchError":false,"languages":"[{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"HttpClient\"},{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"RestSharp\"},{\"key\":\"curl\",\"label\":\"cURL\",\"variant\":\"cURL\"},{\"key\":\"dart\",\"label\":\"Dart\",\"variant\":\"http\"},{\"key\":\"go\",\"label\":\"Go\",\"variant\":\"Native\"},{\"key\":\"http\",\"label\":\"HTTP\",\"variant\":\"HTTP\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"OkHttp\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"Unirest\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"Fetch\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"jQuery\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"XHR\"},{\"key\":\"c\",\"label\":\"C\",\"variant\":\"libcurl\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Axios\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Native\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Request\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Unirest\"},{\"key\":\"objective-c\",\"label\":\"Objective-C\",\"variant\":\"NSURLSession\"},{\"key\":\"ocaml\",\"label\":\"OCaml\",\"variant\":\"Cohttp\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"cURL\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"Guzzle\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"HTTP_Request2\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"pecl_http\"},{\"key\":\"powershell\",\"label\":\"PowerShell\",\"variant\":\"RestMethod\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"http.client\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"Requests\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"httr\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"RCurl\"},{\"key\":\"ruby\",\"label\":\"Ruby\",\"variant\":\"Net::HTTP\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"Httpie\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"wget\"},{\"key\":\"swift\",\"label\":\"Swift\",\"variant\":\"URLSession\"}]","languageSettings":[{"key":"csharp","label":"C#","variant":"HttpClient"},{"key":"csharp","label":"C#","variant":"RestSharp"},{"key":"curl","label":"cURL","variant":"cURL"},{"key":"dart","label":"Dart","variant":"http"},{"key":"go","label":"Go","variant":"Native"},{"key":"http","label":"HTTP","variant":"HTTP"},{"key":"java","label":"Java","variant":"OkHttp"},{"key":"java","label":"Java","variant":"Unirest"},{"key":"javascript","label":"JavaScript","variant":"Fetch"},{"key":"javascript","label":"JavaScript","variant":"jQuery"},{"key":"javascript","label":"JavaScript","variant":"XHR"},{"key":"c","label":"C","variant":"libcurl"},{"key":"nodejs","label":"NodeJs","variant":"Axios"},{"key":"nodejs","label":"NodeJs","variant":"Native"},{"key":"nodejs","label":"NodeJs","variant":"Request"},{"key":"nodejs","label":"NodeJs","variant":"Unirest"},{"key":"objective-c","label":"Objective-C","variant":"NSURLSession"},{"key":"ocaml","label":"OCaml","variant":"Cohttp"},{"key":"php","label":"PHP","variant":"cURL"},{"key":"php","label":"PHP","variant":"Guzzle"},{"key":"php","label":"PHP","variant":"HTTP_Request2"},{"key":"php","label":"PHP","variant":"pecl_http"},{"key":"powershell","label":"PowerShell","variant":"RestMethod"},{"key":"python","label":"Python","variant":"http.client"},{"key":"python","label":"Python","variant":"Requests"},{"key":"r","label":"R","variant":"httr"},{"key":"r","label":"R","variant":"RCurl"},{"key":"ruby","label":"Ruby","variant":"Net::HTTP"},{"key":"shell","label":"Shell","variant":"Httpie"},{"key":"shell","label":"Shell","variant":"wget"},{"key":"swift","label":"Swift","variant":"URLSession"}],"languageOptions":[{"label":"C# - HttpClient","value":"csharp - HttpClient - C#"},{"label":"C# - RestSharp","value":"csharp - RestSharp - C#"},{"label":"cURL - cURL","value":"curl - cURL - cURL"},{"label":"Dart - http","value":"dart - http - Dart"},{"label":"Go - Native","value":"go - Native - Go"},{"label":"HTTP - HTTP","value":"http - HTTP - HTTP"},{"label":"Java - OkHttp","value":"java - OkHttp - Java"},{"label":"Java - Unirest","value":"java - Unirest - Java"},{"label":"JavaScript - Fetch","value":"javascript - Fetch - JavaScript"},{"label":"JavaScript - jQuery","value":"javascript - jQuery - JavaScript"},{"label":"JavaScript - XHR","value":"javascript - XHR - JavaScript"},{"label":"C - libcurl","value":"c - libcurl - C"},{"label":"NodeJs - Axios","value":"nodejs - Axios - NodeJs"},{"label":"NodeJs - Native","value":"nodejs - Native - NodeJs"},{"label":"NodeJs - Request","value":"nodejs - Request - NodeJs"},{"label":"NodeJs - Unirest","value":"nodejs - Unirest - NodeJs"},{"label":"Objective-C - NSURLSession","value":"objective-c - NSURLSession - Objective-C"},{"label":"OCaml - Cohttp","value":"ocaml - Cohttp - OCaml"},{"label":"PHP - cURL","value":"php - cURL - PHP"},{"label":"PHP - Guzzle","value":"php - Guzzle - PHP"},{"label":"PHP - HTTP_Request2","value":"php - HTTP_Request2 - PHP"},{"label":"PHP - pecl_http","value":"php - pecl_http - PHP"},{"label":"PowerShell - RestMethod","value":"powershell - RestMethod - PowerShell"},{"label":"Python - http.client","value":"python - http.client - Python"},{"label":"Python - Requests","value":"python - Requests - Python"},{"label":"R - httr","value":"r - httr - R"},{"label":"R - RCurl","value":"r - RCurl - R"},{"label":"Ruby - Net::HTTP","value":"ruby - Net::HTTP - Ruby"},{"label":"Shell - Httpie","value":"shell - Httpie - Shell"},{"label":"Shell - wget","value":"shell - wget - Shell"},{"label":"Swift - URLSession","value":"swift - URLSession - Swift"}],"layoutOptions":[{"value":"classic-single-column","label":"Single Column"},{"value":"classic-double-column","label":"Double Column"}],"versionOptions":[],"environmentOptions":[{"value":"0","label":"No Environment"}],"canonicalUrl":"https://documenter.gw.postman.com/view/metadata/TWDRqyxX"}