Cómo obtener respuesta en la URL especificada en el pago de hipervínculo UPI


8

Estoy tratando de pagar a través de un hipervínculo UPI como

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
  • Estoy enviando el enlace anterior a través de sms
  • Cuando hago clic en el enlace, muestra la lista de aplicaciones UPI como opción
  • He seleccionado la aplicación BHIM (también probé otras aplicaciones)
  • Luego completó el pago, hasta ahora funciona bien.

Una vez que se realiza el pago UPI , no se llama al controlador Spring que maneja la solicitud de "devolución de llamada" a https://test.com/payment/orderId=12345 .

Entonces, ¿cómo obtener la respuesta del pago UPI Hyperlink en Java correctamente?

Editar:

Este es el método del controlador. También lo he intentado en @GetMappinglugar de @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;
}

¿Es una solicitud GET o POST que está esperando? ¿El controlador detrás del enlace también está hecho? ¿Cuál es el código detrás del controlador de "PaymentController.java"? ¿hay una ruta? ¿Puedes llamarlo explícitamente usando cartero y enviando las variables esperadas? ¿Qué respuesta ves cuando lo llamas tú mismo?
Jasper Lankhorst

Pago realizado con éxito. He intentado GET y POST para redireccionar url [ test.com/payment/orderId=123456] y también puedo llamarlo explícitamente. Solo estoy haciendo System.out.println("Hello");dentro del controlador
Nilesh Patel

¿Puedes proporcionar un fragmento de código?
Max Peng el

@NileshPatel, ¿puede confirmar que realmente puede llamar /payment/orderId=123456directamente desde un navegador, por ejemplo? Debido a tus ejemplos, no debería ser posible. Mira la respuesta de MyTwoCents ...
Petr Bodnár

@Petr Bodnár, puedo llamar /payment/orderId=123456desde la web y funciona bien
Nilesh Patel

Respuestas:


1

Si lo entendí correctamente, su URL de redireccionamiento es

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

Y cuando se llama a esto, debe obtener el valor de ID de pedido en su controlador.

Luego intente cambiar su método a algo como esto:

@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;
}

Problema:

Ha configurado su mapeo de URL como /paymentsolo, por lo que cualquier cosa posterior se excluirá de este mapeo, por ejemplo:/payment/sdfdsfs


Según la información proporcionada en el OP, esta es la respuesta más relevante y útil hasta ahora. Una solución alternativa es utilizar una forma codificada adecuadamente como URL https://test.com/payment?orderId=123456del valor del urlparámetro pasado a la URL UPI. Aún así, el problema básico y su solución sigue siendo el mismo.
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

Su problema es con su firma de método. Intente agregar la respuesta a su parámetro de método para que pueda obtener el objeto de respuesta. Cambie su método a:

public ModelAndView credPayment(HttpServletRequest request, HttpServletResponse response)

debería stackoverflow.com/questions/4564465/… Si intenta ejecutar su solicitud en cartero, ¿cuál es la respuesta que obtiene? no es una buena manera de calificar -1 para alguien que le ofrece ayuda
Fateh

compruebe también esta respuesta stackoverflow.com/questions/6467848/…
Fateh

¿Alguna vez ha trabajado con el pago de hipervínculo UPI? su enlace no es sobre el hipervínculo UPI. @Fateh
Nilesh Patel

no importa al final es una solicitud HTTP, ¿verdad?
Fateh

¿Importa porque hay dudas de que estén llamando a nuestra url o no? y si están llamando a nuestra url, ¿cómo manejar esa solicitud?
Nilesh Patel
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.