java - 如何在 UPI 超链接支付中指定的 url 上获得响应
问题描述
我正在尝试通过 UPI 超链接付款,例如
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
- 我通过短信发送上面的链接
- 当我单击链接时,它显示 UPI 应用程序列表作为选项
- 我选择了 BHIM 应用程序(也尝试了其他应用程序)
- 然后完成付款,直到现在它工作正常。
在 UPI 支付完成后,处理对https://test.com/payment/orderId=12345的“回调”请求的 Spring 控制器不会被调用。
那么如何正确获取Java中UPI超链接支付的响应呢?
编辑:
这是控制器方法。我也试过@GetMapping
代替@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;
}
解决方案
如果我理解正确,您的重定向 URL 是
https://test.com/payment/orderId=123456
当调用它时,您需要在控制器中获取订单 ID 值。
然后尝试将您的方法更改为以下内容:
@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;
}
问题:
您已将 URL 映射配置为/payment
only,因此之后的任何内容都将从此映射中排除,例如:/payment/sdfdsfs
推荐阅读
- javascript - value 属性不会出现在 Angular ngForm 中
- javascript - 使用 Javascript 和 Apps 脚本转换 DateTime 字符串
- node.js - Azure App Service 突然停止并出现 PhantomJS 错误
- c# - WPF 文本块作为终端窗口。我需要设置限制吗?
- python - 如何修复错误“不能在类似字节的对象上使用字符串模式”?
- node.js - 502 网关错误,报头大小
- android - Android如何在Button上设置背景颜色
- javascript - 一个盒子的最大体积
- .net-core - 将 Masstransit 与 RabbitMQ 一起使用时使用的 _dotnet_bus_ 交换是什么
- node.js - 尚未为模型“流派”注册架构。使用 mongoose.model(name, schema)