实例介绍
【实例截图】
【核心代码】
package com.bookStore.client.cart.handler; import com.alipay.api.AlipayClient; import com.alipay.api.DefaultAlipayClient; import com.alipay.api.internal.util.AlipaySignature; import com.alipay.api.request.AlipayTradePagePayRequest; import com.bookStore.client.cart.service.ICartService; import com.bookStore.client.product.service.IProductService; import com.bookStore.commons.beans.Order; import com.bookStore.commons.beans.Product; import com.bookStore.commons.beans.User; import com.bookStore.utils.AlipayConfig; import com.bookStore.utils.IdUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.util.HashMap; import java.util.Iterator; import java.util.Map; @Controller @RequestMapping("/client/cart") public class CartHandler { @Autowired private IProductService productService; @Autowired private ICartService cartService; @RequestMapping("/addCart.do") //id:商品的唯一标识符 public String addCart(String id, HttpSession session,HttpServletRequest request){ //根据id查询把哪本书添加到购物车 Product product = productService.findProductById(id); System.out.println(product); //第一次往购物车添加商品,创建购物车cart,以后购买就不在需要创建购物车 // <Product ,Integer>:指定键值对的类型 //(Map<Product,Integer>):session只能是Object类型的,所以得强转 //先从session中获取购物车 Map<Product ,Integer> cart = (Map<Product,Integer>)session.getAttribute("cart"); //如果cart == null if (cart == null){ //创建购物车 cart = new HashMap<Product ,Integer>(); } //当key重复时,put方法返回原来的value值 Integer count = cart.put(product,1); //若count原来有值,则购物车存在这本书 if (count != null){ //原来的购物车的值 1 cart.put(product,count 1); } session.setAttribute("cart",cart); return "/client/cart.jsp"; } @RequestMapping("/changeCart.do") public String changeCart(String id,Integer count,HttpSession session){ //根据id获取哪个商品,获取改变数量的商品信息 Product product = productService.findProductById(id); //从session中获取原来的购物车原始数据 Map<Product,Integer>cart = (Map<Product,Integer>)session.getAttribute("cart"); //如果商品的数量为0,从购物车中删除该商品信息 if (count == 0){ //购物车是map类型的,删除时使用remov,可以删除主键 cart.remove(product); }else { //改变购物车中商品的数量 cart.put(product,count); } //返回到购物车 return "/client/cart.jsp"; } @RequestMapping("/createOrder.do") public String createOrder(Order order, HttpSession session, Model model) throws Exception{ //获取下订单的用户信息 User login_user = (User) session.getAttribute("login_user"); //获取订单的购物车 Map<Product,Integer>cart = (Map<Product, Integer>) session.getAttribute("cart"); order.setId(IdUtils.getUUID()); order.setUser(login_user); //创建订单 cartService.createOrder(order,cart); //把创建完订单后的购物车删除 session.removeAttribute("cart"); model.addAttribute("order",order); return "/client/confirm.jsp"; } //在“我的账户”-“订单查询”-“未支付”去支付 @RequestMapping("/goPay.do") public String goPay(Order order,String id,String moeny,HttpSession session,Model model){ //获取下订单的用户信息 User login_user = (User) session.getAttribute("login_user"); //获取订单的购物车 Map<Product,Integer>cart = (Map<Product, Integer>) session.getAttribute("cart"); order.setUser(login_user); //把创建完订单后的购物车删除 session.removeAttribute("cart"); model.addAttribute("order",order); return "/client/confirm.jsp"; } @RequestMapping("/pay.do") public void pay(String id, String money, String name, HttpServletResponse response) throws Exception { //获得初始化的AlipayClient AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id, AlipayConfig.merchant_private_key, "json", AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type); //设置请求参数 AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest(); alipayRequest.setReturnUrl(AlipayConfig.return_url); alipayRequest.setNotifyUrl(AlipayConfig.notify_url); //商户订单号,商户网站订单系统中唯一订单号,必填 String out_trade_no = id; //付款金额,必填 String total_amount = money; //订单名称,必填 String subject = name; //商品描述,可空 String body = ""; alipayRequest.setBizContent("{\"out_trade_no\":\"" out_trade_no "\"," "\"total_amount\":\"" total_amount "\"," "\"subject\":\"" subject "\"," "\"body\":\"" body "\"," "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}"); //请求 String result = alipayClient.pageExecute(alipayRequest).getBody(); response.setContentType("text/html"); //输出 response.getWriter().println(result); } @RequestMapping("/paysuccess.do") public String paysuccess(HttpServletRequest request) throws Exception { //获取支付宝GET过来反馈信息 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] ","; } //乱码解决,这段代码在出现乱码时使用 valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8"); params.put(name, valueStr); } boolean signVerified = AlipaySignature.rsaCheckV1(params, AlipayConfig.alipay_public_key, AlipayConfig.charset, AlipayConfig.sign_type); //调用SDK验证签名 //——请在这里编写您的程序(以下代码仅作参考)—— if(signVerified) { //商户订单号 String id = 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"); //付款金额 String total_amount = new String(request.getParameter("total_amount").getBytes("ISO-8859-1"),"UTF-8"); //付款成功之后,去修改订单的付款状态,支付状态变为1 cartService.paySuccess(id); //传的参数是这次付款成功的订单号,这次付款成功的订单 return "/client/paysuccess.jsp"; }else { return "/client/payfail.jsp"; } } }
相关软件
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论