use of com.itrus.portal.db.PayConfigExample in project portal by ixinportal.
the class PayWebController method notifyUrl.
/**
* 客户服务器回调页面
* [callback]<xml>
* <nonce_str><![CDATA[1639324264]]></nonce_str>
* <out_trade_no><![CDATA[TWCX20160629144115177012]]></out_trade_no>
* <return_code><![CDATA[SUCCESS]]></return_code>
* <return_msg><![CDATA[姣浠瀹氦骀]]></return_msg>
* <total_fee><![CDATA[0.01]]></total_fee>
* <transaction_id><![CDATA[2016071521001004860279928780]]></transaction_id>
* <sign>321D99F194DE952B6699C3E23361C06C</sign>
* <nonce_str>1639324264</nonce_str>
* </xml>
*
* @param request
* @param response
* @return
*/
@RequestMapping(value = "/notifyUrl")
public String notifyUrl(HttpServletRequest request, HttpServletResponse response) {
String line = null;
String notifyXml = "";
// DefaultTransactionDefinition def = new DefaultTransactionDefinition();
// def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
// TransactionStatus s = null;
Map<String, String> m = null;
try {
if ((line = request.getReader().readLine()) != null) {
notifyXml += line;
}
m = PayUtil.parseXmlToList2(notifyXml);
String sign = m.get("sign");
PayConfigExample pce = new PayConfigExample();
PayConfigExample.Criteria pcc = pce.createCriteria();
pcc.andAppIdEqualTo(m.get("appid"));
PayConfig pc = sqlSession.selectOne("com.itrus.portal.db.PayConfigMapper.selectByExample", pce);
APP_SECRET_KEY = pc.getSecretKey();
boolean validate = PayUtil.validate(sign, m, APP_SECRET_KEY);
if (validate) {
if (("SUCCESS").equals(m.get("return_code"))) {
// m.get("return_msg");//返回信息
// m.get("out_trade_no");//交易订单号
// s = transactionManager.getTransaction(def);
BillExample be = new BillExample();
BillExample.Criteria bc = be.createCriteria();
bc.andBillIdEqualTo(m.get("out_trade_no"));
Bill bill = sqlSession.selectOne("com.itrus.portal.db.BillMapper.selectByExample", be);
bill.setBillStatus(3);
bill.setPayTime(new Date());
sqlSession.update("com.itrus.portal.db.BillMapper.updateByPrimaryKeySelective", bill);
OnPayInfo payInfo = sqlSession.selectOne("com.itrus.portal.db.OnPayInfoMapper.selectByPrimaryKey", bill.getOnPayInfo());
payInfo.setPayStatus(1);
payInfo.setWcTime(bill.getPayTime());
payInfo.setPayNo(m.get("transaction_id"));
OnlinePayExample ope = new OnlinePayExample();
OnlinePayExample.Criteria opc = ope.createCriteria();
opc.andPayConfigEqualTo(pc.getId());
// 1支付宝 2微信
opc.andWayEqualTo((Integer.parseInt(m.get("pay_type")) == 0 ? 2 : 1));
OnlinePay onlinePay = sqlSession.selectOne("com.itrus.portal.db.OnlinePayMapper.selectByExample", ope);
payInfo.setOnlinePay(onlinePay.getId());
// payInfo.setComment(m.get("return_msg"));
sqlSession.update("com.itrus.portal.db.OnPayInfoMapper.updateByPrimaryKeySelective", payInfo);
// transactionManager.commit(s);
// 标示成功接收到
PayUtil.sendToCFT(response, "SUCCESS");
// m.get("total_fee");//金额
// m.get("attach");//附加数据 在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据
} else if (("FAIL").equals(m.get("return_code"))) {
// 第三方返回支付失败的情况
PayUtil.sendToCFT(response, "SUCCESS");
LogUtil.syslog(sqlSession, "在线支付", m.get("out_trade_no") + "回调错误:[callback FAIL]FAIL" + notifyXml);
} else {
// 标示没接收到
PayUtil.sendToCFT(response, "FAIL");
LogUtil.syslog(sqlSession, "在线支付", m.get("out_trade_no") + "回调错误:[callback FAIL]" + notifyXml);
}
// if("FAIL".equals(m.get("result_code"))) {
// m.get("err_code");//错误码 有:SYSTEMERROR\SIGNERROR\LACK_PARAMS\PARAMS_ERROR\WECHAT_EMPTY\WECHAT_SIGNERROR\ALI_EMPTY\ALI_SIGNERROR
// m.get("err_code_des");//错误描述 有:系统错误\平台签名失败\缺少参数\参数不合规范或域名不匹配\微信报文为空\微信签名错误\支付宝报文为空\支付宝验签失败
// }
}
// for (Entry<String, String> s : m.entrySet()) {
// System.out.println(s.getKey()+"#################"+s.getValue());
// }
} catch (Exception e) {
LogUtil.syslog(sqlSession, "在线支付", m.get("out_trade_no") + "回调错误:" + e.toString() + notifyXml);
log.error(m.get("out_trade_no") + "[callback FAIL]" + e.toString());
e.printStackTrace();
}
// }
return null;
}
Aggregations