So erhalten Sie eine Antwort auf die in der UPI Hyperlink-Zahlung angegebene URL


8

Ich versuche über einen UPI-Hyperlink wie zu bezahlen

upi://pay?pa=abc@upi&pn=payeeName&tr=1234&tn=Pay%20to%20payeeName&am=1&mam=1&cu=INR&url=https://test.com/payment/orderId=123456
  • Ich sende den obigen Link per SMS
  • Wenn ich auf den Link klicke, wird die UPI-Anwendungsliste als Option angezeigt
  • Ich habe die BHIM-App ausgewählt (auch andere Anwendungen ausprobiert).
  • Dann Zahlung abgeschlossen, bis jetzt funktioniert es gut.

Nach Abschluss der UPI-Zahlung wird der Spring-Controller, der die Rückrufanforderung an https://test.com/payment/orderId=12345 verarbeitet , nicht aufgerufen.

Wie kann man die Antwort auf die UPI Hyperlink-Zahlung in Java richtig erhalten?

Bearbeiten:

Dies ist die Controller-Methode. Ich habe es auch versucht @GetMappingstatt @PostMapping.

@PostMapping("/payment")
public ModelAndView credPayment(HttpServletRequest request) {

    String key = request.getParameter("orderId");
    String txnId = request.getParameter("txnId");
    String responseCode = request.getParameter("responseCode");
    String approvalRefNo = request.getParameter("ApprovalRefNo");
    String status = request.getParameter("Status");
    String txnRef = request.getParameter("txnRef");
    System.out.println("Parameter Names");
    while (request.getParameterNames().hasMoreElements()) {
        System.out.println(request.getParameterNames().nextElement());
    }

    System.out.println("Header Names");
    while (request.getHeaderNames().hasMoreElements()) {
        System.out.println(request.getHeaderNames().nextElement());
    }

    System.out.println("txnId : "+txnId);
    System.out.println("responseCode : "+responseCode);
    System.out.println("ApprovalRefNo : "+approvalRefNo);
    System.out.println("Status : "+status);
    System.out.println("txnRef : "+txnRef);

    ModelAndView modelAndView = new ModelAndView();
    modelAndView.setViewName("redirect:/");
    return modelAndView;
}

Ist es eine GET- oder eine POST-Anfrage, die Sie erwarten? Ist der Controller hinter dem Link auch hergestellt? Was ist der Code hinter dem Controller von "PaymentController.java"? Gibt es eine Route? Können Sie es explizit aufrufen, indem Sie den Postboten verwenden und die erwarteten Variablen senden? Welche Antwort sehen Sie, wenn Sie es selbst nennen?
Jasper Lankhorst

Zahlung erfolgreich durchgeführt. Ich habe sowohl GET als auch POST für die Weiterleitungs-URL [ test.com/payment/orderId=123456] ausprobiert und kann sie auch explizit aufrufen. Ich mache gerade System.out.println("Hello");in Controller
Nilesh Patel

Können Sie ein Code-Snippet bereitstellen?
Max Peng

@NileshPatel, können Sie bitte bestätigen, dass Sie beispielsweise wirklich /payment/orderId=123456direkt von einem Browser aus anrufen können? Denn basierend auf Ihren Beispielen sollte es nicht möglich sein - sehen Sie sich die Antwort von MyTwoCents an ...
Petr Bodnár

@Petr Bodnár, ich kann /payment/orderId=123456aus dem Internet anrufen und es funktioniert gut
Nilesh Patel

Antworten:


1

Wenn ich es richtig verstanden habe, lautet Ihre Weiterleitungs-URL

https://test.com/payment/orderId=123456

Und wenn dies aufgerufen wird, müssen Sie den Bestell-ID-Wert in Ihrem Controller abrufen.

Versuchen Sie dann, Ihre Methode wie folgt zu ändern:

@GetMapping(value = "/payment/{order}")
public ModelAndView credPayment(@PathVariable("order") String order, HttpServletRequest request) {
    System.out.println(order); // prints orderId=123456
    ModelAndView modelAndView = new ModelAndView();
    modelAndView.setViewName("redirect:/");
    return modelAndView;
}

Problem:

Sie haben Ihre URL-Zuordnung als /paymentnur konfiguriert , sodass alle folgenden Elemente von dieser Zuordnung ausgeschlossen werden, z./payment/sdfdsfs


Nach den im OP enthaltenen Informationen ist dies die bislang relevanteste und nützlichste Antwort. Eine alternative Lösung besteht darin, eine ordnungsgemäß url-codierte Form https://test.com/payment?orderId=123456als Wert des urlan die UPI-URL übergebenen Parameters zu verwenden. Das Grundproblem und seine Lösung bleiben jedoch gleich.
Petr Bodnár

0
Uri myAction = Uri.parse("upi://pay?pa=******@****&pn="+"*******"+"&mc="+"&tid="+transaction_ref_id +"&tr="
                +transaction_ref_id +"&tn=Pay%20to%20*****%20*****%20App&am="+"1.00"+"&mam=null&cu=INR&url=https://mystar.com/orderid="+sOrderId);

        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_VIEW);
        intent.setData(myAction);
        startActivityForResult(intent, 100);

*******************
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == 100) {
            if (resultCode == RESULT_OK) {
                String res = data.getStringExtra("response");
                if (res.contains("Status=SUCCESS")) {
                    Toast.makeText(context, "Payment successful!", Toast.LENGTH_LONG).show();
                }
                else {
                    Toast.makeText(context, "Payment was not successful! Try again later", Toast.LENGTH_LONG).show();
                }
            }
            else {
                Toast.makeText(context, "Payment was not successful!", Toast.LENGTH_LONG).show();
            }
        }
    }


-1

Ihr Problem liegt in Ihrer Methodensignatur. Versuchen Sie, die Antwort zu Ihrem Methodenparameter hinzuzufügen, damit Sie das Antwortobjekt erhalten. Ändern Sie Ihre Methode in:

public ModelAndView credPayment(HttpServletRequest request, HttpServletResponse response)

es sollte stackoverflow.com/questions/4564465/… Wenn Sie versuchen, Ihre Anfrage auf Postbote auszuführen, welche Antwort erhalten Sie? Es ist keine gute Möglichkeit, -1 für jemanden zu bewerten, der Ihnen Hilfe anbietet
Fateh

Überprüfen Sie auch diese Antwort stackoverflow.com/questions/6467848/…
Fateh

Haben Sie jemals mit UPI-Hyperlink-Zahlungen gearbeitet? In Ihrem Link geht es nicht um UPI-Hyperlink. @ Fateh
Nilesh Patel

es spielt am Ende keine Rolle, es ist eine HTTP-Anfrage, oder?
Fateh

Es ist wichtig, weil es eine Frage gibt, ob sie unsere URL anrufen oder nicht? und wenn sie unsere URL anrufen, wie wird dann mit dieser Anfrage umgegangen?
Nilesh Patel
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.