- 论坛徽章:
- 1
|
看到很多关于如何连接支付宝的例子,但都没有写关于付款成功后回调自己网站的功能,这里把代码给大家参考。
注意异步回调是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");
- }
- }
复制代码 |
|