支付宝支付 - 异步通知与同步通知
生活随笔
收集整理的這篇文章主要介紹了
支付宝支付 - 异步通知与同步通知
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
/*** @Description: 支付成功后的支付寶異步通知*/
@RequestMapping(value="/alipay")
public String alipay(HttpServletRequest request, HttpServletResponse response) throws Exception {log.info("支付成功后的支付寶異步通知");//獲取支付寶POST過來反饋信息Map<String,String> params = new HashMap<String,String>();Map<String,String[]> requestParams = request.getParameterMap();for (Iterator<String> 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] + ",";}//亂碼解決,這段代碼在出現(xiàn)亂碼時使用
// valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");params.put(name, valueStr);}boolean signVerified = AlipaySignature.rsaCheckV1(params,aliPayResource.getAlipayPublicKey(),aliPayResource.getCharset(),aliPayResource.getSignType()); //調(diào)用SDK驗證簽名if(signVerified) {//驗證成功// 商戶訂單號String out_trade_no = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"),"UTF-8");// 支付寶交易號String trade_no = new String(request.getParameter("trade_no").getBytes("ISO-8859-1"),"UTF-8");// 交易狀態(tài)String trade_status = new String(request.getParameter("trade_status").getBytes("ISO-8859-1"),"UTF-8");// 付款金額String total_amount = new String(request.getParameter("total_amount").getBytes("ISO-8859-1"),"UTF-8");if (trade_status.equals("TRADE_SUCCESS")){String merchantReturnUrl = paymentOrderService.updateOrderPaid(out_trade_no, CurrencyUtils.getYuan2Fen(total_amount));notifyFoodieShop(out_trade_no, merchantReturnUrl);}log.info("************* 支付成功(支付寶異步通知) - 時間: {} *************", DateUtil.getCurrentDateString(DateUtil.DATETIME_PATTERN));log.info("* 訂單號: {}", out_trade_no);log.info("* 支付寶交易號: {}", trade_no);log.info("* 實付金額: {}", total_amount);log.info("* 交易狀態(tài): {}", trade_status);log.info("*****************************************************************************");return "success";}else {//驗證失敗log.info("驗簽失敗, 時間: {}", DateUtil.getCurrentDateString(DateUtil.DATETIME_PATTERN));return "fail";}
}
# 服務器異步通知頁面路徑 需http://格式的完整路徑,不能加?id=123這類自定義參數(shù),必須外網(wǎng)可以正常訪問
#alipay.notifyUrl=http://2r49yp.natappfree.cc/payment/notice/alipay
alipay.notifyUrl=http://payment.t.xuexi.com/payment/payment/notice/alipay
# 頁面跳轉(zhuǎn)同步通知頁面路徑 需http://格式的完整路徑,不能加?id=123這類自定義參數(shù),必須外網(wǎng)可以正常訪問
alipay.returnUrl=http://payment.t.xuexi.com/payment/alipayResult
#alipay.returnUrl=http://shop.t.xuexi.com/payment
@Transactional(propagation=Propagation.REQUIRED)
@Override
public String updateOrderPaid(String merchantOrderId, Integer paidAmount) {Example example = new Example(Orders.class);Example.Criteria criteria = example.createCriteria();criteria.andEqualTo("merchantOrderId", merchantOrderId);Orders paidOrder = new Orders();paidOrder.setPayStatus(PaymentStatus.PAID.type);paidOrder.setAmount(paidAmount);int result = ordersMapper.updateByExampleSelective(paidOrder, example);return queryMerchantReturnUrl(merchantOrderId);
}
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>支付結(jié)果</title>
</head>
<body>
支付結(jié)果
<script>window.onload=function(){window.close();}
</script>
</body>
</html>
?
總結(jié)
以上是生活随笔為你收集整理的支付宝支付 - 异步通知与同步通知的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 支付宝支付 - 构建支付表单填并提交
- 下一篇: 定时任务 - 构建定时任务task