The final step of every payment transaction, regardless of the service type, is to get notified of the outcome - i.e. whether the payment was successful or not. Payment result notification provides you with all the relevant data for your further processing.
In order to have this option activated you need to provide URL of notification handling endpoint (i.e. web service which handles notifications). Upon transaction reaching its final state, Centili will invoke provided notification handling endpoint, with the following parameters:
|**transactionid**||String||Unique payment transaction identifier used on Centili Payment Platform. Used to identify any particular transaction within Centili system. Default value is encrypted, but on request it can be set to decrypted value.||ac8bd4a9c26fd94c c786be72cea3936f||Always|
|**phone**||String||Mobile number of customer who paid or attempted to pay. It is in [E.164 format](🔗) excluding plus ("+") character.||4366124567||Always|
|**userid**||String||Your user identifier. If the value is not set within payment request, this field will contain MSISDN of the particular customer.||usrId1983 _NOTE: If the value is not set within payment request, this field will contain MSISDN of the particular customer._||Always|
|**country**||String||The code of countryof the custoemr. _For more details use [official ISO list of country codes](🔗)._||FR||Always|
|**mno**||String||Mobile Network Operator which customer belongs to. This parameter is sent in format _<mobile_country_code>< mobile_network_code>_ (**mcc** and **mnc** _concatenated_).||50219||In some cases (e.g. WAP [flow](🔗)) this parameter will not be sent through payment result notification.|
|**mnocode**||String||Mobile Network Operator code in Centili’s system which customer belongs to. It is provided by Centili.||FR_ORANGE||Always|
|**amount**||Integer||Quantity of purchased virtual goods. It depends on package configuration of the service.||5||Always|
|**status**||String||Status of the payment. Defines the payment result of the transaction. According to this parameter you should implement your business logic (e.g. provide content to the customer or not). Possible values are: _ **success** _ **canceled** * **failed**||success||Always|
|**revenue**||Decimal||The net payout received from the particular payment||3.0567||Always|
|**revenuecurrency**||String||Currency in which revenue has been calculated (prefered currency under your Partner Panel account).||EUR||Always|
|**reference**||String||Reference to customer or transaction at your side, sent by you in payment initiation step. **NOTE**: There are different ways how you can send this parameter to Centili depending on payment initiation type: _MO initiation_ - it can be passed as additional word after the keyword (YOURKEYWORD 12345) _Payment Page_ - it can be passed as a specific parameter (...&reference=12345) _API_ - must be sent as _clientid_ ("clientid":"12345")||12345||In some cases this parameter can be called _clientid_ instead of reference. For more info, please contact Centili tech team.|
|**enduserprice**||Decimal||Price paid (or should have been paid if transaction is failed) by the customer in local currency with VAT included.||8.000||Always|
|**service**||String||Unique identifier of your service registered inside Centili Payment Platform (API key).||3586a2363bcd51a2 b3c4d5f34918263a||Always|
|**errormessage**||String||Error description in case of failed transaction request. Possible values: _ CHARGING_FAILED _ PIN_MAX_ATTEMPTS_EXCEEDED _ TRANSACTION_TIMEOUT _ NOT_ENOUGH_CREDIT * TRANSACTION_CANCELED_BY_USER||CHARGING_FAILED||Available in case of error|
|**event_type**||String||Type of transaction depending on type of service. Possible values for one-time payments: _ one_off Possible values for subscription services: _ opt_in _ opt_out _ recurring_billing||opt_in||Always|
|**opt_in_channel**||String||Channels through which the services were used. Possible values are: _ web _ wap * android||web||Available only in subscription services|
|**interval**||String||Subscription interval according to service configuration. Possible values are: _ DAY _ WEEK * MONTH||day||Available only in subscription services|
|**sign**||String||Hash value calculated using HMAC-SHA1 algorithm. The algorithm is applied on concatenated list of alphabetically sorted parameters. _NOTE: Please refer to the [signature key generation guide](🔗)._||aee0ed6b191bbcef271 dfded5b5b3fa2fc1bf14||Always|
|**subscriptionid**||String||Unique identifier of a subscription in Centili Platform. All the transactions related to single subscription (_opt_in, recurring_billing, opt_out_) will have identical **subscriptionid** value.||4300105998||Available only in subscription services|
|**originalmessage**||String||Original SMS message received from the customer.||GAME 2525||Additional parameter for PSMS connections|
|**shortcode**||String||Short number to which message has been sent.||2525||Additional parameter for PSMS connections|
|**momessage**||String||Original keyword for registered service.||GAME||Additional parameter for PSMS connections|
Parameters which will be sent in this notification can vary. Please consult Centili tech team in order to get exact information related to your service.
**One-time payment notification sent using HTTP GET method:**
**Subscription payment notification sent using HTTP GET method:**
## Payment Result Notification response
After invoking your notification handling endpoint on provided notification handling URL, we are expecting a HTTP response with one of the following statuses:
## HTTP status 200
Result notification is sucessfully completed on your side. Transaction notification status is marked as **success** on transaction page in Centili Partner Panel.
## HTTP status 406
Result notification is rejected (_Not acceptable_) and we will immediately discontinue notification for that transaction. Transaction notification status is marked as **rejected** on transaction page in Centili Partner Panel.
## All other HTTP statuses
When neither http status 200 nor status 406 is returned (e.g. your server goes offline or any other error occurs), then Centili will keep retrying notifying you 3 times during the next 30 minutes. Undelivered payment result notification will be marked in Centili Partner Panel transactions page and you will also be able to resend them to your URL manually.
## Resending undelivered payment result notifications
On **[Centili Partner Panel](🔗)** transactions page you can:
## Resend single payment result notification
When there is payment result notification with status failed you can resend payment result notification for that transaction and this is done immediately.
## Resend bulk payment result notification
When multiple transactions have the payment result notification status failed you can resend payment result notification for multiple transactions together. All of the selected payment result notifications will be queued for sending.