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]