Cách nhận phản hồi về url được chỉ định trong thanh toán UPI Hyperlink


8

Tôi đang cố gắng thanh toán qua một siêu liên kết UPI như

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
  • Tôi đang gửi liên kết trên qua tin nhắn
  • Khi tôi nhấp vào liên kết, nó hiển thị danh sách ứng dụng UPI dưới dạng tùy chọn
  • Tôi đã chọn ứng dụng BHIM (cũng đã thử các ứng dụng khác)
  • Sau đó hoàn thành thanh toán, đến bây giờ nó hoạt động tốt.

Sau khi thanh toán UPI được thực hiện, bộ điều khiển Spring xử lý yêu cầu "gọi lại" tới https://test.com/payment/orderId=12345 , sẽ không được gọi.

Vậy làm thế nào để có được phản hồi thanh toán UPI Hyperlink trong Java một cách chính xác?

Biên tập:

Đây là phương pháp điều khiển. Tôi cũng đã thử @GetMappingthay thế @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;
}

đó là một yêu cầu GET hoặc POST mà bạn đang mong đợi? Là bộ điều khiển đằng sau liên kết cũng được thực hiện? Mã đằng sau Bộ điều khiển của "PaymentControll.java" là gì? Có một tuyến đường? bạn có thể gọi nó một cách rõ ràng bằng cách sử dụng người đưa thư và gửi các biến dự kiến ​​không? Phản ứng nào bạn nhìn thấy khi bạn gọi nó là chính mình?
Jasper Lankhorst

Thanh toán xong. Tôi đã thử cả GET và POST cho url chuyển hướng [ test.com/payment/orderId=123456] và tôi cũng có thể gọi nó một cách rõ ràng. Tôi chỉ đang làm System.out.println("Hello");bộ điều khiển bên trong
Nilesh Patel

bạn có thể cung cấp đoạn mã?
Max Peng

@NileshPatel, bạn có thể vui lòng xác nhận rằng bạn thực sự có thể gọi /payment/orderId=123456trực tiếp từ trình duyệt không? Bởi vì dựa trên các ví dụ của bạn, điều đó là không thể - hãy xem câu trả lời của MyTwoCents ...
Petr Bodnár

@Petr Bodnár, tôi có thể gọi /payment/orderId=123456từ web và nó hoạt động tốt
Nilesh Patel

Câu trả lời:


1

Nếu tôi hiểu đúng, URL chuyển hướng của bạn là

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

Và khi điều này được gọi, bạn cần nhận giá trị id thứ tự trong bộ điều khiển của bạn.

Sau đó thử thay đổi phương pháp của bạn thành một cái gì đó như thế này:

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

Vấn đề:

Bạn đã định cấu hình ánh xạ URL của mình là /paymentduy nhất, do đó, mọi thứ sau đó sẽ bị loại khỏi ánh xạ này, ví dụ:/payment/sdfdsfs


Dựa trên thông tin được đưa ra trong OP, đây là câu trả lời hữu ích và phù hợp nhất cho đến nay. Một giải pháp thay thế là sử dụng một hình thức được mã hóa url đúng https://test.com/payment?orderId=123456như giá trị của urltham số được truyền cho URL UPI. Tuy nhiên, vấn đề cơ bản và giải pháp của nó vẫn giống nhau.
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

Vấn đề của bạn là với bạn chữ ký phương pháp. Cố gắng thêm phản hồi vào tham số phương thức của bạn để bạn có thể nhận được đối tượng phản hồi. Thay đổi phương thức của bạn thành:

public ModelAndView credPayment(HttpServletRequest request, HttpServletResponse response)

cần stackoverflow.com/questions/4564465/ cấp Nếu bạn cố chạy yêu cầu của mình trên người đưa thư, bạn sẽ nhận được phản hồi gì? không phải là cách tốt để đánh giá -1 cho ai đó giúp bạn
Fateh

kiểm tra câu trả lời này cũng như stackoverflow.com/questions/6467848/ từ
Fateh

Bạn đã bao giờ làm việc với thanh toán siêu liên kết UPI chưa? liên kết của bạn không phải là về UPI Hyperlink. @Fateh
Nilesh Patel

cuối cùng nó không thành vấn đề, phải không?
Fateh

Có vấn đề gì không vì có câu hỏi rằng họ có gọi url của chúng tôi hay không? và nếu họ đang gọi url của chúng tôi thì làm thế nào để xử lý yêu cầu đó?
Nilesh Patel
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.