支付宝即时到帐的退款问题

眉宇下的小格调 2015-02-11 02:08:40
退款流程中,当客户点退款申请后,管理员到申请页面进行退款操作,但是操作完了后支付宝本应该返回到notify_url.jsp,官方给的notify_url.jsp里面是一些加密验证处理,我单独拿出来到一个方法上,让支付宝跳到该方法上去执行我的业务逻辑代码,但是就是跳不过去,它根本就没有进行加密验证,就执行完退款操作了,请问各位大神该怎么做处理?
附:支付流程的时候能正常跳到return_url.jsp进行加密验证,但退款流程就不行,核心代码都一样,没有改变。
...全文
173 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 1 楼 qingyuan18 的回复:
具体一点,notify_url.jsp里面是什么加密验证处理? 你自己的方法里是指你自己系统的jsp页面?如果你自己的jsp页面ajax去访问支付宝的页面,那估计是不行的,跨域了 把具体的代码贴出来看看
补充一下,跳转方法的时候是Spring mvc,具体方法如下:

@RequestMapping(value = "notify_url", method = RequestMethod.GET)
    public void notify_url(HttpServletRequest request) {
        String result = AlipayHandle.notify_url(request);
        if ("success".equals(result)) {
            System.out.println("================111111111111111================");
        }
    }
在支付流程的时候就能正常返回验证,但是退款就不行,不知道怎么滴,大神求解决
  • 打赏
  • 举报
回复
引用 1 楼 qingyuan18 的回复:
具体一点,notify_url.jsp里面是什么加密验证处理? 你自己的方法里是指你自己系统的jsp页面?如果你自己的jsp页面ajax去访问支付宝的页面,那估计是不行的,跨域了

把具体的代码贴出来看看

加密也就是普通的md5加密,我自己的方法就是发支付宝demo的代码粘贴过去而已,没有什么变动,执行内容都是一样,只不过换种执行方式而已。
这个是退款请求的生成,他会跳到支付宝自己的退款页面,

public static void reFund(PrintWriter out, String refund_date, String batch_no, String detail_data) {
String notify_url = "http://127.0.0.1:8080/order/notify_url";
String seller_email = "xxxxx@qq.com";
String batch_num = "1";
//把请求参数打包成数组
Map<String, String> sParaTemp = new HashMap<>();
sParaTemp.put("service", "refund_fastpay_by_platform_pwd");
sParaTemp.put("partner", AlipayConfig.partner);
sParaTemp.put("_input_charset", AlipayConfig.input_charset);
sParaTemp.put("notify_url", notify_url);
sParaTemp.put("seller_email", seller_email);
sParaTemp.put("refund_date", refund_date);
sParaTemp.put("batch_no", batch_no);
sParaTemp.put("batch_num", batch_num);
sParaTemp.put("detail_data", detail_data);
//建立请求
String sHtmlText = RefundSubmit.buildRequest(sParaTemp, "get", "确认");
out.println(sHtmlText);
}

完了以后,本应该会返回notify_url的,代码如下:

public static String notify_url(HttpServletRequest request) {
//即时到账退款返回
String result = "";
Map<String, String> params = new HashMap<>();
Map requestParams = request.getParameterMap();
for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext(); ) {
String name = (String) iter.next();
String[] values = (String[]) requestParams.get(name);
String valueStr = "";
for (int i = 0; i < values.length; i++) {
valueStr = (i == values.length - 1) ? valueStr + values[i]
: valueStr + values[i] + ",";
}
try {
//乱码解决
valueStr = new String(valueStr.getBytes("ISO-8859-1"), "gbk");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
params.put(name, valueStr);
}
//获取支付宝的通知返回参数
String batch_no = "";
String success_num = "";
String result_details = "";
try {
batch_no = new String(request.getParameter("batch_no").getBytes("ISO-8859-1"), "UTF-8");
success_num = new String(request.getParameter("success_num").getBytes("ISO-8859-1"), "UTF-8");
result_details = new String(request.getParameter("result_details").getBytes("UTF-8"), "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
if (AlipayNotify.verify(params)) {//验证成功
result = "success";
} else {//验证失败
result = "fail";
}
return result;
}

,但是没有做任何返回验证,直接就退款了,管理员操作完退款后页面如下:,到此,钱已经退回去了,但是没有进入notify_url方法。
qingyuan18 2015-02-11
  • 打赏
  • 举报
回复
具体一点,notify_url.jsp里面是什么加密验证处理? 你自己的方法里是指你自己系统的jsp页面?如果你自己的jsp页面ajax去访问支付宝的页面,那估计是不行的,跨域了 把具体的代码贴出来看看

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧