package com.tyust.web;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import com.tyust.entity.CartItem;
import com.tyust.entity.Order;
import com.tyust.entity.OrderItem;
import com.tyust.entity.User;
import com.tyust.pager.PageBean;
import com.tyust.service.CartItemService;
import com.tyust.service.OrderService;
import com.tyust.util.commons.CommonUtil;
import com.tyust.util.payment.PaymentUtil;
@Controller
@RequestMapping("/order")
public class OrderController{
@Autowired
private OrderService orderService;
@Autowired
private CartItemService cartItemService;
private int getPc(HttpServletRequest request){
int pc = 1;
String param = request.getParameter("pc");
if(param!=null && !param.trim().isEmpty()){
try{
pc = Integer.parseInt(param);
}catch(RuntimeException e){ }
}
return pc;
}
private String getUrl(HttpServletRequest request){
String url = request.getRequestURI()+"?"+request.getQueryString();
int index = url.lastIndexOf("&pc=");
if(index!=-1){
url = url.substring(0, index);
}
return url;
}
@RequestMapping("/paymentPre.do")
public String paymentPre(ModelMap map,String oid){
map.addAttribute("order", orderService.load(oid));
return "/jsps/order/pay";
}
/**
* 支付方法
* @param req
* @param resp
* @return
* @throws ServletException
* @throws IOException
*/
@RequestMapping("/payment.do")
public String payment(String oid,String total,String yh) throws IOException{
Properties props = new Properties();
props.load(this.getClass().getClassLoader().getResourceAsStream("payment.properties"));
/*
* 1. 准备13个参数
*/
String p0_Cmd = "Buy";//业务类型,固定值Buy
String p1_MerId = props.getProperty("p1_MerId");//商号编码,在易宝的唯一标识
String p2_Order = oid;//订单编码
String p3_Amt = "0.01";//支付金额 total
String p4_Cur = "CNY";//交易币种,固定值CNY
String p5_Pid = "";//商品名称
String p6_Pcat = "";//商品种类
String p7_Pdesc = "";//商品描述
String p8_Url = props.getProperty("p8_Url");//在支付成功后,易宝会访问这个地址。
String p9_SAF = "";//送货地址
String pa_MP = "";//扩展信息
String pd_FrpId = yh;//支付通道
String pr_NeedResponse = "1";//应答机制,固定值1
/*
* 2. 计算hmac
* 需要13个参数
* 需要keyValue
* 需要加密算法
*/
String keyValue = props.getProperty("keyValue");
String hmac = PaymentUtil.buildHmac(p0_Cmd, p1_MerId, p2_Order, p3_Amt,
p4_Cur, p5_Pid, p6_Pcat, p7_Pdesc, p8_Url, p9_SAF, pa_MP,
pd_FrpId, pr_NeedResponse, keyValue);
/*
* 3. 重定向到易宝的支付网关
*/
StringBuilder sb = new StringBuilder("https://www.yeepay.com/app-merchant-proxy/node");
sb.append("?").append("p0_Cmd=").append(p0_Cmd);
sb.append("&").append("p1_MerId=").append(p1_MerId);
sb.append("&").append("p2_Order=").append(p2_Order);
sb.append("&").append("p3_Amt=").append(p3_Amt);
sb.append("&").append("p4_Cur=").append(p4_Cur);
sb.append("&").append("p5_Pid=").append(p5_Pid);
sb.append("&").append("p6_Pcat=").append(p6_Pcat);
sb.append("&").append("p7_Pdesc=").append(p7_Pdesc);
sb.append("&").append("p8_Url=").append(p8_Url);
sb.append("&").append("p9_SAF=").append(p9_SAF);
sb.append("&").append("pa_MP=").append(pa_MP);
sb.append("&").append("pd_FrpId=").append(pd_FrpId);
sb.append("&").append("pr_NeedResponse=").append(pr_NeedResponse);
sb.append("&").append("hmac=").append(hmac);
return "redirect:"+sb.toString();
}
/**
* 回馈方法
* 当支付成功时,易宝会访问这里
* 用两种方法访问:
* 1. 引导用户的浏览器重定向(如果用户关闭了浏览器,就不能访问这里了)
* 2. 易宝的服务器会使用点对点通讯的方法访问这个方法。(必须回馈success,不然易宝服务器会一直调用这个方法)
* @param req
* @param resp
* @return
* @throws ServletException
* @throws IOException
*/
@RequestMapping("/back.do")
public String back(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
/*
* 1. 获取12个参数
*/
String p1_MerId = req.getParameter("p1_MerId");
String r0_Cmd = req.getParameter("r0_Cmd");
String r1_Code = req.getParameter("r1_Code");
String r2_TrxId = req.getParameter("r2_TrxId");
String r3_Amt = req.getParameter("r3_Amt");
String r4_Cur = req.getParameter("r4_Cur");
String r5_Pid = req.getParameter("r5_Pid");
String r6_Order = req.getParameter("r6_Order");
String r7_Uid = req.getParameter("r7_Uid");
String r8_MP = req.getParameter("r8_MP");
String r9_BType = req.getParameter("r9_BType");
String hmac = req.getParameter("hmac");
/*
* 2. 获取keyValue
*/
Properties props = new Properties();
props.load(this.getClass().getClassLoader().getResourceAsStream("payment.properties"));
String keyValue = props.getProperty("keyValue");
/*
* 3. 调用PaymentUtil的校验方法来校验调用者的身份
* >如果校验失败:保存错误信息,转发到msg.jsp
* >如果校验通过:
* * 判断访问的方法是重定向还是点对点,如果要是重定向
* 修改订单状态,保存成功信息,转发到msg.jsp
* * 如果是点对点:修改订单状态,返回success
*/
boolean bool = PaymentUtil.verifyCallback(hmac, p1_MerId, r0_Cmd, r1_Code, r2_TrxId,
r3_Amt, r4_Cur, r5_Pid, r6_Order, r7_Uid, r8_MP, r9_BType,
keyValue);
if(!bool) {
req.setAttribute("code", "error");
req.setAttribute("msg", "无效的签名,支付失败!(你不是好人)");
return "/jsps/msg";
}
if(r1_Code.equals("1")) {
orderService.updateStatus(r6_Order, 2);
if(r9_BType.equals("1")) {
req.setAttribute("code", "success");
req.setAttribute("msg", "恭喜,支付成功!");
return "/jsps/msg";
} else if(r9_BType.equals("2")) {
resp.getWriter().print("success");
}
}
return null;
}
@RequestMapping("/confirm.do")
public String confirm(ModelMap map,String oid){
int status = orderService.findStatus(oid);
if(status!=3){
map.addAttribute("code", "error");
map.addAttribute("msg", "状态不对,不能确认收货!");
return "/jsps/msg";
}
orderService.updateStatus(oid, 4);//设置状态为确认收货
map.addAttribute("code", "success");
map.addAttribute("msg", "恭喜,交易成功!");
return "/jsps/msg";
}
@RequestMapping("/cancel.do")
public String cancel(ModelMap map,String oid){
int status = orderService.findStatus(oid);
if(status!=1){
map.addAttribute("code", "error");
map.addAttribute("msg", "状态不对,不能取消!");
return "/jsps/msg";
}
orderService.updateStatus(oid, 5);//设置状态为取消
map.addAttribute("code", "success");
map.addAttribute("msg", "您的订单已取消成功!");
return "/jsps/msg";
}
@RequestMapping("/load.do")
public String load(ModelMap map,String oid,String btn)
throws ServletException, IOException {
Order order = orderService.load(oid);
map.addAttribute("order", order);
map.addAttribute("btn", btn);
return "/jsps/order/desc";
}
@RequestMapping("/createOrder.do")
public String createOrder(HttpServletRequest request){
String cartItemIds =
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
一、项目简述 功能: 前台: * 用户模块 * 分类模块 * 图书模块 * 购物车模块 * 订单模块 后台: * 管理员模块 * 分类管理模块 * 图书管理模块 * 订单模块 二、项目运行 环境配置: Jdk1.8 + Tomcat8.5 + mysql + Eclispe (IntelliJ IDEA,Eclispe,MyEclispe,Sts 都支持) 项目技术: JSP + C3P0+ Servlert + html+ css + JavaScript + JQuery + Ajax + Fileupload等等。
资源推荐
资源详情
资源评论
收起资源包目录
Java项目:网上书城+后台管理系统(java+jsp+servlert+mysql+ajax) (709个子文件)
btn.bmp 7KB
guangda.bmp 6KB
bj.bmp 6KB
ningbo.bmp 6KB
post.bmp 6KB
icbc.bmp 6KB
abc.bmp 6KB
bc.bmp 6KB
sh.bmp 6KB
gf.bmp 6KB
nanjing.bmp 6KB
bcc.bmp 6KB
cmb.bmp 6KB
hx.bmp 6KB
sfz.bmp 6KB
ccb.bmp 6KB
bh.bmp 6KB
cmbc.bmp 6KB
beijingnongshang.bmp 6KB
shpd.bmp 6KB
zx.bmp 6KB
cib.bmp 6KB
zheshang.bmp 6KB
dy.bmp 6KB
pingan.bmp 6KB
新建位图图像.bmp 0B
OrderController.class 10KB
AdminBookController.class 9KB
UserController.class 8KB
OrderServiceImpl.class 7KB
BookServiceImpl.class 7KB
Book.class 6KB
UserServiceImpl.class 5KB
PaymentUtil.class 4KB
TestCase.class 4KB
BookController.class 4KB
AdminCategoryController.class 4KB
CartItemController.class 4KB
User.class 4KB
AdminOrderController.class 4KB
MailUtil.class 4KB
Order.class 4KB
VerifyCode.class 4KB
CartItemServiceImpl.class 3KB
PageBean.class 3KB
CategoryServiceImpl.class 3KB
Category.class 3KB
CartItem.class 3KB
OrderItem.class 3KB
Mail.class 3KB
AdminController.class 2KB
AdminLoginFilter.class 2KB
Admin.class 2KB
LoginFilter.class 2KB
VerifyCodeServlet.class 1KB
AdminServiceImpl.class 1KB
Md5.class 1KB
CategoryController.class 1KB
AttachBean.class 1KB
BookDao.class 1001B
CartItemDao.class 949B
UserDao.class 929B
OrderDao.class 851B
MailUtil$1.class 826B
UserException.class 799B
BookService.class 775B
CategoryDao.class 763B
OrderService.class 734B
CategoryService.class 629B
CommonUtil.class 629B
DateConverter.class 517B
UserService.class 516B
CartItemService.class 474B
OrderItemDao.class 463B
PageConstant.class 390B
AdminDao.class 362B
AdminService.class 237B
.classpath 772B
org.eclipse.wst.common.component 563B
org.eclipse.wst.jsdt.ui.superType.container 49B
jquery-ui-1.8.14.custom.css 33KB
jquery-ui-1.8.14.custom.css 33KB
jquery.ui.theme.css 18KB
jquery.ui.theme.css 17KB
demos.css 14KB
jquery.ui.datepicker.css 4KB
jquery.ui.datepicker.css 4KB
jquery.datepick.css 4KB
desc.css 3KB
jquery.ui.button.css 2KB
jquery.ui.button.css 2KB
desc.css 2KB
list.css 2KB
regist.css 2KB
login.css 2KB
desc.css 2KB
jquery.ui.core.css 1KB
jquery.ui.core.css 1KB
pay.css 1KB
pager.css 1KB
共 709 条
- 1
- 2
- 3
- 4
- 5
- 6
- 8
资源评论
- weixin_534791962023-12-14超赞的资源,感谢资源主分享,大家一起进步!
- qq_323331172023-02-11资源内容详实,描述详尽,解决了我的问题,受益匪浅,学到了。
- 只想见您2022-04-20用户下载后在一定时间内未进行评价,系统默认好评。
- 夜岚、【风雨】2022-12-26发现一个超赞的资源,赶紧学习起来,大家一起进步,支持!
beyondwild
- 粉丝: 9275
- 资源: 4903
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功