How to get response after integrating UPI using hyperlink

7k views Asked by At

In my iOS application, I need to accept payments from the user. I am using UPI for the same. I have followed the following document provided by UPI

http://www.npci.org.in/documents/UPI-Linking-Specs-ver-1.1_draft.pdf

I have created a deeplink as stated in the document. UIApplication.shared.open is used to open the deeplink url so that it opens any installed PSP(Payment Service Provider) application in my phone(like PhonePe, BHIM etc)

func payButtonClicked() {

        guard let urlString = "upi://pay?pa=samplevpa@ybl&pn=Sample Name&am=1&cu=INR".addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
            else {
                return
            }

        guard let url = URL(string: urlString) else {
            return
        }

        if !UIApplication.shared.canOpenURL(url) {
            print("url cannot be opened")
            return
        }

        UIApplication.shared.open(url, options: [:], completionHandler: { (success) in

            print(success)

        })

    }

I have registered my application with custom URL schemes and have added the scheme upi for ApplicationQueriesScheme in plist file

<array>
        <dict>
            <key>CFBundleTypeRole</key>
            <string>Editor</string>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>SampleApp</string>
            </array>
            <key>CFBundleURLName</key>
            <string>com.company.SampleApp</string>
        </dict>
    </array>
    <key>LSApplicationQueriesSchemes</key>
    <array>
        <string>upi</string>
    </array>

It is opening the PSP application and I'm able to make the transaction. The problem is I'm not able to get the response back from the PSP application. There is no callback method to UIApplication.shared.open method. I need to get the status of the transaction back from the PSP application and show the status to the user. Any help appreciated

4

There are 4 answers

0
Alpesh Patil On

the NPCI UPI Linking Specification states that the URL parameter used in the payment link is for information purpose which the payment apps may use to provide additional information to the payer upon clicking the link.

The link is only expected to show transaction details by the merchant or party that invoked the transaction.

It is not meant as a callback URL or a web hook for completion of transaction.

1
Venkateswara Rao On

Based on the below workflow, you need to have a tie up with Payer/Payee PSP to get notified for your payments. In your scenario, you are required to check with your bank PSP for getting notified on the payment receipt to your accoutns.

I could not see a way for individual Initiator to get notified.

Feel free to correct me.

Workflow by UPI

0
Swasidhant On

Have not tried it but it was mentioned in the document about a url parameter on clicking of which we should show the transaction details to the user.

This should be a URL when clicked provides customer with further transaction details like complete bill details, bill copy, order copy, ticket details, etc. This can also be used to deliver digital goods such as mp3 files etc. after payment.

We could send a url with a url scheme that redirects to the app or an universal link that our app can handle.

Again I have not tried this so I do not know if this works as I think it should or whether it would exactly solve your issue.

https://www.npci.org.in/sites/all/themes/npcl/images/PDF/UPI_Linking_Specs_ver_1.5.1.pdf

0
SURESH KUMAR S On

You can use the url parameter to pass your website url with the get method with order id or payment id as parameter. Once the payment is successful, it is mandate the UPI provider to hit the URL. The purpose of the URL should be keep updating the transaction status and trigger then end user an email or SMS with the transaction status.