免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2116 | 回复: 0
打印 上一主题 下一主题

alipay同步和异步通知页面 [复制链接]

论坛徽章:
1
程序设计版块每日发帖之星
日期:2015-07-10 22:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-07-09 10:52 |只看该作者 |倒序浏览
看到很多关于如何连接支付宝的例子,但都没有写关于付款成功后回调自己网站的功能,这里把代码给大家参考。
注意异步回调是post方式,alipay在调不到这个方法的时候会48小时不断发送post请求,所以要么不写,要写就请写对了,否则alipay对每笔付款都要post你两天,随着业务扩大恐怕会被alipay占用大量的带宽。
AlipayNotify.verify的验证需要从alipay申请密钥(具体方法alipay上写的非常清楚),否则验证过不去。

[代码]这是alipay给的例子程序,initPayResult就是我们让alipay回调的方法
  1. // 页面跳转同步通知页面路径
  2.        String return_url = host + "/initPayResult";
复制代码
[代码]在例子中我们只是做了页面的跳转,而实际开发中可以在此操作数据库,更改付款标示等
  1. @RequestMapping(value = "initPayResult", method = RequestMethod.GET)
  2. public String initPayResult(Model model, Device device) {
  3.     log.info("支付宝处理完毕后返回商户网站");
  4.     if (device.isNormal()) {
  5.         return "shop/alipay/payResult";
  6.     } else {
  7.         return "mobile/alipay/payResult";
  8.     }
  9. }
复制代码
[代码]这是一个异步通知,也是alipay回调的
  1. String notify_url = host + "/initReturn";
复制代码
[代码]注意异步回调是post方式,alipay在调不到这个方法的时候会48小时不断发送post请求,所以要么不写,要写就请写对
  1. @RequestMapping(value = "initReturn", method = RequestMethod.POST)
  2. public void executeInitReturn(Model model, ReturnForm returnForm, HttpServletResponse response) throws SQLException, IOException {
  3.     log.info("这是一个支付宝主动调用商家网站信息的日志");
  4.     log.info(returnForm.getOut_trade_no());
  5.     log.info(returnForm.getTrade_no());
  6.     log.info(returnForm.getTrade_status());
  7.     log.info(returnForm.getOut_trade_no());
  8.     log.info(returnForm.getTrade_no());
  9.     log.info(returnForm.getTrade_status());
  10.     log.info(returnForm.getNotify_id());
  11.     log.info(returnForm.getSign());
  12.     log.info("sign_type:" + returnForm.getSign_type());
  13.     Map<String,String> params = new HashMap<String,String>();
  14.     params.put("out_trade_no", returnForm.getOut_trade_no());
  15.     params.put("trade_no", returnForm.getTrade_no());
  16.     params.put("trade_status", returnForm.getTrade_status());
  17.     params.put("notify_id", returnForm.getNotify_id());
  18.     params.put("sign", returnForm.getSign());
  19.     params.put("sign_type", returnForm.getSign_type());
  20.     params.put("discount", returnForm.getDiscount());
  21.     params.put("payment_type", returnForm.getPayment_type());
  22.     params.put("subject", returnForm.getSubject());
  23.     params.put("buyer_email", returnForm.getBuyer_email());
  24.     params.put("gmt_create", returnForm.getGmt_create());
  25.     params.put("notify_type", returnForm.getNotify_type());
  26.     params.put("quantity", returnForm.getQuantity());
  27.     params.put("seller_id", returnForm.getSeller_id());
  28.     params.put("notify_time", returnForm.getNotify_time());
  29.     params.put("body", returnForm.getBody());
  30.     params.put("is_total_fee_adjust", returnForm.getIs_total_fee_adjust());
  31.     params.put("total_fee", returnForm.getTotal_fee());
  32.     params.put("gmt_payment", returnForm.getGmt_payment());
  33.     params.put("seller_email", returnForm.getSeller_email());
  34.     params.put("price", returnForm.getPrice());
  35.     params.put("buyer_id", returnForm.getBuyer_id());
  36.     params.put("use_coupon", returnForm.getUse_coupon());
  37.     PrintWriter out=response.getWriter();
  38.     if(AlipayNotify.verify(params)){
  39.         out.print("success");
  40.         log.info("success");
  41.         boolean result = alipayService.editPayment(returnForm);
  42.         if (!result) {
  43.             throw new SQLException("付款标记修改失败!");
  44.         }
  45.     } else {
  46.         out.print("fail");
  47.         log.info("fail");
  48.     }
  49. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP