FAQs

1. Are the Salt Index and Salt key the same?
No, the Salt Index and Salt key are different. Merchant ID can have different salt keys. Each salt key has a unique salt index

2. What is Server to Server callback (S2S callback)?
S2S callback is the response posted by PhonePe to the merchant server as soon as the transaction reaches the final state(i.e. Success or Failure

3. How to get the S2S callback configured?
S2S callbacks can be configured in two ways
Dynamic S2S Callback – Merchant can provide the callback URL in the header part (i.e. x-callback-URL) of the request while initiating the payment. Merchant can pass different callbacks for different transactions
Static S2S Callback – Merchants can get a static S2S callback URL configured at PhonePe’s backend

4. What are the limitations of the S2S callback?
S2S callbacks are sent only if a transaction reaches the terminal state

5. Is it mandatory to use S2S callback functionality?
It is optional. If S2S callbacks are not being used, in order to safeguard from any fraudulent activity or tampering, merchants must validate the response via check transaction status API.

6. What is the Check Payment Status API?
It is used to get the current state of any transaction. Merchant can query PhonePe system to fetch the status of any transaction

7. What is the transactionId parameter?
Transaction id is a unique value passed in the payment/refund request in order to track the transaction in later stages. Values should be alpha-numeric and without any spaces and should contain less than 38 characters

8. Do we need to use Check Payment Status API to get the status of the transaction if we have already passed x-callback-url to get the callback from PhonePe server?
Yes. It is used as a fallback option and it gives the current status of the transaction even if it is in a non-final state (ex. PAYMENT_PENDING).

9. What is the difference between PAYMENT_ERROR and INTERNAL_SERVER_ERROR?

PAYMENT_ERRORINTERNAL_SERVER_ERROR
It is the terminal state. No status check is required if the response is receivedThis is not the terminal state. Status check needs to be called in order to get the terminal state of the transaction
It simply means that payment is failed and the user/cashier can initiate a new transactionIn this scenario, the merchant system needs to wait until the final state of the transaction (i.e. PAYMENT_SUCCESS or PAYMENT_ERROR) is received. Merchant systems can use Check-Payment-Status API in order to get the current status

10. How is merchantOrderId different from transactionId?
TransactionId is a unique id for each payment request. However, MerchantOrderId can be the same for multiple payment attempts against particular order in the merchant system

11. What is the purpose of using X-Verify?
X-verify is used for authentication purpose. X-verify ensures that the PhonePe has received the authenticated request and the transaction request has not tampered

12. What will be the Transaction Status in various scenarios and How should merchants handle them?
Transaction Status will be Payment_Success, if the transaction is completed successfully at Bank/Phonepe. This is the terminal state of the transaction
Transaction Status will be Payment_Failed, if the transaction is failed at Bank/Phonepe. This is the terminal state of the transaction
Transaction Status will be Payment_Pending, if the transaction has not reached either success/failure state at Phonepe because of network issue or processing delay on the bank side. The status can be Pending even if the user has not initiated a transaction. The merchant needs to call check transaction status API to fetch the status of the transaction

13. What is the use of Merchant ID?
Merchant Id is the unique identifier for a merchant at PhonePe level and is created at the time of merchant onboarding

14. What will be the length of TransactionID?
It should be less than 38 characters

15. Do we need to use Check Payment Status API to get the status of the transaction if we have already passed x-callback-URL to get the callback from the PhonePe server?
Yes. It is used as a fallback option and it gives the current status of the transaction even if it is in a non-final state (ex. PAYMENT_PENDING).

16. What is the difference between Merchant App Unique ID and Merchant ID?
Merchant App Unique ID: Merchant App Unique ID is required to open the merchant website/PWA inside the PhonePe app. The Merchant App is a unique identifier for the App.
Merchants using aggregator integration(integration via PayU, Razorpay) can use this id as X-Client id for API validation for SSO
Merchant ID: Merchant Id is a unique id for a merchant share by PhonePe at the time of onboarding and is used for SSO integration and accepting the payments.
Please note Merchant ID is issued only to the merchants integrating PhonePe Switch solution directly

17. What is the purpose of ‘validFor’ parameter in /transaction/initiate API?
‘validFor’ is time duration in milli-seconds for which currently initiated payment request is valid for. If user does not complete payment within that time window control will be returned back to Merchant App. Also if payment does not reach a terminal state within that time window, transaction will be failed and control sent back to Merchant App.

18. I do not have the order details URL before payment is complete. How do I send ‘Url’ in ‘/transaction/initiate’ API?
While making initiate API call, it is fine if the order URL is not workable yet. Once the order is confirmed the link must work and user shall be able to see the order details there.

19. ‘/transaction/status’ API is returning an error with code ‘TRANSACTION_NOT_FOUND’. What does it mean?
This error code means the user has not initiated payment on PhonePe’s payment page. In such a case Merchant can ask the user to re-attempt payment and invoke ‘transaction/initiate’ API with a different ‘transactionId’.

20. I am not receiving a Server-To-Server(S2S) callback as told in the integration call. What is going wrong?
In such case, kindly check if

  1. The S2S callback you have registered is accessible publicly
  2. The endpoint registered is an ‘HTTPS’ end-point. PhonePe supports only HTTPS URL. Standard Port for HTTPS URL is 443

21. How do I store my session related information like sessionID?
You can store any session related information in our key-value store as documented here
Example usage:
.setItem(SESSION_INFOS, sessionId, U7hd2irmo0278)

22. How do I retrieve my session related information like sessionID?
You can retrieve any session related information in our key-value store as documented here.
Example usage:
.getItem(SESSION_INFOS, ‘sessionId’, null)
.then(data => {
console.log(Value received = {data})
})
.catch(err => {})

23. My APP requires different permissions from user’s PhonePe. What all access can I get?
PhonePe supports different permissions. You can use the access mentioned here