gjfer 发表于 2015-07-09 10:52

alipay同步和异步通知页面

看到很多关于如何连接支付宝的例子,但都没有写关于付款成功后回调自己网站的功能,这里把代码给大家参考。
注意异步回调是post方式,alipay在调不到这个方法的时候会48小时不断发送post请求,所以要么不写,要写就请写对了,否则alipay对每笔付款都要post你两天,随着业务扩大恐怕会被alipay占用大量的带宽。
AlipayNotify.verify的验证需要从alipay申请密钥(具体方法alipay上写的非常清楚),否则验证过不去。

[代码]这是alipay给的例子程序,initPayResult就是我们让alipay回调的方法// 页面跳转同步通知页面路径
       String return_url = host + "/initPayResult";[代码]在例子中我们只是做了页面的跳转,而实际开发中可以在此操作数据库,更改付款标示等@RequestMapping(value = "initPayResult", method = RequestMethod.GET)
public String initPayResult(Model model, Device device) {
    log.info("支付宝处理完毕后返回商户网站");
    if (device.isNormal()) {
      return "shop/alipay/payResult";
    } else {
      return "mobile/alipay/payResult";
    }
}[代码]这是一个异步通知,也是alipay回调的String notify_url = host + "/initReturn";[代码]注意异步回调是post方式,alipay在调不到这个方法的时候会48小时不断发送post请求,所以要么不写,要写就请写对@RequestMapping(value = "initReturn", method = RequestMethod.POST)
public void executeInitReturn(Model model, ReturnForm returnForm, HttpServletResponse response) throws SQLException, IOException {
    log.info("这是一个支付宝主动调用商家网站信息的日志");
    log.info(returnForm.getOut_trade_no());
    log.info(returnForm.getTrade_no());
    log.info(returnForm.getTrade_status());
    log.info(returnForm.getOut_trade_no());
    log.info(returnForm.getTrade_no());
    log.info(returnForm.getTrade_status());
    log.info(returnForm.getNotify_id());
    log.info(returnForm.getSign());
    log.info("sign_type:" + returnForm.getSign_type());
    Map<String,String> params = new HashMap<String,String>();
    params.put("out_trade_no", returnForm.getOut_trade_no());
    params.put("trade_no", returnForm.getTrade_no());
    params.put("trade_status", returnForm.getTrade_status());
    params.put("notify_id", returnForm.getNotify_id());
    params.put("sign", returnForm.getSign());
    params.put("sign_type", returnForm.getSign_type());
    params.put("discount", returnForm.getDiscount());
    params.put("payment_type", returnForm.getPayment_type());
    params.put("subject", returnForm.getSubject());
    params.put("buyer_email", returnForm.getBuyer_email());
    params.put("gmt_create", returnForm.getGmt_create());
    params.put("notify_type", returnForm.getNotify_type());
    params.put("quantity", returnForm.getQuantity());
    params.put("seller_id", returnForm.getSeller_id());
    params.put("notify_time", returnForm.getNotify_time());
    params.put("body", returnForm.getBody());
    params.put("is_total_fee_adjust", returnForm.getIs_total_fee_adjust());
    params.put("total_fee", returnForm.getTotal_fee());
    params.put("gmt_payment", returnForm.getGmt_payment());
    params.put("seller_email", returnForm.getSeller_email());
    params.put("price", returnForm.getPrice());
    params.put("buyer_id", returnForm.getBuyer_id());
    params.put("use_coupon", returnForm.getUse_coupon());
    PrintWriter out=response.getWriter();
    if(AlipayNotify.verify(params)){
      out.print("success");
      log.info("success");
      boolean result = alipayService.editPayment(returnForm);
      if (!result) {
            throw new SQLException("付款标记修改失败!");
      }
    } else {
      out.print("fail");
      log.info("fail");
    }
}
页: [1]
查看完整版本: alipay同步和异步通知页面