Class: CityPayApiClient::PaylinkApi
- Inherits:
-
Object
- Object
- CityPayApiClient::PaylinkApi
- Defined in:
- lib/citypay_api_client/api/paylink_api__.rb
Instance Attribute Summary collapse
-
#api_client ⇒ Object
Returns the value of attribute api_client.
Instance Method Summary collapse
-
#initialize(api_client = ApiClient.default) ⇒ PaylinkApi
constructor
A new instance of PaylinkApi.
-
#token_adjustment_request(token, paylink_adjustment_request, opts = {}) ⇒ Acknowledgement
Paylink Token Adjustment Adjusts a TokenRequest’s amount value when for instance 1.
-
#token_adjustment_request_with_http_info(token, paylink_adjustment_request, opts = {}) ⇒ Array<(Acknowledgement, Integer, Hash)>
Paylink Token Adjustment Adjusts a TokenRequest's amount value when for instance 1.
-
#token_cancel_request(token, opts = {}) ⇒ Acknowledgement
Cancel a Paylink Token Marks a Paylink Token as cancelled.
-
#token_cancel_request_with_http_info(token, opts = {}) ⇒ Array<(Acknowledgement, Integer, Hash)>
Cancel a Paylink Token Marks a Paylink Token as cancelled.
-
#token_changes_request(paylink_token_status_change_request, opts = {}) ⇒ PaylinkTokenStatusChangeResponse
Paylink Token Audit Allows for the changes to a pre-existing token.
-
#token_changes_request_with_http_info(paylink_token_status_change_request, opts = {}) ⇒ Array<(PaylinkTokenStatusChangeResponse, Integer, Hash)>
Paylink Token Audit Allows for the changes to a pre-existing token.
-
#token_close_request(token, opts = {}) ⇒ Acknowledgement
Close Paylink Token Marks a Paylink Token as closed.
-
#token_close_request_with_http_info(token, opts = {}) ⇒ Array<(Acknowledgement, Integer, Hash)>
Close Paylink Token Marks a Paylink Token as closed.
-
#token_create_bill_payment_request(paylink_bill_payment_token_request, opts = {}) ⇒ PaylinkTokenCreated
Create Bill Payment Paylink Token CityPay Paylink supports invoice and bill payment services by allowing merchants to raise an invoice in their systems and associate the invoice with a Paylink checkout token.
-
#token_create_bill_payment_request_with_http_info(paylink_bill_payment_token_request, opts = {}) ⇒ Array<(PaylinkTokenCreated, Integer, Hash)>
Create Bill Payment Paylink Token CityPay Paylink supports invoice and bill payment services by allowing merchants to raise an invoice in their systems and associate the invoice with a Paylink checkout token.
-
#token_create_request(paylink_token_request_model, opts = {}) ⇒ PaylinkTokenCreated
Create Paylink Token Creates a Paylink token from the CityPay API.
-
#token_create_request_with_http_info(paylink_token_request_model, opts = {}) ⇒ Array<(PaylinkTokenCreated, Integer, Hash)>
Create Paylink Token Creates a Paylink token from the CityPay API.
-
#token_purge_attachments_request(token, opts = {}) ⇒ Acknowledgement
Purges any attachments for a Paylink Token Purges any attachments for a token for GDPR or DP reasons.
-
#token_purge_attachments_request_with_http_info(token, opts = {}) ⇒ Array<(Acknowledgement, Integer, Hash)>
Purges any attachments for a Paylink Token Purges any attachments for a token for GDPR or DP reasons.
-
#token_reconciled_request(token, opts = {}) ⇒ Acknowledgement
Reconcile Paylink Token Marks a Paylink Token as reconciled when reconciliation is performed on the merchant’s side.
-
#token_reconciled_request_with_http_info(token, opts = {}) ⇒ Array<(Acknowledgement, Integer, Hash)>
Reconcile Paylink Token Marks a Paylink Token as reconciled when reconciliation is performed on the merchant's side.
-
#token_reopen_request(token, opts = {}) ⇒ Acknowledgement
Reopen Paylink Token Allows for a Paylink Token to be reopened if a Token has been previously closed and payment has not yet been made.
-
#token_reopen_request_with_http_info(token, opts = {}) ⇒ Array<(Acknowledgement, Integer, Hash)>
Reopen Paylink Token Allows for a Paylink Token to be reopened if a Token has been previously closed and payment has not yet been made.
-
#token_resend_notification_request(token, paylink_resend_notification_request, opts = {}) ⇒ Acknowledgement
Resend a notification for Paylink Token Resend a notification for Paylink Token.
-
#token_resend_notification_request_with_http_info(token, paylink_resend_notification_request, opts = {}) ⇒ Array<(Acknowledgement, Integer, Hash)>
Resend a notification for Paylink Token Resend a notification for Paylink Token.
-
#token_status_request(token, opts = {}) ⇒ PaylinkTokenStatus
Paylink Token Status Obtains the full status of a given Paylink Token.
-
#token_status_request_with_http_info(token, opts = {}) ⇒ Array<(PaylinkTokenStatus, Integer, Hash)>
Paylink Token Status Obtains the full status of a given Paylink Token.
Constructor Details
#initialize(api_client = ApiClient.default) ⇒ PaylinkApi
Returns a new instance of PaylinkApi.
18 19 20 |
# File 'lib/citypay_api_client/api/paylink_api__.rb', line 18 def initialize(api_client = ApiClient.default) @api_client = api_client end |
Instance Attribute Details
#api_client ⇒ Object
Returns the value of attribute api_client.
16 17 18 |
# File 'lib/citypay_api_client/api/paylink_api__.rb', line 16 def api_client @api_client end |
Instance Method Details
#token_adjustment_request(token, paylink_adjustment_request, opts = {}) ⇒ Acknowledgement
Paylink Token Adjustment Adjusts a TokenRequest’s amount value when for instance 1. a Token is created and the shopping cart is updated 2. an invoice is adjusted either due to part payment or due to increased incurred costs.
27 28 29 30 |
# File 'lib/citypay_api_client/api/paylink_api__.rb', line 27 def token_adjustment_request(token, paylink_adjustment_request, opts = {}) data, _status_code, _headers = token_adjustment_request_with_http_info(token, paylink_adjustment_request, opts) data end |
#token_adjustment_request_with_http_info(token, paylink_adjustment_request, opts = {}) ⇒ Array<(Acknowledgement, Integer, Hash)>
Paylink Token Adjustment Adjusts a TokenRequest's amount value when for instance 1. a Token is created and the shopping cart is updated 2. an invoice is adjusted either due to part payment or due to increased incurred costs.
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/citypay_api_client/api/paylink_api__.rb', line 38 def token_adjustment_request_with_http_info(token, paylink_adjustment_request, opts = {}) if @api_client.config.debugging @api_client.config.logger.debug 'Calling API: PaylinkApi.token_adjustment_request ...' end # verify the required parameter 'token' is set if @api_client.config.client_side_validation && token.nil? fail ArgumentError, "Missing the required parameter 'token' when calling PaylinkApi.token_adjustment_request" end # verify the required parameter 'paylink_adjustment_request' is set if @api_client.config.client_side_validation && paylink_adjustment_request.nil? fail ArgumentError, "Missing the required parameter 'paylink_adjustment_request' when calling PaylinkApi.token_adjustment_request" end # resource path local_var_path = '/paylink/{token}/adjustment'.sub('{' + 'token' + '}', CGI.escape(token.to_s)) # query parameters query_params = opts[:query_params] || {} # header parameters header_params = opts[:header_params] || {} # HTTP header 'Accept' (if needed) header_params['Accept'] = @api_client.select_header_accept(['application/json', 'text/xml']) # HTTP header 'Content-Type' content_type = @api_client.select_header_content_type(['application/json', 'text/xml']) if !content_type.nil? header_params['Content-Type'] = content_type end # form parameters form_params = opts[:form_params] || {} # http body (model) post_body = opts[:debug_body] || @api_client.object_to_http_body(paylink_adjustment_request) # return_type return_type = opts[:debug_return_type] || 'Acknowledgement' # auth_names auth_names = opts[:debug_auth_names] || ['cp-api-key'] = opts.merge( :operation => :"PaylinkApi.token_adjustment_request", :header_params => header_params, :query_params => query_params, :form_params => form_params, :body => post_body, :auth_names => auth_names, :return_type => return_type ) data, status_code, headers = @api_client.call_api(:POST, local_var_path, ) if @api_client.config.debugging @api_client.config.logger.debug "API called: PaylinkApi#token_adjustment_request\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}" end return data, status_code, headers end |
#token_cancel_request(token, opts = {}) ⇒ Acknowledgement
Cancel a Paylink Token Marks a Paylink Token as cancelled. This cancels the Token for any future request for processing.
100 101 102 103 |
# File 'lib/citypay_api_client/api/paylink_api__.rb', line 100 def token_cancel_request(token, opts = {}) data, _status_code, _headers = token_cancel_request_with_http_info(token, opts) data end |
#token_cancel_request_with_http_info(token, opts = {}) ⇒ Array<(Acknowledgement, Integer, Hash)>
Cancel a Paylink Token Marks a Paylink Token as cancelled. This cancels the Token for any future request for processing.
110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 |
# File 'lib/citypay_api_client/api/paylink_api__.rb', line 110 def token_cancel_request_with_http_info(token, opts = {}) if @api_client.config.debugging @api_client.config.logger.debug 'Calling API: PaylinkApi.token_cancel_request ...' end # verify the required parameter 'token' is set if @api_client.config.client_side_validation && token.nil? fail ArgumentError, "Missing the required parameter 'token' when calling PaylinkApi.token_cancel_request" end # resource path local_var_path = '/paylink/{token}/cancel'.sub('{' + 'token' + '}', CGI.escape(token.to_s)) # query parameters query_params = opts[:query_params] || {} # header parameters header_params = opts[:header_params] || {} # HTTP header 'Accept' (if needed) header_params['Accept'] = @api_client.select_header_accept(['application/json', 'text/xml']) # form parameters form_params = opts[:form_params] || {} # http body (model) post_body = opts[:debug_body] # return_type return_type = opts[:debug_return_type] || 'Acknowledgement' # auth_names auth_names = opts[:debug_auth_names] || ['cp-api-key'] = opts.merge( :operation => :"PaylinkApi.token_cancel_request", :header_params => header_params, :query_params => query_params, :form_params => form_params, :body => post_body, :auth_names => auth_names, :return_type => return_type ) data, status_code, headers = @api_client.call_api(:PUT, local_var_path, ) if @api_client.config.debugging @api_client.config.logger.debug "API called: PaylinkApi#token_cancel_request\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}" end return data, status_code, headers end |
#token_changes_request(paylink_token_status_change_request, opts = {}) ⇒ PaylinkTokenStatusChangeResponse
Paylink Token Audit Allows for the changes to a pre-existing token.
163 164 165 166 |
# File 'lib/citypay_api_client/api/paylink_api__.rb', line 163 def token_changes_request(paylink_token_status_change_request, opts = {}) data, _status_code, _headers = token_changes_request_with_http_info(paylink_token_status_change_request, opts) data end |
#token_changes_request_with_http_info(paylink_token_status_change_request, opts = {}) ⇒ Array<(PaylinkTokenStatusChangeResponse, Integer, Hash)>
Paylink Token Audit Allows for the changes to a pre-existing token.
173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 |
# File 'lib/citypay_api_client/api/paylink_api__.rb', line 173 def token_changes_request_with_http_info(paylink_token_status_change_request, opts = {}) if @api_client.config.debugging @api_client.config.logger.debug 'Calling API: PaylinkApi.token_changes_request ...' end # verify the required parameter 'paylink_token_status_change_request' is set if @api_client.config.client_side_validation && paylink_token_status_change_request.nil? fail ArgumentError, "Missing the required parameter 'paylink_token_status_change_request' when calling PaylinkApi.token_changes_request" end # resource path local_var_path = '/paylink/token/changes' # query parameters query_params = opts[:query_params] || {} # header parameters header_params = opts[:header_params] || {} # HTTP header 'Accept' (if needed) header_params['Accept'] = @api_client.select_header_accept(['application/json', 'text/xml']) # HTTP header 'Content-Type' content_type = @api_client.select_header_content_type(['application/json', 'text/xml']) if !content_type.nil? header_params['Content-Type'] = content_type end # form parameters form_params = opts[:form_params] || {} # http body (model) post_body = opts[:debug_body] || @api_client.object_to_http_body(paylink_token_status_change_request) # return_type return_type = opts[:debug_return_type] || 'PaylinkTokenStatusChangeResponse' # auth_names auth_names = opts[:debug_auth_names] || ['cp-api-key'] = opts.merge( :operation => :"PaylinkApi.token_changes_request", :header_params => header_params, :query_params => query_params, :form_params => form_params, :body => post_body, :auth_names => auth_names, :return_type => return_type ) data, status_code, headers = @api_client.call_api(:POST, local_var_path, ) if @api_client.config.debugging @api_client.config.logger.debug "API called: PaylinkApi#token_changes_request\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}" end return data, status_code, headers end |
#token_close_request(token, opts = {}) ⇒ Acknowledgement
Close Paylink Token Marks a Paylink Token as closed. This closes the Token for any future action and the Token will not appear in any status request calls.
231 232 233 234 |
# File 'lib/citypay_api_client/api/paylink_api__.rb', line 231 def token_close_request(token, opts = {}) data, _status_code, _headers = token_close_request_with_http_info(token, opts) data end |
#token_close_request_with_http_info(token, opts = {}) ⇒ Array<(Acknowledgement, Integer, Hash)>
Close Paylink Token Marks a Paylink Token as closed. This closes the Token for any future action and the Token will not appear in any status request calls.
241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 |
# File 'lib/citypay_api_client/api/paylink_api__.rb', line 241 def token_close_request_with_http_info(token, opts = {}) if @api_client.config.debugging @api_client.config.logger.debug 'Calling API: PaylinkApi.token_close_request ...' end # verify the required parameter 'token' is set if @api_client.config.client_side_validation && token.nil? fail ArgumentError, "Missing the required parameter 'token' when calling PaylinkApi.token_close_request" end # resource path local_var_path = '/paylink/{token}/close'.sub('{' + 'token' + '}', CGI.escape(token.to_s)) # query parameters query_params = opts[:query_params] || {} # header parameters header_params = opts[:header_params] || {} # HTTP header 'Accept' (if needed) header_params['Accept'] = @api_client.select_header_accept(['application/json', 'text/xml']) # form parameters form_params = opts[:form_params] || {} # http body (model) post_body = opts[:debug_body] # return_type return_type = opts[:debug_return_type] || 'Acknowledgement' # auth_names auth_names = opts[:debug_auth_names] || ['cp-api-key'] = opts.merge( :operation => :"PaylinkApi.token_close_request", :header_params => header_params, :query_params => query_params, :form_params => form_params, :body => post_body, :auth_names => auth_names, :return_type => return_type ) data, status_code, headers = @api_client.call_api(:PUT, local_var_path, ) if @api_client.config.debugging @api_client.config.logger.debug "API called: PaylinkApi#token_close_request\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}" end return data, status_code, headers end |
#token_create_bill_payment_request(paylink_bill_payment_token_request, opts = {}) ⇒ PaylinkTokenCreated
Create Bill Payment Paylink Token CityPay Paylink supports invoice and bill payment services by allowing merchants to raise an invoice in their systems and associate the invoice with a Paylink checkout token. CityPay will co-ordinate the checkout flow in relationship with your customer. Our bill payment solution may be used to streamline the payment flow with cardholders to allow your invoice to be paid promptly and via multiple payment channels such as Card Payment, Apple Pay or Google Pay. The bill payment service allows 1. setting up notification paths to an end customer, such as SMS or Email 2. enabling attachments to be included with Paylink tokens 3. produce chaser notifications for unpaid invoices 4. provide callbacks for notification of the payment of an invoice 5. support part payments against an invoice 6. support of field guards to protect the payment screen 7. support of status reporting on tokens 8. URL short codes for SMS notifications <img src="images/merchant-BPS-workflow.png" alt="Paylink BPSv2 Overview" width="50%"/> ### Notification Paths Notification paths can be provided which identify the channels for communication of the invoice availability. Up to 3 notification paths may be provided per request. Each notification uses a template to generate the body of the message. This allows for variable text to be sent out and customised for each call. SMS messages use URL Short Codes (USC) as a payment link to the invoice payment page. This allows for a standard payment URL to be shortened for optimised usage in SMS. For instance a URL of ‘checkout.citypay.com/PL1234/s348yb8yna4a48n2f8nq2f3msgyng-psn348ynaw8ynaw/en` becomes `citypay.com/Za48na3x`. Each USC is unique however it is a requirement that each USC generated is protected with Field Guards to ensure that sensitive data (such as customer contact details and GDPR) is protected. To send a notification path, append a `notification-path` property to the request. “`json { "sms_notification_path": { "to": "+441534884000" }, "email_notification_path": { "to": ["[email protected]"], "cc": ["[email protected]"], "reply": ["[email protected]"] } } “` Notification paths trigger a number of events which are stored as part of the timeline of events of a Paylink token - `BillPaymentSmsNotificationQueued` - identifies when an SMS notification has been queued for delivery - `BillPaymentSmsNotificationSent` - identifies when an SMS notification has been sent to the upstream network - `BillPaymentSmsNotificationDelivered` - identifies when an SMS notification has been delivered as notified by the upstream network - `BillPaymentSmsNotificationUndelivered` - identifies when an SMS notification has undelivered notification is provided by the upstream network - `BillPaymentSmsNotificationFailure` - identifies when an SMS notification has failed - `BillPaymentEmailNotificationQueued` - identifies when an email notification has been queued for delivery - `BillPaymentEmailNotificationSent` - identifies when an email notification has been accepted by our SMS forwarder - `BillPaymentEmailNotificationFailure` - identifies when an email notification has failed delivery #### SMS Notification Path SMS originated from a CityPay pool of numbers and by default only sends to country codes where the service is registered. SMSs may contain a From field which is configured as part of you onboarding and have a name associated to identify the service origin. For example if your business is titled `Health Surgery Ltd` the SMS may be sent to originate from `Health Surgery`. SMS is also configured for a "polite mode". This mode ensures that SMSs aren’t sent in the middle of the night when backend services ordinarily run. SMSs will be queued until the time range is deemed as polite. Normally this is between 8am and 9pm. | Field | Type | Usage | Description | |———-|———-|———-|————————————————————————————————-| | template | string | Reserved | An optional template name to use a template other than the default. | | to | string | Reserved | The phone number in [E.164](en.wikipedia.org/wiki/E.164) format to send the message to. | #### Email Notification Paths | Field | Type | Usage | Description | |———-|———-|———-|————————————————————————————————-| | template | string | Reserved | An optional template name to use a template other than the default. | | to | string[] | Required | An array of email addresses to be used for delivery. A maximum of 5 addresses can be added. | | cc | string[] | Required | An array of email addresses to be used for cc delivery. A maximum of 5 addresses can be added. | | bcc | string[] | Required | An array of email addresses to be used for bcc delivery. A maximum of 5 addresses can be added. | | reply_to | string[] | Required | An array of email addresses to be used for the Reply-To header of an email. | ### Field Guards To ensure that invoices are paid by the intended recipient, Paylink supports the addition of Field Guards. A Field Guard is an intended field which is to be used as a form of guarded authentication. More than 1 field can be requested. <img src="images/paylink-field-guards.png" alt="Paylink Field Guards" width="50%"/> To determine the source value of the field, each field name is searched in the order of - identifier - cardholder data such as name - custom parameters - pass through data If no field values are found, the token request returns a D041 validation error. #### Authentication and Validation When values are entered by the user, resultant comparisons are performed by 1. Transliteration of both the source value and entered value. For example, names with accents (e.g. é will become e) 2. Only Alphanumeric values are retained any whitespace or special characters are ignored 3. Case is ignored Should all values match, the user is authenticated and can continue to the payment form rendered by the Paylink server. On successful login, an event will be added to include that the access guard validated access. #### Access-Key To ensure that a user does not need to re-enter these values multiple times, a cookie is pushed to the user’s browser with an access-key digest value. This value will be presented to the server on each refresh therefore allowing the guard to accept the call. Each value is uniquely stored per merchant account and cannot be shared cross merchant. The lifetime of the cookie is set to 24 hours. #### Brute Force Prevention To prevent multiple calls hitting the server, attempting a brute force attack, the login process 1. is fronted by a contemporary web application firewall 2. creates an event for each token when access was denied 3. should the number of failed events breach more than 5 in 30 minutes, the token is locked for an hour 4. should the number of events breach more than 20 the token is fully locked ### Attachments Attachments can be included in the request in 2 ways 1. Via a data element direct in the request 2. Via a URL upload to a provided pre-signed URL The decision of which option is dependent on the size of the attachments. Should the attachment size be greater than 32kb a URL upload is required. Small attachments can be included in the JSON request. This is to prevent our web firewall from blocking your request and to also ensure efficiency of larger file uploads. There is a maximum of 3 attachments that can be added to a request. “‘json [{ "filename": "invoice1.pdf", "mime-type": "application/pdf" },{ "filename": "invoice2.pdf", "data": "b4sE64Enc0dEd…=", "mime-type": "application/pdf" }] “` | Field | Type | Usage | Description | |———–|——–|———-|——————————————————————————————————————————————————| | filename | string | Required | The name of the attachment normally taken from the filename. You should not include the filename path as appropriate | | data | string | Optional | base64 encoding of the file if less than 32kb in size | | mime-type | string | Required | The mime type of the attachment as defined in [RFC 9110](www.rfc-editor.org/rfc/rfc9110.html). Currently only `application/pdf` is supported | #### Attachment Result A result of an attachment specifies whether the attachment was successfully added or whether a further upload is requried | Field | Type | Usage | Description | |——–|——–|———-|—————————————————————————————————————————————————| | result | string | Required | `OK` should the file have uploaded or `UPLOAD` if the file is required to be uploaded. | | name | string | Required | The filename that was specified in the upload process | | url | string | Optional | Should an upload be required, this URL is available for an upload to be issued. The URL is only available for uploads for 24 hours from creation. |
294 295 296 297 |
# File 'lib/citypay_api_client/api/paylink_api__.rb', line 294 def token_create_bill_payment_request(paylink_bill_payment_token_request, opts = {}) data, _status_code, _headers = token_create_bill_payment_request_with_http_info(paylink_bill_payment_token_request, opts) data end |
#token_create_bill_payment_request_with_http_info(paylink_bill_payment_token_request, opts = {}) ⇒ Array<(PaylinkTokenCreated, Integer, Hash)>
Create Bill Payment Paylink Token CityPay Paylink supports invoice and bill payment services by allowing merchants to raise an invoice in their systems and associate the invoice with a Paylink checkout token. CityPay will co-ordinate the checkout flow in relationship with your customer. Our bill payment solution may be used to streamline the payment flow with cardholders to allow your invoice to be paid promptly and via multiple payment channels such as Card Payment, Apple Pay or Google Pay. The bill payment service allows 1. setting up notification paths to an end customer, such as SMS or Email 2. enabling attachments to be included with Paylink tokens 3. produce chaser notifications for unpaid invoices 4. provide callbacks for notification of the payment of an invoice 5. support part payments against an invoice 6. support of field guards to protect the payment screen 7. support of status reporting on tokens 8. URL short codes for SMS notifications <img src="images/merchant-BPS-workflow.png" alt="Paylink BPSv2 Overview" width="50%"/> ### Notification Paths Notification paths can be provided which identify the channels for communication of the invoice availability. Up to 3 notification paths may be provided per request. Each notification uses a template to generate the body of the message. This allows for variable text to be sent out and customised for each call. SMS messages use URL Short Codes (USC) as a payment link to the invoice payment page. This allows for a standard payment URL to be shortened for optimised usage in SMS. For instance a URL of `checkout.citypay.com/PL1234/s348yb8yna4a48n2f8nq2f3msgyng-psn348ynaw8ynaw/en` becomes `citypay.com/Za48na3x`. Each USC is unique however it is a requirement that each USC generated is protected with Field Guards to ensure that sensitive data (such as customer contact details and GDPR) is protected. To send a notification path, append a `notification-path` property to the request. ```json { "sms_notification_path": { "to": "+441534884000" }, "email_notification_path": { "to": ["[email protected]"], "cc": ["[email protected]"], "reply": ["[email protected]"] } } ``` Notification paths trigger a number of events which are stored as part of the timeline of events of a Paylink token - `BillPaymentSmsNotificationQueued` - identifies when an SMS notification has been queued for delivery - `BillPaymentSmsNotificationSent` - identifies when an SMS notification has been sent to the upstream network - `BillPaymentSmsNotificationDelivered` - identifies when an SMS notification has been delivered as notified by the upstream network - `BillPaymentSmsNotificationUndelivered` - identifies when an SMS notification has undelivered notification is provided by the upstream network - `BillPaymentSmsNotificationFailure` - identifies when an SMS notification has failed - `BillPaymentEmailNotificationQueued` - identifies when an email notification has been queued for delivery - `BillPaymentEmailNotificationSent` - identifies when an email notification has been accepted by our SMS forwarder - `BillPaymentEmailNotificationFailure` - identifies when an email notification has failed delivery #### SMS Notification Path SMS originated from a CityPay pool of numbers and by default only sends to country codes where the service is registered. SMSs may contain a From field which is configured as part of you onboarding and have a name associated to identify the service origin. For example if your business is titled `Health Surgery Ltd` the SMS may be sent to originate from `Health Surgery`. SMS is also configured for a "polite mode". This mode ensures that SMSs aren't sent in the middle of the night when backend services ordinarily run. SMSs will be queued until the time range is deemed as polite. Normally this is between 8am and 9pm. | Field | Type | Usage | Description | |———-|———-|———-|————————————————————————————————-| | template | string | Reserved | An optional template name to use a template other than the default. | | to | string | Reserved | The phone number in [E.164](en.wikipedia.org/wiki/E.164) format to send the message to. | #### Email Notification Paths | Field | Type | Usage | Description | |———-|———-|———-|————————————————————————————————-| | template | string | Reserved | An optional template name to use a template other than the default. | | to | string[] | Required | An array of email addresses to be used for delivery. A maximum of 5 addresses can be added. | | cc | string[] | Required | An array of email addresses to be used for cc delivery. A maximum of 5 addresses can be added. | | bcc | string[] | Required | An array of email addresses to be used for bcc delivery. A maximum of 5 addresses can be added. | | reply_to | string[] | Required | An array of email addresses to be used for the Reply-To header of an email. | ### Field Guards To ensure that invoices are paid by the intended recipient, Paylink supports the addition of Field Guards. A Field Guard is an intended field which is to be used as a form of guarded authentication. More than 1 field can be requested. <img src="images/paylink-field-guards.png" alt="Paylink Field Guards" width="50%"/> To determine the source value of the field, each field name is searched in the order of - identifier - cardholder data such as name - custom parameters - pass through data If no field values are found, the token request returns a D041 validation error. #### Authentication and Validation When values are entered by the user, resultant comparisons are performed by 1. Transliteration of both the source value and entered value. For example, names with accents (e.g. é will become e) 2. Only Alphanumeric values are retained any whitespace or special characters are ignored 3. Case is ignored Should all values match, the user is authenticated and can continue to the payment form rendered by the Paylink server. On successful login, an event will be added to include that the access guard validated access. #### Access-Key To ensure that a user does not need to re-enter these values multiple times, a cookie is pushed to the user’s browser with an access-key digest value. This value will be presented to the server on each refresh therefore allowing the guard to accept the call. Each value is uniquely stored per merchant account and cannot be shared cross merchant. The lifetime of the cookie is set to 24 hours. #### Brute Force Prevention To prevent multiple calls hitting the server, attempting a brute force attack, the login process 1. is fronted by a contemporary web application firewall 2. creates an event for each token when access was denied 3. should the number of failed events breach more than 5 in 30 minutes, the token is locked for an hour 4. should the number of events breach more than 20 the token is fully locked ### Attachments Attachments can be included in the request in 2 ways 1. Via a data element direct in the request 2. Via a URL upload to a provided pre-signed URL The decision of which option is dependent on the size of the attachments. Should the attachment size be greater than 32kb a URL upload is required. Small attachments can be included in the JSON request. This is to prevent our web firewall from blocking your request and to also ensure efficiency of larger file uploads. There is a maximum of 3 attachments that can be added to a request. ```json [{ "filename": "invoice1.pdf", "mime-type": "application/pdf" },{ "filename": "invoice2.pdf", "data": "b4sE64Enc0dEd…=", "mime-type": "application/pdf" }] ``` | Field | Type | Usage | Description | |———–|——–|———-|——————————————————————————————————————————————————| | filename | string | Required | The name of the attachment normally taken from the filename. You should not include the filename path as appropriate | | data | string | Optional | base64 encoding of the file if less than 32kb in size | | mime-type | string | Required | The mime type of the attachment as defined in [RFC 9110](www.rfc-editor.org/rfc/rfc9110.html). Currently only `application/pdf` is supported | #### Attachment Result A result of an attachment specifies whether the attachment was successfully added or whether a further upload is requried | Field | Type | Usage | Description | |——–|——–|———-|—————————————————————————————————————————————————| | result | string | Required | `OK` should the file have uploaded or `UPLOAD` if the file is required to be uploaded. | | name | string | Required | The filename that was specified in the upload process | | url | string | Optional | Should an upload be required, this URL is available for an upload to be issued. The URL is only available for uploads for 24 hours from creation. |
304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 |
# File 'lib/citypay_api_client/api/paylink_api__.rb', line 304 def token_create_bill_payment_request_with_http_info(paylink_bill_payment_token_request, opts = {}) if @api_client.config.debugging @api_client.config.logger.debug 'Calling API: PaylinkApi.token_create_bill_payment_request ...' end # verify the required parameter 'paylink_bill_payment_token_request' is set if @api_client.config.client_side_validation && paylink_bill_payment_token_request.nil? fail ArgumentError, "Missing the required parameter 'paylink_bill_payment_token_request' when calling PaylinkApi.token_create_bill_payment_request" end # resource path local_var_path = '/paylink/bill-payment' # query parameters query_params = opts[:query_params] || {} # header parameters header_params = opts[:header_params] || {} # HTTP header 'Accept' (if needed) header_params['Accept'] = @api_client.select_header_accept(['application/json', 'text/xml']) # HTTP header 'Content-Type' content_type = @api_client.select_header_content_type(['application/json', 'text/xml']) if !content_type.nil? header_params['Content-Type'] = content_type end # form parameters form_params = opts[:form_params] || {} # http body (model) post_body = opts[:debug_body] || @api_client.object_to_http_body(paylink_bill_payment_token_request) # return_type return_type = opts[:debug_return_type] || 'PaylinkTokenCreated' # auth_names auth_names = opts[:debug_auth_names] || ['cp-api-key'] = opts.merge( :operation => :"PaylinkApi.token_create_bill_payment_request", :header_params => header_params, :query_params => query_params, :form_params => form_params, :body => post_body, :auth_names => auth_names, :return_type => return_type ) data, status_code, headers = @api_client.call_api(:POST, local_var_path, ) if @api_client.config.debugging @api_client.config.logger.debug "API called: PaylinkApi#token_create_bill_payment_request\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}" end return data, status_code, headers end |
#token_create_request(paylink_token_request_model, opts = {}) ⇒ PaylinkTokenCreated
Create Paylink Token Creates a Paylink token from the CityPay API.
362 363 364 365 |
# File 'lib/citypay_api_client/api/paylink_api__.rb', line 362 def token_create_request(paylink_token_request_model, opts = {}) data, _status_code, _headers = token_create_request_with_http_info(paylink_token_request_model, opts) data end |
#token_create_request_with_http_info(paylink_token_request_model, opts = {}) ⇒ Array<(PaylinkTokenCreated, Integer, Hash)>
Create Paylink Token Creates a Paylink token from the CityPay API.
372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 |
# File 'lib/citypay_api_client/api/paylink_api__.rb', line 372 def token_create_request_with_http_info(paylink_token_request_model, opts = {}) if @api_client.config.debugging @api_client.config.logger.debug 'Calling API: PaylinkApi.token_create_request ...' end # verify the required parameter 'paylink_token_request_model' is set if @api_client.config.client_side_validation && paylink_token_request_model.nil? fail ArgumentError, "Missing the required parameter 'paylink_token_request_model' when calling PaylinkApi.token_create_request" end # resource path local_var_path = '/paylink/create' # query parameters query_params = opts[:query_params] || {} # header parameters header_params = opts[:header_params] || {} # HTTP header 'Accept' (if needed) header_params['Accept'] = @api_client.select_header_accept(['application/json', 'text/xml']) # HTTP header 'Content-Type' content_type = @api_client.select_header_content_type(['application/json', 'text/xml']) if !content_type.nil? header_params['Content-Type'] = content_type end # form parameters form_params = opts[:form_params] || {} # http body (model) post_body = opts[:debug_body] || @api_client.object_to_http_body(paylink_token_request_model) # return_type return_type = opts[:debug_return_type] || 'PaylinkTokenCreated' # auth_names auth_names = opts[:debug_auth_names] || ['cp-api-key'] = opts.merge( :operation => :"PaylinkApi.token_create_request", :header_params => header_params, :query_params => query_params, :form_params => form_params, :body => post_body, :auth_names => auth_names, :return_type => return_type ) data, status_code, headers = @api_client.call_api(:POST, local_var_path, ) if @api_client.config.debugging @api_client.config.logger.debug "API called: PaylinkApi#token_create_request\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}" end return data, status_code, headers end |
#token_purge_attachments_request(token, opts = {}) ⇒ Acknowledgement
Purges any attachments for a Paylink Token Purges any attachments for a token for GDPR or DP reasons.
430 431 432 433 |
# File 'lib/citypay_api_client/api/paylink_api__.rb', line 430 def (token, opts = {}) data, _status_code, _headers = (token, opts) data end |
#token_purge_attachments_request_with_http_info(token, opts = {}) ⇒ Array<(Acknowledgement, Integer, Hash)>
Purges any attachments for a Paylink Token Purges any attachments for a token for GDPR or DP reasons.
440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 |
# File 'lib/citypay_api_client/api/paylink_api__.rb', line 440 def (token, opts = {}) if @api_client.config.debugging @api_client.config.logger.debug 'Calling API: PaylinkApi.token_purge_attachments_request ...' end # verify the required parameter 'token' is set if @api_client.config.client_side_validation && token.nil? fail ArgumentError, "Missing the required parameter 'token' when calling PaylinkApi.token_purge_attachments_request" end # resource path local_var_path = '/paylink/{token}/purge-attachments'.sub('{' + 'token' + '}', CGI.escape(token.to_s)) # query parameters query_params = opts[:query_params] || {} # header parameters header_params = opts[:header_params] || {} # HTTP header 'Accept' (if needed) header_params['Accept'] = @api_client.select_header_accept(['application/json', 'text/xml']) # form parameters form_params = opts[:form_params] || {} # http body (model) post_body = opts[:debug_body] # return_type return_type = opts[:debug_return_type] || 'Acknowledgement' # auth_names auth_names = opts[:debug_auth_names] || ['cp-api-key'] = opts.merge( :operation => :"PaylinkApi.token_purge_attachments_request", :header_params => header_params, :query_params => query_params, :form_params => form_params, :body => post_body, :auth_names => auth_names, :return_type => return_type ) data, status_code, headers = @api_client.call_api(:PUT, local_var_path, ) if @api_client.config.debugging @api_client.config.logger.debug "API called: PaylinkApi#token_purge_attachments_request\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}" end return data, status_code, headers end |
#token_reconciled_request(token, opts = {}) ⇒ Acknowledgement
Reconcile Paylink Token Marks a Paylink Token as reconciled when reconciliation is performed on the merchant’s side.
493 494 495 496 |
# File 'lib/citypay_api_client/api/paylink_api__.rb', line 493 def token_reconciled_request(token, opts = {}) data, _status_code, _headers = token_reconciled_request_with_http_info(token, opts) data end |
#token_reconciled_request_with_http_info(token, opts = {}) ⇒ Array<(Acknowledgement, Integer, Hash)>
Reconcile Paylink Token Marks a Paylink Token as reconciled when reconciliation is performed on the merchant's side.
503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 |
# File 'lib/citypay_api_client/api/paylink_api__.rb', line 503 def token_reconciled_request_with_http_info(token, opts = {}) if @api_client.config.debugging @api_client.config.logger.debug 'Calling API: PaylinkApi.token_reconciled_request ...' end # verify the required parameter 'token' is set if @api_client.config.client_side_validation && token.nil? fail ArgumentError, "Missing the required parameter 'token' when calling PaylinkApi.token_reconciled_request" end # resource path local_var_path = '/paylink/{token}/reconciled'.sub('{' + 'token' + '}', CGI.escape(token.to_s)) # query parameters query_params = opts[:query_params] || {} # header parameters header_params = opts[:header_params] || {} # HTTP header 'Accept' (if needed) header_params['Accept'] = @api_client.select_header_accept(['application/json', 'text/xml']) # form parameters form_params = opts[:form_params] || {} # http body (model) post_body = opts[:debug_body] # return_type return_type = opts[:debug_return_type] || 'Acknowledgement' # auth_names auth_names = opts[:debug_auth_names] || ['cp-api-key'] = opts.merge( :operation => :"PaylinkApi.token_reconciled_request", :header_params => header_params, :query_params => query_params, :form_params => form_params, :body => post_body, :auth_names => auth_names, :return_type => return_type ) data, status_code, headers = @api_client.call_api(:PUT, local_var_path, ) if @api_client.config.debugging @api_client.config.logger.debug "API called: PaylinkApi#token_reconciled_request\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}" end return data, status_code, headers end |
#token_reopen_request(token, opts = {}) ⇒ Acknowledgement
Reopen Paylink Token Allows for a Paylink Token to be reopened if a Token has been previously closed and payment has not yet been made.
556 557 558 559 |
# File 'lib/citypay_api_client/api/paylink_api__.rb', line 556 def token_reopen_request(token, opts = {}) data, _status_code, _headers = token_reopen_request_with_http_info(token, opts) data end |
#token_reopen_request_with_http_info(token, opts = {}) ⇒ Array<(Acknowledgement, Integer, Hash)>
Reopen Paylink Token Allows for a Paylink Token to be reopened if a Token has been previously closed and payment has not yet been made.
566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 |
# File 'lib/citypay_api_client/api/paylink_api__.rb', line 566 def token_reopen_request_with_http_info(token, opts = {}) if @api_client.config.debugging @api_client.config.logger.debug 'Calling API: PaylinkApi.token_reopen_request ...' end # verify the required parameter 'token' is set if @api_client.config.client_side_validation && token.nil? fail ArgumentError, "Missing the required parameter 'token' when calling PaylinkApi.token_reopen_request" end # resource path local_var_path = '/paylink/{token}/reopen'.sub('{' + 'token' + '}', CGI.escape(token.to_s)) # query parameters query_params = opts[:query_params] || {} # header parameters header_params = opts[:header_params] || {} # HTTP header 'Accept' (if needed) header_params['Accept'] = @api_client.select_header_accept(['application/json', 'text/xml']) # form parameters form_params = opts[:form_params] || {} # http body (model) post_body = opts[:debug_body] # return_type return_type = opts[:debug_return_type] || 'Acknowledgement' # auth_names auth_names = opts[:debug_auth_names] || ['cp-api-key'] = opts.merge( :operation => :"PaylinkApi.token_reopen_request", :header_params => header_params, :query_params => query_params, :form_params => form_params, :body => post_body, :auth_names => auth_names, :return_type => return_type ) data, status_code, headers = @api_client.call_api(:PUT, local_var_path, ) if @api_client.config.debugging @api_client.config.logger.debug "API called: PaylinkApi#token_reopen_request\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}" end return data, status_code, headers end |
#token_resend_notification_request(token, paylink_resend_notification_request, opts = {}) ⇒ Acknowledgement
Resend a notification for Paylink Token Resend a notification for Paylink Token.
620 621 622 623 |
# File 'lib/citypay_api_client/api/paylink_api__.rb', line 620 def token_resend_notification_request(token, paylink_resend_notification_request, opts = {}) data, _status_code, _headers = token_resend_notification_request_with_http_info(token, paylink_resend_notification_request, opts) data end |
#token_resend_notification_request_with_http_info(token, paylink_resend_notification_request, opts = {}) ⇒ Array<(Acknowledgement, Integer, Hash)>
Resend a notification for Paylink Token Resend a notification for Paylink Token.
631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 |
# File 'lib/citypay_api_client/api/paylink_api__.rb', line 631 def token_resend_notification_request_with_http_info(token, paylink_resend_notification_request, opts = {}) if @api_client.config.debugging @api_client.config.logger.debug 'Calling API: PaylinkApi.token_resend_notification_request ...' end # verify the required parameter 'token' is set if @api_client.config.client_side_validation && token.nil? fail ArgumentError, "Missing the required parameter 'token' when calling PaylinkApi.token_resend_notification_request" end # verify the required parameter 'paylink_resend_notification_request' is set if @api_client.config.client_side_validation && paylink_resend_notification_request.nil? fail ArgumentError, "Missing the required parameter 'paylink_resend_notification_request' when calling PaylinkApi.token_resend_notification_request" end # resource path local_var_path = '/paylink/{token}/resend-notification'.sub('{' + 'token' + '}', CGI.escape(token.to_s)) # query parameters query_params = opts[:query_params] || {} # header parameters header_params = opts[:header_params] || {} # HTTP header 'Accept' (if needed) header_params['Accept'] = @api_client.select_header_accept(['application/json', 'text/xml']) # HTTP header 'Content-Type' content_type = @api_client.select_header_content_type(['application/json', 'text/xml']) if !content_type.nil? header_params['Content-Type'] = content_type end # form parameters form_params = opts[:form_params] || {} # http body (model) post_body = opts[:debug_body] || @api_client.object_to_http_body(paylink_resend_notification_request) # return_type return_type = opts[:debug_return_type] || 'Acknowledgement' # auth_names auth_names = opts[:debug_auth_names] || ['cp-api-key'] = opts.merge( :operation => :"PaylinkApi.token_resend_notification_request", :header_params => header_params, :query_params => query_params, :form_params => form_params, :body => post_body, :auth_names => auth_names, :return_type => return_type ) data, status_code, headers = @api_client.call_api(:POST, local_var_path, ) if @api_client.config.debugging @api_client.config.logger.debug "API called: PaylinkApi#token_resend_notification_request\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}" end return data, status_code, headers end |
#token_status_request(token, opts = {}) ⇒ PaylinkTokenStatus
Paylink Token Status Obtains the full status of a given Paylink Token.
693 694 695 696 |
# File 'lib/citypay_api_client/api/paylink_api__.rb', line 693 def token_status_request(token, opts = {}) data, _status_code, _headers = token_status_request_with_http_info(token, opts) data end |
#token_status_request_with_http_info(token, opts = {}) ⇒ Array<(PaylinkTokenStatus, Integer, Hash)>
Paylink Token Status Obtains the full status of a given Paylink Token.
703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 |
# File 'lib/citypay_api_client/api/paylink_api__.rb', line 703 def token_status_request_with_http_info(token, opts = {}) if @api_client.config.debugging @api_client.config.logger.debug 'Calling API: PaylinkApi.token_status_request ...' end # verify the required parameter 'token' is set if @api_client.config.client_side_validation && token.nil? fail ArgumentError, "Missing the required parameter 'token' when calling PaylinkApi.token_status_request" end # resource path local_var_path = '/paylink/{token}/status'.sub('{' + 'token' + '}', CGI.escape(token.to_s)) # query parameters query_params = opts[:query_params] || {} # header parameters header_params = opts[:header_params] || {} # HTTP header 'Accept' (if needed) header_params['Accept'] = @api_client.select_header_accept(['application/json', 'text/xml']) # form parameters form_params = opts[:form_params] || {} # http body (model) post_body = opts[:debug_body] # return_type return_type = opts[:debug_return_type] || 'PaylinkTokenStatus' # auth_names auth_names = opts[:debug_auth_names] || ['cp-api-key'] = opts.merge( :operation => :"PaylinkApi.token_status_request", :header_params => header_params, :query_params => query_params, :form_params => form_params, :body => post_body, :auth_names => auth_names, :return_type => return_type ) data, status_code, headers = @api_client.call_api(:GET, local_var_path, ) if @api_client.config.debugging @api_client.config.logger.debug "API called: PaylinkApi#token_status_request\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}" end return data, status_code, headers end |