Elec.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296
  1. package com.happy.action;
  2. import com.google.gson.Gson;
  3. import com.google.gson.reflect.TypeToken;
  4. import com.happy.Model.Recharge;
  5. import com.happy.Model.Users;
  6. import com.happy.Model.WeiXinUtil;
  7. import com.happy.Model.weixin.PayResult;
  8. import com.happy.Model.weixin.WechatUnifiedOrder;
  9. import com.happy.Until.HttpUtils;
  10. import com.happy.Until.ResUtil;
  11. import com.happy.Until.ResponseUtil;
  12. import com.happy.Until.weixin.EndPay;
  13. import com.happy.Until.weixin.JaxbUtil;
  14. import com.happy.Until.weixin.PayWxUtil;
  15. import com.happy.Until.weixin.TongYiReturn;
  16. import com.happy.common.http.HttpsClient;
  17. import com.happy.service.ConsumeService;
  18. import com.happy.service.RechargeService;
  19. import com.happy.service.UserService;
  20. import com.happy.service.WxMenuService;
  21. import com.opensymphony.xwork2.ActionSupport;
  22. import net.sf.json.JSONObject;
  23. import org.apache.struts2.ServletActionContext;
  24. import org.apache.struts2.interceptor.ServletRequestAware;
  25. import javax.annotation.Resource;
  26. import javax.servlet.http.HttpServletRequest;
  27. import javax.servlet.http.HttpServletResponse;
  28. import javax.servlet.http.HttpSession;
  29. import java.io.BufferedReader;
  30. import java.io.PrintWriter;
  31. import java.text.SimpleDateFormat;
  32. import java.util.Date;
  33. import java.util.HashMap;
  34. import java.util.List;
  35. import java.util.Map;
  36. public class Elec extends ActionSupport implements ServletRequestAware {
  37. private HttpServletRequest request;
  38. public HttpServletResponse response;
  39. public String code;
  40. public String stu_number;
  41. public String re_time;
  42. @Resource
  43. public UserService userService;
  44. @Resource
  45. public ConsumeService consumeService;
  46. @Resource
  47. public RechargeService rechargeService;
  48. @Resource
  49. public WxMenuService wxMenuService;
  50. public HttpServletRequest getRequest() {
  51. return request;
  52. }
  53. public void setRequest(HttpServletRequest request) {
  54. this.request = request;
  55. }
  56. public void setServletRequest(HttpServletRequest request) {
  57. this.request = request;
  58. }
  59. public HttpServletResponse getResponse() {
  60. return response;
  61. }
  62. public void setResponse(HttpServletResponse response) {
  63. this.response = response;
  64. }
  65. public String getCode() {
  66. return code;
  67. }
  68. public void setCode(String code) {
  69. this.code = code;
  70. }
  71. public String getStu_number() {
  72. return stu_number;
  73. }
  74. public void setStu_number(String stu_number) {
  75. this.stu_number = stu_number;
  76. }
  77. public String getRe_time() {
  78. return re_time;
  79. }
  80. public void setRe_time(String re_time) {
  81. this.re_time = re_time;
  82. }
  83. public String Pay() throws Exception {
  84. HttpSession session = request.getSession();
  85. Gson gson=new Gson();
  86. JSONObject resultJson = new JSONObject();
  87. String url = "https://api.weixin.qq.com/sns/jscode2session?" +
  88. "appid="+ WeiXinUtil.appid_elc +
  89. "&secret="+ WeiXinUtil.screct_elc +
  90. "&js_code="+code+
  91. "&grant_type=authorization_code";
  92. if (code==null){
  93. resultJson.put("mess", "code不能为空");
  94. ResUtil.write(resultJson, ServletActionContext.getResponse());
  95. }
  96. String jsons = HttpsClient.sendPost(url, "");
  97. HashMap<String, String> userMap = gson.fromJson(jsons.toString(), new TypeToken<HashMap<String, String>>(){}.getType());
  98. String open_id = "";
  99. try{
  100. open_id = userMap.get("openid").toString();
  101. }catch (Exception e){
  102. resultJson.put("mess", "code超时");
  103. ResUtil.write(resultJson, ServletActionContext.getResponse());
  104. return null;
  105. }
  106. List<Users> u = userService.queryByopenid(open_id); // 查找是不是会员,不是会员不能充值
  107. String num = request.getParameter("num");
  108. session.setAttribute("num", num); // 存入金额session中
  109. if (u != null ) {
  110. String ip = request.getParameter("ip");
  111. double money = Double.parseDouble(request.getParameter("num"));
  112. int a = (int) (money * 100);
  113. WechatUnifiedOrder w = new WechatUnifiedOrder();
  114. w.setAppid(WeiXinUtil.appid);
  115. w.setAttach("chuanghai");
  116. w.setBody("chuanghai");
  117. w.setMch_id(WeiXinUtil.account_elc);
  118. w.setNonce_str(PayWxUtil.getNonceStr());// 随机支付串
  119. w.setNotify_url(WeiXinUtil.ip + "elpayResulet.action");// 支付结果回调地址
  120. w.setOpenid(open_id);
  121. w.setOut_trade_no("" + new Date().getTime());
  122. w.setSpbill_create_ip(ip);
  123. w.setTotal_fee(a);
  124. w.setTrade_type("JSAPI");
  125. Map<String, String> params = new HashMap<String, String>();
  126. params.put("attach", w.getAttach());
  127. params.put("appid", w.getAppid());
  128. params.put("mch_id", w.getMch_id());
  129. params.put("nonce_str", w.getNonce_str());
  130. params.put("body", w.getBody());
  131. params.put("out_trade_no", w.getOut_trade_no());
  132. params.put("total_fee", w.getTotal_fee() + "");
  133. params.put("spbill_create_ip", w.getSpbill_create_ip());
  134. params.put("notify_url", w.getNotify_url());
  135. params.put("trade_type", w.getTrade_type());
  136. params.put("openid", w.getOpenid());
  137. w.setSign(PayWxUtil.getSign(params, WeiXinUtil.APIid_elc));
  138. params.put("sign", w.getSign());
  139. String retXml = JaxbUtil.getRequestXml(params);
  140. String msg = HttpUtils.post("https://api.mch.weixin.qq.com/pay/unifiedorder", retXml);
  141. System.out.println("msg: "+ msg);
  142. if (msg.indexOf("FAIL") > -1) {
  143. JSONObject json = new JSONObject();
  144. json.put("pay", "error");
  145. ResponseUtil.write(json, ServletActionContext.getResponse());
  146. return null;
  147. } else {
  148. JaxbUtil requestBinder = new JaxbUtil(TongYiReturn.class, JaxbUtil.CollectionWrapper.class);
  149. TongYiReturn to = requestBinder.fromXml(msg);
  150. if (to.getReturn_code().equals("SUCCESS") && to.getResult_code().equals("SUCCESS")) {
  151. EndPay pay = new EndPay();
  152. pay.setAppId(WeiXinUtil.appid_elc);
  153. pay.setSignType("MD5");
  154. pay.setTimeStamp(System.currentTimeMillis() / 1000 + "");
  155. pay.setPrepay_id(to.getPrepay_id());
  156. pay.setNonceStr(PayWxUtil.getNonceStr());
  157. Map<String, String> requestMap = new HashMap<String, String>();
  158. requestMap.put("appId", pay.getAppId());
  159. requestMap.put("timeStamp", pay.getTimeStamp());
  160. requestMap.put("nonceStr", pay.getNonceStr());
  161. requestMap.put("package", "prepay_id=" + pay.getPrepay_id());
  162. requestMap.put("signType", "MD5");
  163. pay.setPaySign(PayWxUtil.getSign(requestMap, WeiXinUtil.APIid_elc));
  164. // requestMap.put("sign",pay.getPaySign());
  165. // String ret = JaxbUtil.getRequestXml(requestMap);
  166. // System.out.println(ret);
  167. JSONObject json = new JSONObject();
  168. json.put("pay", pay);
  169. if (session.getAttribute("p_biao") != null) { // 说明时从打转盘页面进来的,支付完成后继续调到转盘页面
  170. json.put("p_biao", 1);
  171. session.removeAttribute("p_biao");
  172. } else {
  173. json.put("p_biao", 0);
  174. }
  175. ResUtil.write(json, ServletActionContext.getResponse());
  176. }
  177. }
  178. } else { // 说明不是会员
  179. JSONObject json = new JSONObject();
  180. json.put("pay", 1);
  181. ResUtil.write(json, ServletActionContext.getResponse());
  182. }
  183. return null;
  184. }
  185. // 第五步:支付页面用户输完密码后微信会把支付结果回调到这里,我们根据需要存储支付记录,和执行不同的方法
  186. public String payResulet() throws Exception { // 微信支付结果通知
  187. // System.out.println("进来了");
  188. BufferedReader reader = null;// BufferedReader 字符输入流
  189. reader = request.getReader();
  190. String line = "";
  191. String xmlString = null;
  192. StringBuffer inputString = new StringBuffer();
  193. while ((line = reader.readLine()) != null) {
  194. inputString.append(line);
  195. }
  196. xmlString = inputString.toString();
  197. request.getReader().close();
  198. JaxbUtil requestBinder = new JaxbUtil(PayResult.class, PayResult.class);
  199. PayResult result = requestBinder.fromXml(xmlString);// Xml到Java,用fromXML()方法
  200. if (result.getResult_code().equals("SUCCESS")) { // 交易成功,支付结果转换为对象
  201. String account = result.getTransaction_id();// 微信支付订单号
  202. System.out.println("支付成功了");
  203. System.out.println("result=" + result.toString());
  204. Recharge pays = rechargeService.findPayByNo(account);// 根据 微信支付订单号 查找支付记录信息
  205. if (pays != null) { // 有交易记录 发送成功消息给商家
  206. String returnMsg = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
  207. HttpServletResponse response = ServletActionContext.getResponse();
  208. response.setContentType("text/html;charset=utf-8");
  209. PrintWriter out = response.getWriter();
  210. out.println(returnMsg);
  211. out.flush();
  212. out.close();
  213. // System.out.println("pay不为空");
  214. } else { // 交易记录开始记录
  215. // if(openid.equals(result.getOpenid()) && num == result.getTotal_fee() / 100){ //支付成功
  216. // 获得交易支付成功用户的信息
  217. Recharge pay1 = new Recharge();
  218. List<Users> u = userService.queryByopenid(result.getOpenid()); // 查找充值的会员信息
  219. pay1.setAccount((double) result.getTotal_fee() / 100);
  220. System.out.println("金额:"+ result.getTotal_fee());
  221. pay1.setUser_name(u.get(0).getUser_name());
  222. pay1.setStu_number(u.get(0).getStu_number());
  223. pay1.setCard_number(u.get(0).getCard_number());
  224. pay1.setOrder_num(new String(account.getBytes("utf-8")));
  225. SimpleDateFormat simp = new SimpleDateFormat("yyyyMMddHHmmss");
  226. SimpleDateFormat simp1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  227. Date date = simp.parse(result.getTime_end());
  228. String time = simp1.format(date);
  229. pay1.setRe_time(time); // 支付结束时间
  230. System.out.println("金额:"+pay1.getAccount());
  231. rechargeService.insertRecharge2(pay1);
  232. // userService.update2((double) result.getTotal_fee() / 10, u.getId());
  233. String returnMsg = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
  234. HttpServletResponse response = ServletActionContext.getResponse();
  235. response.setContentType("text/html;charset=utf-8");
  236. PrintWriter out = response.getWriter();
  237. out.println(returnMsg);
  238. out.flush();
  239. out.close(); // 发送成功消息给商家
  240. // }
  241. // }
  242. }
  243. }
  244. return null;
  245. }
  246. public String queyRecordEle() throws Exception {
  247. JSONObject resultJson = new JSONObject();
  248. if (stu_number!=null && re_time!=null) {
  249. List<Recharge> record = rechargeService.queryRecordByStu(stu_number, re_time);
  250. if (record!=null) {
  251. resultJson.put("mess", "返回成功");
  252. resultJson.put("data", record);
  253. ResUtil.write(resultJson, ServletActionContext.getResponse());
  254. }
  255. resultJson.put("mess", "未查到记录");
  256. ResUtil.write(resultJson, ServletActionContext.getResponse());
  257. return null;
  258. }
  259. resultJson.put("mess", "学号不能为空");
  260. ResUtil.write(resultJson, ServletActionContext.getResponse());
  261. return null;
  262. }
  263. }