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;
}
Nilesh Patel
quelle
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

Meine zwei Cent
quelle
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();
            }
        }
    }

Srinivasan CP
quelle
-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)
Fateh
quelle
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