@Controller("payAction")
@Scope("prototype")
public class PayAction extends BaseAction<Object> implements ParameterAware {
//注意上面继承的BaseAction中不能写SendData了,要写Object,等下我们再判断具体使用哪个
//定义一个Map接收request的请求参数
private Map<String, String[]> parameters;
@Override
public void setParameters(Map<String, String[]> parameters) {
this.parameters = parameters;
}
/*在struts-default.xml文中,ServletConfig拦截器在ModelDriven之前先执行,所以我们在注入model的时候,
request参数已经有了,这样我们就可以在getModel()方法中通过参数来判断是哪个请求了*/
@Override
public Object getModel() {
//付款的时候有支付通道编码的参数(pd_FrpId),返回的时候没有
//这样我们就可以通过该参数判断是支付还是返回了
if(parameters.get("pd_FrpId") != null) {
model = new SendData();
} else {
model = new BackData();
}
return model;
}
//向易宝发送数据的方法
public String goBank() {
//对应发送的model:SendData
SendData sendData = (SendData)model;
//处理发送数据的逻辑,前一节已经实现过了……
}
//接收返回的数据的方法
public void backBank() {
//对应接收的model:BackData
BackData backData = (BackData)model;
//处理返回数据的逻辑……后面再来实现,
//先讲Struts2处理多个Model请求这个知识点
}
}
public void backBank() {
BackData backData = (BackData)model;
System.out.println(model);
boolean isOK = payService.checkBackData(backData);
if(isOK) {
//1. 更新订单状态,参数是自己根据数据库中的情况传进去的,用来测试
forderService.updateStatusById(Integer.valueOf(201605006), 2);
//2. 根据user邮箱地址,发送邮件
//3. 发送手机短信
System.out.println("----success!!----");
} else {
System.out.println("----false!!!----");
}
}
@Service("payService")
public class PayServiceImpl implements PayService {
//省略不相关代码
/******************************上面是发送请求的方法**************************************/
// 完成返回数据的追加
private String joinBackDataParam(BackData backData) {
// 追加字符串,为加密验证做准备
StringBuffer infoBuffer = new StringBuffer();
infoBuffer.append(backData.getP1_MerId());
infoBuffer.append(backData.getR0_Cmd());
infoBuffer.append(backData.getR1_Code());
infoBuffer.append(backData.getR2_TrxId());
infoBuffer.append(backData.getR3_Amt());
infoBuffer.append(backData.getR4_Cur());
infoBuffer.append(backData.getR5_Pid());
infoBuffer.append(backData.getR6_Order());
infoBuffer.append(backData.getR7_Uid());
infoBuffer.append(backData.getR8_MP());
infoBuffer.append(backData.getR9_BType());
return infoBuffer.toString();
}
// 对返回来的数据进行加密,并且和传过来的密文进行比较,如果OK则说明数据没有被篡改
public boolean checkBackData(BackData backData){
String joinParam=this.joinBackDataParam(backData);
// 加密后得到自己的密文
String md5 = DigestUtil.hmacSign(joinParam.toString(),key);
// 密文和传过来密文比较
return md5.equals(backData.getHmac());
}
}
//ForderService接口
public interface ForderService extends BaseService<Forder> {
//省略其他无关代码……
//根据订单编号,更新订单状态
public void updateStatusById(int id, int sid);
}
//ForderServiceImpl实现类
@Service("forderService")
public class ForderServiceImpl extends BaseServiceImpl<Forder> implements ForderService {
//省略其他无关代码
@Override
public void updateStatusById(int id, int sid) {
String hql = "update Forder f set f.status.id=:sid where f.id=:id";
getSession().createQuery(hql)
.setInteger("sid", sid)
.setInteger("id", id)
.executeUpdate();
}
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有