Como obter resposta no URL especificado no pagamento UPI Hyperlink

8

Estou tentando pagar através de um hiperlink 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
  • Estou enviando link acima através de sms
  • Quando clico no link, ele mostra a lista de aplicativos UPI como opção
  • Eu selecionei o aplicativo BHIM (também tentei outros aplicativos)
  • Pagamento concluído e até agora funciona bem.

Após o pagamento da UPI, o controlador Spring que lida com a solicitação de "retorno de chamada" para https://test.com/payment/orderId=12345 , não está sendo chamado.

Então, como obter a resposta do pagamento UPI Hyperlink em Java corretamente?

Editar:

Este é o método do controlador. Eu também tentei em @GetMappingvez 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;
}
Nilesh Patel
fonte
é uma solicitação GET ou POST que você está esperando? O controlador por trás do link também foi criado? Qual é o código por trás do Controller "PaymentController.java"? existe uma rota? você pode chamá-lo explicitamente usando o carteiro e enviando as variáveis ​​esperadas? que resposta você vê quando a chama?
Jasper Lankhorst,
Pagamento feito com sucesso. Tentei o GET e o POST para redirecionar o URL [ test.com/payment/orderId=123456] e também posso chamá-lo explicitamente. Estou apenas fazendo o System.out.println("Hello");controlador dentro
Nilesh Patel
você pode fornecer um trecho de código?
Max Peng
@NileshPatel, você pode confirmar que é realmente capaz de ligar /payment/orderId=123456diretamente de um navegador, por exemplo? Porque, com base nos seus exemplos, isso não deveria ser possível - veja a resposta dos MyTwoCents ... #
311 Petr Bodnár
@Petr Bodnár, eu posso chamar /payment/orderId=123456de web e seu trabalho excelentes
Nilesh Patel

Respostas:

1

Se eu entendi direito, seu URL de redirecionamento é

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

E quando isso é chamado, você precisa obter o valor do ID do pedido no seu controlador.

Em seguida, tente alterar seu método para algo como isto:

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

Questão:

Você configurou seu mapeamento de URL como /paymentapenas, portanto, qualquer coisa a seguir será excluída desse mapeamento, por exemplo:/payment/sdfdsfs

Meus dois centavos
fonte
Com base nas informações fornecidas no PO, essa é de longe a resposta mais relevante e útil até o momento. Uma solução alternativa é usar uma forma codificada de URL corretamente https://test.com/payment?orderId=123456como o valor do urlparâmetro passado para o URL da UPI. Ainda assim, o problema básico e sua solução permanecem os mesmos.
Petr Bodnár 24/11/19
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
fonte
-1

Seu problema é com a assinatura do método. Tente adicionar a resposta ao seu parâmetro de método para obter o objeto de resposta. Mude o seu método para:

public ModelAndView credPayment(HttpServletRequest request, HttpServletResponse response)
Fateh
fonte
deve stackoverflow.com/questions/4564465/... Se você tentar executar o seu pedido de carteiro o que a resposta que você recebe? não é uma boa maneira de classificar -1 para alguém oferecendo uma ajuda
Fateh
verifique esta resposta também stackoverflow.com/questions/6467848/…
Fateh
Você já trabalhou com pagamento por hiperlink UPI? seu link não é sobre o hiperlink UPI. @Fateh
Nilesh Patel
não importa no final, é uma solicitação HTTP, certo?
Fateh
Importa porque existe dúvida de que eles estão chamando nosso URL ou não? e se eles estão chamando nosso URL, como lidar com essa solicitação?
Nilesh Patel