Просмотр исходного кода

Merge remote-tracking branch 'origin/dev' into dev-donate-0101

hangb 8 лет назад
Родитель
Сommit
6f72af5683
18 измененных файлов с 675 добавлено и 165 удалено
  1. 2 1
      donate-console/src/main/java/com/uas/console/donate/service/impl/ProjectServiceImpl.java
  2. 1 0
      donate-service/src/main/MP_verify_BMkQAHplMGROBlAn.txt
  3. 4 10
      donate-service/src/main/java/com/uas/service/donate/api/WxPayApi.java
  4. 1 11
      donate-service/src/main/java/com/uas/service/donate/config/WxConfig.java
  5. 9 7
      donate-service/src/main/java/com/uas/service/donate/controller/AlipayController.java
  6. 85 6
      donate-service/src/main/java/com/uas/service/donate/controller/IndexController.java
  7. 126 59
      donate-service/src/main/java/com/uas/service/donate/controller/WxpayController.java
  8. 25 0
      donate-service/src/main/java/com/uas/service/donate/model/User.java
  9. 107 0
      donate-service/src/main/java/com/uas/service/donate/model/WechatUserInfo.java
  10. 65 0
      donate-service/src/main/java/com/uas/service/donate/util/WechatConnector.java
  11. 1 0
      donate-service/src/main/resources/MP_verify_BMkQAHplMGROBlAn.txt
  12. 1 0
      donate-service/src/main/resources/templates/MP_verify_BMkQAHplMGROBlAn.txt
  13. 1 0
      donate-service/src/main/webapp/WEB-INF/MP_verify_BMkQAHplMGROBlAn.txt
  14. 101 8
      donate-service/src/main/webapp/WEB-INF/views/userAgreement.html
  15. 1 0
      donate-service/src/main/webapp/resources/MP_verify_BMkQAHplMGROBlAn.txt
  16. 86 57
      donate-service/src/main/webapp/resources/js/pay.js
  17. 56 3
      donate-service/src/main/webapp/resources/js/project/app.js
  18. 3 3
      donate-service/src/main/webapp/resources/view/project/donateQrcode.html

+ 2 - 1
donate-console/src/main/java/com/uas/console/donate/service/impl/ProjectServiceImpl.java

@@ -65,7 +65,8 @@ public class ProjectServiceImpl implements ProjectService {
 
     //提交项目
     public Project submit(Project project) {
-
+        //TODO 登录session获取机构id
+        project.setOrgId(15L);
         if(project.getOrgId()!=null){
             Org org= orgDao.findOne(project.getOrgId());
             //得到机构名

+ 1 - 0
donate-service/src/main/MP_verify_BMkQAHplMGROBlAn.txt


+ 4 - 10
donate-service/src/main/java/com/uas/service/donate/api/WxPayApi.java

@@ -415,9 +415,7 @@ public class WxPayApi implements WxPayService{
         return this.wxPayService.queryCouponInfo(request);
     }
 
-    /**
-     * 请忽略之
-     */
+
     @Override
     public WxPayApiData getWxApiData() {
         return null;
@@ -428,17 +426,13 @@ public class WxPayApi implements WxPayService{
         return this.queryComment(beginDate, endDate, offset, limit);
     }
 
-    /**
-     * 请忽略之
-     */
+
     @Override
     public WxPayConfig getConfig() {
-        return null;
+        return wxPayService.getConfig();
     }
 
-    /**
-     * 请忽略之
-     */
+
     @Override
     public void setConfig(WxPayConfig config) {
 

+ 1 - 11
donate-service/src/main/java/com/uas/service/donate/config/WxConfig.java

@@ -4,21 +4,11 @@ package com.uas.service.donate.config;
  * Created by 黄诚天 on 2017-10-27.
  */
 public class WxConfig {
-    //沙盒参数
-    public static String do_main = "http://5087452.nat123.cc";
 
-    //自己个人 wxe73df80d5c7a6ee8   自己公众号 wx59ebbd454c239e2d
     public static String APPID = "wxbc1f8607137d3b8a";
 
-    //自己个人 6497c36255030cdfd5e0716928abda21   自己公众号 f76b0b47ba1190f75b1590f38d032a7b
-    public static String APPSECRET = "f76b0b47ba1190f75b1590f38d032a7b";
-
-    public static String notify_url = do_main + "/wxpay/notifyUrl";
-
-    public static String redirect_url = do_main + "/wxpay/redirectUrl";
+    public static String APPSECRET = "5788793a734881c3410be63224b75292";
 
     public static String Token = "huangchengtian";
 
-    public static String encoding_aes_key = "bmSUBuzyzvfUYTw4GMKTHQmnaxj6SNf1JJ3Q1joFnGP";
-    //public static String encoding_aes_key = "34222222222222222f324e324324324324321431243";
 }

+ 9 - 7
donate-service/src/main/java/com/uas/service/donate/controller/AlipayController.java

@@ -20,9 +20,7 @@ import com.uas.platform.core.util.serializer.FlexJsonUtils;
 import com.uas.service.donate.DruidDBConfiguration;
 import com.uas.service.donate.api.AlipayApi;
 import com.uas.service.donate.config.AlipayConfig;
-import com.uas.service.donate.model.AlipayOrder;
-import com.uas.service.donate.model.AlipayUserInfo;
-import com.uas.service.donate.model.ProjectRecode;
+import com.uas.service.donate.model.*;
 import com.uas.service.donate.service.AlipayOrderService;
 import com.uas.service.donate.service.AlipayUserService;
 import com.uas.service.donate.service.ProjectRecodeService;
@@ -283,8 +281,6 @@ public class AlipayController {
             String notifySellerId = params.get("seller_id") == null ? "" : params.get("seller_id");
             String notifySellerEmail = params.get("seller_email") == null ? "" : params.get("seller_id");
 
-            System.out.print("*************************异步通知********************************* 商户订单号:" + notifyOutTradeNo);
-
             //商户系统订单支付状态
             short projectRecodePayStatus = 1;
             if ("TRADE_SUCCESS".equals(notifyTradeStatus)) {
@@ -302,8 +298,9 @@ public class AlipayController {
             } else {
                 //判断该笔订单是否在商户网站中已经做过处理
                 AlipayOrder oldAlipayOrder = alipayOrderService.getByOutTradeNo(notifyOutTradeNo);
-                if (oldAlipayOrder != null && notifyTradeStatus.equals(oldAlipayOrder.getTrade_status()) && oldAlipayOrder.getStatus() == 1) {
+                if (oldAlipayOrder != null && notifyTradeStatus.equals(oldAlipayOrder.getTrade_status()) && oldAlipayOrder.getStatus() == 1 && projectRecode.getStatus() != 1) {
                     //有做过处理,不执行商户的业务程序
+                    logger.info("系统已对该笔交易进行处理,交易订单号" + oldAlipayOrder.getOut_trade_no() + "支付宝订单号号" + oldAlipayOrder.getTrade_no());
                     response.getWriter().write("success");
                 } else {
                     projectRecode.setStatus(projectRecodePayStatus);
@@ -384,7 +381,6 @@ public class AlipayController {
                 if ("10000".equals(tradeQueryResponse.getCode())) {
                     if ("TRADE_SUCCESS".equals(tradeQueryResponse.getTradeStatus())) {
                         String requestUrlMessage = request.getScheme() +"://" + request.getServerName() + ":" + request.getServerPort();
-                        logger.info("服务器路径:" + requestUrlMessage);
                         String url = requestUrlMessage + "/project#/donationsOver/" +  notifyOutTradeNo;
                         modelAndView.setViewName("redirect:" + url);
                     }
@@ -563,6 +559,12 @@ public class AlipayController {
 
     private ProjectRecode createProjectRecode(String jsonStr) throws Exception {
         ProjectRecode projectRecode= JSONObject.parseObject(jsonStr,ProjectRecode.class);
+        
+        User user = SystemSession.getUser();
+        if (user != null) {
+            projectRecode.setUuid(user.getUserUU());
+        }
+
         projectRecode.setTime(new Date());
         ProjectRecode newProjectRecode = projectRecodeService.join(projectRecode);
         return newProjectRecode;

+ 85 - 6
donate-service/src/main/java/com/uas/service/donate/controller/IndexController.java

@@ -1,15 +1,32 @@
 package com.uas.service.donate.controller;
 
 import com.alibaba.fastjson.JSONObject;
-import com.uas.service.donate.model.*;
-import com.uas.service.donate.service.*;
+import com.github.binarywang.wxpay.exception.WxPayException;
+import com.uas.service.donate.api.WxPayApi;
+import com.uas.service.donate.config.WxConfig;
+import com.uas.service.donate.model.Project;
+import com.uas.service.donate.model.SystemSession;
+import com.uas.service.donate.model.User;
+import com.uas.service.donate.model.WechatUserInfo;
+import com.uas.service.donate.service.CarouselService;
+import com.uas.service.donate.service.ProjectRecodeService;
+import com.uas.service.donate.service.ProjectService;
+import com.uas.service.donate.util.WechatConnector;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageRequest;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.*;
-
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.net.URLEncoder;
 import java.util.List;
 
 @Controller
@@ -24,9 +41,71 @@ public class IndexController {
     @Autowired
     private CarouselService carouselService;
 
+    @Autowired
+    protected WxPayApi wxPayApi;
+
+    private Logger logger = LoggerFactory.getLogger(IndexController.class);
+
+    private String oauthUserScope = "snsapi_userinfo";
+
+
+    @RequestMapping(value = "/", method = RequestMethod.GET)
+    public String returnaDefault(HttpServletRequest request, HttpServletResponse response) throws IOException {
+        String code = request.getParameter("code");
+        String state = request.getParameter("state");
+        User user = SystemSession.getUser();
+
+        String ua = request.getHeader("user-agent").toLowerCase();
+        if (ua.indexOf("micromessenger") >= 0) {// 是微信浏览器
+
+            if (user != null && user.getWxOpenId() != null) {
+                //有用户 有openid 已授权
+                logger.info("公众号获取:--有用户 有openid 已授权");
+                return "forward:/index";
+            } else if (user != null && user.getWxOpenId() == null && code == null) {
+                //有用户 无openid 需要授权
+                logger.info("公众号获取:--有用户 无openid 需要授权");
+                //String url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + wxPayApi.getConfig().getAppId() + "&redirect_uri=" + URLEncoder.encode("http://lj.ubtob.com/", "UTF-8") + "&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect";
+                String url = WechatConnector.createAuthorizeUrl(oauthUserScope, wxPayApi.getConfig().getAppId(), URLEncoder.encode("http://lj.ubtob.com", "UTF-8"));
+                response.sendRedirect(url);
+            } else if (user == null && code == null) {
+                //需要授权
+                logger.info("公众号获取:--需要授权");
+                //String url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + wxPayApi.getConfig().getAppId() + "&redirect_uri=" + URLEncoder.encode("http://lj.ubtob.com/", "UTF-8") + "&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect";
+                String url = WechatConnector.createAuthorizeUrl(oauthUserScope, wxPayApi.getConfig().getAppId(), URLEncoder.encode("http://lj.ubtob.com", "UTF-8"));
+                response.sendRedirect(url);
+            }
+        }
+
+        if (code != null) {
+            //授权回调
+            logger.info("公众号获取,授权回调:authCode=" + code + ",state=" + state);
+
+            if (user == null) {
+                user = new User();
+            }
+            String openId = null;
+            try {
+                if ("snsapi_userinfo".equals(oauthUserScope)) {
+                    WechatUserInfo wechatUserInfo= WechatConnector.getOauthUser(code, wxPayApi.getConfig().getAppId(), WxConfig.APPSECRET); //TODO APPSECRET
+                    logger.info("微信用户授权信息:" + wechatUserInfo.toString());
+                    openId = wechatUserInfo.getOpenId();
+                } else if ("snsapi_base".equals(oauthUserScope)) {
+                    JSONObject tokenJson = WechatConnector.getAccessToken(code, wxPayApi.getConfig().getAppId(), WxConfig.APPSECRET);//TODO APPSECRET
+                    openId = tokenJson.getString("openid");
+                }
+
+                //openId = wxPayApi.authcode2Openid(code);
+            } catch (WxPayException e) {
+                e.printStackTrace();
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+            user.setWxOpenId(openId);
+            logger.info("当前用户信息:" + user.toString());
+            SystemSession.setUser(user);
+        }
 
-    @RequestMapping(value = "/",method = RequestMethod.GET)
-    public String returnaDefault(){
         return "forward:/index";
     }
 

+ 126 - 59
donate-service/src/main/java/com/uas/service/donate/controller/WxpayController.java

@@ -14,9 +14,12 @@ import com.uas.platform.core.util.HttpUtil;
 import com.uas.service.donate.api.WxPayApi;
 import com.uas.service.donate.config.WxConfig;
 import com.uas.service.donate.model.ProjectRecode;
+import com.uas.service.donate.model.SystemSession;
+import com.uas.service.donate.model.User;
 import com.uas.service.donate.model.WechatOrder;
 import com.uas.service.donate.service.ProjectRecodeService;
 import com.uas.service.donate.service.WechatOrderService;
+import com.uas.service.donate.util.IpUtils;
 import com.uas.service.donate.util.StringUtils;
 import com.uas.service.donate.util.WxCheckoutUtil;
 import org.apache.commons.io.IOUtils;
@@ -36,6 +39,8 @@ import java.io.IOException;
 import java.io.PrintWriter;
 import java.net.URLEncoder;
 import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * Created by 黄诚天 on 2017-10-27.
@@ -68,24 +73,35 @@ public class WxpayController {
 
     /**
      * 扫码支付 @RequestParam ProjectRecode projectRecode
+     * 使用模式一   模式一,先扫码,再生成订单。模式二,先生成订单,再扫码。
      * @param request
      * @param response
      * @throws Exception
      */
     @ResponseBody
     @RequestMapping(value = "/pcPay", method = RequestMethod.POST)
-    public String pcPay(@RequestParam("jsonStr") String jsonStr, HttpServletRequest request, HttpServletResponse response) throws Exception {
+    public ModelMap pcPay(@RequestParam("jsonStr") String jsonStr, HttpServletRequest request, HttpServletResponse response) throws Exception {
+        ModelMap modelMap = new ModelMap();
         ProjectRecode projectRecode= null;
         try {
             projectRecode = this.createProjectRecode(jsonStr);
         } catch (Exception e) {
-            response.getWriter().write(e.getMessage());
             logger.error("生成商户订单错误,原因:{}", e.getMessage());
-            return null;
+            modelMap.put("error", "参数错误");
+            return modelMap;
         }
 
         WxPayUnifiedOrderRequest wxPayUnifiedOrderRequest = createWxPayUnifiedOrderRequest(request, projectRecode, WxPayConstants.TradeType.NATIVE);
-        return unifiedOrder(wxPayUnifiedOrderRequest);
+        Map map = unifiedOrder(wxPayUnifiedOrderRequest);
+        if ("FAIL".equals(map.get("status"))) {
+            modelMap.put("error", map.get("message"));
+        } else {
+            modelMap.put("qrcodeUrl", map.get("qrcodeUrl"));
+            modelMap.put("outTradeNo", projectRecode.getId());
+        }
+
+
+        return modelMap;
     }
 
     /**
@@ -97,46 +113,52 @@ public class WxpayController {
      */
     @ResponseBody
     @RequestMapping(value = "/webPay", method = RequestMethod.POST)
-    public ModelMap appPay(@RequestParam("jsonStr") String jsonStr, HttpServletRequest request, HttpServletResponse response) throws Exception {
-        ModelMap map = new ModelMap();
+    public ModelMap webPay(@RequestParam("jsonStr") String jsonStr, HttpServletRequest request, HttpServletResponse response) throws Exception {
+        ModelMap modelMap = new ModelMap();
 
         ProjectRecode projectRecode= null;
         try {
             projectRecode = this.createProjectRecode(jsonStr);
         } catch (Exception e) {
-            response.getWriter().write(e.getMessage());
             logger.error("生成商户订单错误,原因:{}", e.getMessage());
-            map.put("error", "参数错误");
-            return map;
+            modelMap.put("error", "参数错误");
+            return modelMap;
         }
 
         WxPayUnifiedOrderRequest wxPayUnifiedOrderRequest = createWxPayUnifiedOrderRequest(request, projectRecode, WxPayConstants.TradeType.JSAPI);
+        User user =SystemSession.getUser();
+        String openId = null;
+        if (user != null) {
+            openId = user.getWxOpenId();
+        }
 
-        //配置网页授权url
-        String openId = getOpenId(request);
+        openId = "o8lZ9uPU0cQRhPIEejd8XIuD6Urc";
+
+        logger.info("公众号支付处理:openId=" + openId);
         if (StringUtils.isEmpty(wxPayApi.getConfig().getSubAppId())) {
             wxPayUnifiedOrderRequest.setOpenid(openId);//否是 trade_type=JSAPI,此参数必传,用户在主商户appid下的唯一标识。openid和sub_openid可以选传其中之一,如果选择传sub_openid,则必须传sub_appid。
         } else {
             wxPayUnifiedOrderRequest.setSubOpenid(openId);//否是 trade_type=JSAPI,此参数必传,用户在子商户appid下的唯一标识。openid和sub_openid可以选传其中之一,如果选择传sub_openid,则必须传sub_appid。
         }
 
-        String prepayId = unifiedOrder(wxPayUnifiedOrderRequest);
-        if (StringUtils.isEmpty(prepayId)) {
-            //TODO 预下单失败处理
-            map.put("error", "支付失败,请重试");
+        Map map = unifiedOrder(wxPayUnifiedOrderRequest);
+
+        if ("FAIL".equals(map.get("status"))) {
+            modelMap.put("error", map.get("message"));
         } else {
-            //TODO 将prepayId返回给js
-            map.put("appId", wxPayApi.getConfig().getAppId());
-            map.put("timeStamp", String.valueOf(System.currentTimeMillis() / 1000));
-            map.put("nonceStr", wxPayUnifiedOrderRequest.getNonceStr());//String.valueOf(System.currentTimeMillis()
-            map.put("package", "prepay_id=" + prepayId);
-            map.put("signType", "MD5");
+            //modelMap.put("outTradeNo", projectRecode.getId());
+            //将prepayId返回给js
+            modelMap.put("appId", wxPayApi.getConfig().getAppId());
+            modelMap.put("timeStamp", String.valueOf(System.currentTimeMillis() / 1000));
+            modelMap.put("nonceStr", wxPayUnifiedOrderRequest.getNonceStr());//String.valueOf(System.currentTimeMillis()
+            modelMap.put("package", "prepay_id=" + map.get("prepayId"));
+            modelMap.put("signType", "MD5");
             //预付订单再次签名
             String packageSign = SignUtils.createSign(map, WxPayConstants.SignType.MD5, wxPayApi.getConfig().getMchKey(), false);
-            map.put("paySign", packageSign);
+            modelMap.put("paySign", packageSign);
         }
 
-        return map;
+        return modelMap;
     }
 
     /**
@@ -149,71 +171,74 @@ public class WxpayController {
     @ResponseBody
     @RequestMapping(value = "/wapPay", method = RequestMethod.POST)
     public ModelMap wapPay(@RequestParam("jsonStr") String jsonStr, HttpServletRequest request, HttpServletResponse response) throws Exception {
-        ModelMap map = new ModelMap();
-
+        ModelMap modelMap = new ModelMap();
         ProjectRecode projectRecode= null;
         try {
             projectRecode = this.createProjectRecode(jsonStr);
         } catch (Exception e) {
-            response.getWriter().write(e.getMessage());
             logger.error("生成商户订单错误,原因:{}", e.getMessage());
-            map.put("error", "参数错误");
-            return map;
+            modelMap.put("error", "参数错误");
+            return modelMap;
         }
 
         WxPayUnifiedOrderRequest wxPayUnifiedOrderRequest = createWxPayUnifiedOrderRequest(request, projectRecode, WxPayConstants.TradeType.MWEB);
-        String mwebUrl = unifiedOrder(wxPayUnifiedOrderRequest);
-        if (StringUtils.isEmpty(mwebUrl)) {
-            //TODO 预下单失败处理
-            map.put("error", "支付失败,请重试");
+        Map map = unifiedOrder(wxPayUnifiedOrderRequest);
+        if ("FAIL".equals(map.get("status"))) {
+            modelMap.put("error", map.get("message"));
         } else {
-            map.put("mwebUrl", mwebUrl); //通过mweb_url调起微信支付中间页  重定向mweb_url
+            modelMap.put("mwebUrl", map.get("mwebUrl"));
         }
 
-        return map;
+        return modelMap;
     }
 
 
     //通过统一下单接口发起请求,获得prepay_id(预支付交易会话标识),这个标示是微信提交支付的关键数据
-    public String unifiedOrder(WxPayUnifiedOrderRequest wxPayUnifiedOrderRequest) throws Exception {
+    public Map unifiedOrder(WxPayUnifiedOrderRequest wxPayUnifiedOrderRequest) throws Exception {
+        Map map = new HashMap();
         WxPayUnifiedOrderResult wxPayUnifiedOrderResult = null;
         try {
             wxPayUnifiedOrderResult = wxPayApi.unifiedOrder(wxPayUnifiedOrderRequest);
 
+            //map.put("status", "SUCCESS");
             if (WxPayConstants.TradeType.MWEB.equals(wxPayUnifiedOrderRequest.getTradeType())) {
                 /*H5支付开发步骤:https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=15_4*/
                 String mwebUrl = wxPayUnifiedOrderResult.getMwebUrl() + "&redirect_url=" + URLEncoder.encode(redirectUrl,"UTF-8");
-                return mwebUrl;
+                map.put("mwebUrl", mwebUrl);
             } else if (WxPayConstants.TradeType.NATIVE.equals(wxPayUnifiedOrderRequest.getTradeType())) {
                 //扫码支付
                 //QrcodeUtils.encode(wxPayUnifiedOrderResult.getCodeURL(),response.getOutputStream());
                 byte[] bytes = QrcodeUtils.createQrcode(wxPayUnifiedOrderResult.getCodeURL(), 400, null);
-                String path=fileClient.upload(bytes, bytes.length,"jpg",null);
-                return path;
+                String qrcodeUrl = fileClient.upload(bytes, bytes.length,"jpg",null);
+                map.put("qrcodeUrl", qrcodeUrl);
             } else if (WxPayConstants.TradeType.JSAPI.equals(wxPayUnifiedOrderRequest.getTradeType())) {
                 //公众号支付
-                return wxPayUnifiedOrderResult.getPrepayId();
+                String prepayId = wxPayUnifiedOrderResult.getPrepayId();
+                map.put("prepayId", prepayId);
             }
             //byte[] arr = wxPayApi.createScanPayQrcodeMode2(wxPayUnifiedOrderResult.getCodeURL(),null,null);
         } catch (WxPayException e) {
             logger.error("微信支付失败!订单号:{},原因:{}", wxPayUnifiedOrderRequest.getOutTradeNo(), e.getMessage());
             e.printStackTrace();
+            map.put("status", e.getReturnCode());
+            map.put("message", e.getReturnMsg());
         }
-        return null;
-
+        return map;
     }
 
     /**
-     * 查询
+     * 查询订单支付状态 参数二选一
      * @param transactionId
      * @param outTradeNo
      */
-    public void queryOrder(String transactionId, String outTradeNo){
+    @ResponseBody
+    @RequestMapping(value = "/queryTradeState", method = RequestMethod.POST)
+    public String queryTradeState(@RequestParam(required = false) String transactionId, @RequestParam(required = false) String outTradeNo){
         try {
             WxPayOrderQueryResult wxPayOrderQueryResult =wxPayApi.queryOrder(transactionId, outTradeNo);
-            wxPayOrderQueryResult.getTradeState();
+             return wxPayOrderQueryResult.getTradeState();
         } catch (WxPayException e) {
-            e.printStackTrace();
+            return "ERROR";
         }
     }
 
@@ -231,8 +256,10 @@ public class WxpayController {
      */
     @ResponseBody
     @RequestMapping("/notifyUrl")
-    public synchronized String payNotify(HttpServletRequest request, HttpServletResponse response) {
+    public synchronized void payNotify(HttpServletRequest request, HttpServletResponse response) throws IOException {
         ModelMap map = new ModelMap();
+        boolean isPaySuccess = false;
+        String outTradeNo = null;
         String returnResult = null;
         try {
             String xmlResult = IOUtils.toString(request.getInputStream(), request.getCharacterEncoding());
@@ -245,16 +272,20 @@ public class WxpayController {
                 if ("SUCCESS".equals(result.getResultCode())) {
                     returnResult = setXml("SUCCESS", "OK");
                     WechatOrder wechatOrder = wechatOrderService.getByTransactionId(result.getTransactionId());
+                    WxPayOrderQueryResult OrderQueryResult = null;
+                    if (wechatOrder != null) {
+                        OrderQueryResult = wxPayApi.queryOrder(result.getTransactionId(),null);//二选一填
+                    }
+
+                    ProjectRecode projectRecode = projectRecodeService.findOne(Long.parseLong(result.getOutTradeNo()));
                     //微信在数据库中订单存在且状态已处理
-                    if (wechatOrder != null && wechatOrder.getStatus() == 1) {
+                    if (wechatOrder != null && wechatOrder.getStatus() == 1 && projectRecode != null && projectRecode.getStatus() != 1 && wechatOrder.getTradeState().equals(OrderQueryResult.getTradeState())) {
                         logger.info("系统已对该笔交易进行处理,交易订单号" + wechatOrder.getOutTradeNo() + "微信交易号" + wechatOrder.getTransactionId());
                         returnResult = setXml("SUCCESS", "OK");
                     } else {
                         // 自己处理订单的业务逻辑
 
                         //校验返回的订单金额是否与商户侧的订单金额一致
-                        //TODO 先注释这两句
-                        ProjectRecode projectRecode = projectRecodeService.findOne(Long.parseLong(result.getOutTradeNo()));
                         if (!(projectRecode != null && ((int) (projectRecode.getAmount()*100)) == result.getTotalFee().intValue())) {
                             logger.warn("防止数据泄漏导致出现“假通知”,以免造成资金损失");
                             map.put("warning", "防止数据泄漏导致出现“假通知”,以免造成资金损失");
@@ -274,6 +305,8 @@ public class WxpayController {
                             if ("SUCCESS".equals(wxPayOrderQueryResult.getTradeState())) {
                                 projectRecodePayStatus = 2;
                                 projectRecode.setStatus(projectRecodePayStatus);
+                                isPaySuccess = true;
+                                outTradeNo = result.getOutTradeNo();
                             }
 
                             wechatOrderService.save(WechatOrder.WxPayOrderNotifyResultToConvert(result, (short) 1, wxPayOrderQueryResult));
@@ -281,6 +314,8 @@ public class WxpayController {
                         }
                         //更新订单状态
                         projectRecodeService.update(projectRecode);
+
+
                     }
                     //String totalFee = WxPayBaseResult.feeToYuan(result.getTotalFee());
                 } else {
@@ -297,13 +332,19 @@ public class WxpayController {
             returnResult = setXml("FAIL", "签名失败");
         } finally {
             //TODO map
-            return returnResult;
+            response.getWriter().write(returnResult);
+
+//            if (isPaySuccess) {
+//                String requestUrlMessage = request.getScheme() +"://" + request.getServerName() + ":" + request.getServerPort();
+//                String url = requestUrlMessage + "/project#/donationsOver/" +  outTradeNo;
+//                response.sendRedirect(url);
+//            }
         }
     }
 
     @ResponseBody
     @RequestMapping("/redirectUrl")
-    public String redirectUrl() {
+    public String redirectUrl(HttpServletRequest request) {
     /*由于设置redirect_url后,回跳指定页面的操作可能发生在:1,微信支付中间页调起微信收银台后超过5秒
     2,用户点击“取消支付“或支付完成后点“完成”按钮。因此无法保证页面回跳时,支付流程已结束,
     所以商户设置的redirect_url地址不能自动执行查单操作,应让用户去点击按钮触发查单操作。*/
@@ -329,7 +370,7 @@ public class WxpayController {
 
 
     /**
-     * 获取token  公众号支付模式也不需要  先放着
+     * 获取token  这大概是基础支持token  一日上限2000次  用具体用户授权无关
      * @return
      * @throws Exception
      */
@@ -342,6 +383,14 @@ public class WxpayController {
         return null;
     }
 
+    @ResponseBody
+    @RequestMapping(value = "/userAdvanced", method = RequestMethod.GET)
+    public void userAdvanced(HttpServletRequest request, HttpServletResponse response) throws Exception {
+        //配置网页授权url
+        String url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + wxPayApi.getConfig().getAppId() + "&redirect_uri=" + URLEncoder.encode("http://lj.ubtob.com/wxpay/getOpenId", "UTF-8") + "&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect";
+        response.sendRedirect(url);
+    }
+
     /**
      * 获取用户基本信息  静默获取  无需用户同意 只有公众号模式需要
      * https://mp.weixin.qq.com/advanced/advanced?action=table&token=719542712&lang=zh_CN
@@ -350,17 +399,25 @@ public class WxpayController {
      * @return
      */
     @ResponseBody
-    @RequestMapping("/getUserInfo")
-    public String getOpenId(HttpServletRequest request){
+    @RequestMapping(value = "/getOpenId", method = RequestMethod.GET)
+    public void getOpenId(HttpServletRequest request) throws IOException {
         try {
             //TODO 授权方式  是否需要电话号码  名字等信息
             //TODO 获取code
             String code = request.getParameter("code");
+            String state = request.getParameter("state");
+
+            logger.info("公众号获取:authCode=" + code + ",state=" + state);
             //String xmlResult = IOUtils.toString(request.getInputStream(), request.getCharacterEncoding());
-            return wxPayApi.authcode2Openid(code);
+            String openId = wxPayApi.authcode2Openid(code);
+            User user = SystemSession.getUser();
+            if (user == null) {
+                user = new User();
+            }
+            user.setWxOpenId(openId);
+            SystemSession.setUser(user);
         } catch (WxPayException e) {
             e.printStackTrace();
-            return null;
         }
     }
 
@@ -447,7 +504,7 @@ public class WxpayController {
             wxPayUnifiedOrderRequest.setBody("一元捐-" + projectRecode.getProjectName());
         } else if (WxPayConstants.TradeType.JSAPI.equals(tradeType)) {
             if (StringUtils.isEmpty(wxPayApi.getConfig().getSubAppId())) {
-                wxPayUnifiedOrderRequest.setOpenid(null);//否是 trade_type=JSAPI,此参数必传,用户在主商户appid下的唯一标识。openid和sub_openid可以选传其中之一,如果选择传sub_openid,则必须传sub_appid。
+                wxPayUnifiedOrderRequest.setOpenid(null);//TODO  否是 trade_type=JSAPI,此参数必传,用户在主商户appid下的唯一标识。openid和sub_openid可以选传其中之一,如果选择传sub_openid,则必须传sub_appid。
             } else {
                 wxPayUnifiedOrderRequest.setSubOpenid(null);//否是 trade_type=JSAPI,此参数必传,用户在子商户appid下的唯一标识。openid和sub_openid可以选传其中之一,如果选择传sub_openid,则必须传sub_appid。
             }
@@ -469,8 +526,12 @@ public class WxpayController {
         //wxPayUnifiedOrderRequest.setFeeType("CNY");//否 符合ISO 4217标准的三位字母代码,默认人民币:CNY
         wxPayUnifiedOrderRequest.setTotalFee((int)(projectRecode.getAmount() * 100));//是 订单总金额,只能为整数
 
-        //wxPayUnifiedOrderRequest.setSpbillCreateIp(IpUtils.getIpFromRequest(request));//是 APP和网页支付提交用户端ip,Native支付填调用微信支付API的机器IP
-        wxPayUnifiedOrderRequest.setSpbillCreateIp(getIp(request));
+        String spbillCreateIp = IpUtils.getIpFromRequest(request);
+        if ("0:0:0:0:0:0:0:1".equals(spbillCreateIp)) {
+            spbillCreateIp = "127.0.0.1";
+        }
+        wxPayUnifiedOrderRequest.setSpbillCreateIp(spbillCreateIp);//是 APP和网页支付提交用户端ip,Native支付填调用微信支付API的机器IP
+        //wxPayUnifiedOrderRequest.setSpbillCreateIp(getIp(request));
         //wxPayUnifiedOrderRequest.setSpbillCreateIp("10.10.100.200");
 
         //wxPayUnifiedOrderRequest.setTimeStart(null);//否 订单生成时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。
@@ -495,6 +556,12 @@ public class WxpayController {
 
     private ProjectRecode createProjectRecode(String jsonStr) throws Exception {
         ProjectRecode projectRecode= JSONObject.parseObject(jsonStr,ProjectRecode.class);
+
+        User user = SystemSession.getUser();
+        if (user != null) {
+            Long uuid = user.getUserUU();
+            projectRecode.setUuid(uuid);
+        }
         projectRecode.setTime(new Date());
         ProjectRecode newProjectRecode = projectRecodeService.join(projectRecode);
         return newProjectRecode;

+ 25 - 0
donate-service/src/main/java/com/uas/service/donate/model/User.java

@@ -57,6 +57,8 @@ public class User implements Serializable{
     @Column(name = "user_type")
     private String type;
 
+    private String wxOpenId;
+
 
     public String getName() {
         return name;
@@ -121,4 +123,27 @@ public class User implements Serializable{
     public void setType(String type) {
         this.type = type;
     }
+
+    public String getWxOpenId() {
+        return wxOpenId;
+    }
+
+    public void setWxOpenId(String wxOpenId) {
+        this.wxOpenId = wxOpenId;
+    }
+
+    @Override
+    public String toString() {
+        return "User{" +
+                "userUU=" + userUU +
+                ", name='" + name + '\'' +
+                ", pwd='" + pwd + '\'' +
+                ", tel=" + tel +
+                ", identity=" + identity +
+                ", company='" + company + '\'' +
+                ", userIMId=" + userIMId +
+                ", type='" + type + '\'' +
+                ", wxOpenId='" + wxOpenId + '\'' +
+                '}';
+    }
 }

+ 107 - 0
donate-service/src/main/java/com/uas/service/donate/model/WechatUserInfo.java

@@ -0,0 +1,107 @@
+package com.uas.service.donate.model;
+
+import javax.persistence.*;
+import java.io.Serializable;
+
+/**
+ * Created by 黄诚天 on 2017-11-25.
+ */
+@Entity
+@Table(name="wechat$userinfo")
+public class WechatUserInfo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Column(name = "id")
+    private Long id;
+
+    @Column(name = "open_id")
+    private String openId;
+
+    @Column(name = "nick_name")
+    private String nickname;
+
+    @Column(name = "avatar")
+    private String avatar;
+
+    @Column(name = "gender")
+    private String gender;
+
+    @Column(name = "union_id")
+    private String unionid;
+
+    @Column(name = "access_token")
+    private String accessToken;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getOpenId() {
+        return openId;
+    }
+
+    public void setOpenId(String openId) {
+        this.openId = openId;
+    }
+
+    public String getNickname() {
+        return nickname;
+    }
+
+    public void setNickname(String nickname) {
+        this.nickname = nickname;
+    }
+
+    public String getAvatar() {
+        return avatar;
+    }
+
+    public void setAvatar(String avatar) {
+        this.avatar = avatar;
+    }
+
+    public String getGender() {
+        return gender;
+    }
+
+    public void setGender(String gender) {
+        this.gender = gender;
+    }
+
+
+    public String getUnionid() {
+        return unionid;
+    }
+
+    public void setUnionid(String unionid) {
+        this.unionid = unionid;
+    }
+
+    public String getAccessToken() {
+        return accessToken;
+    }
+
+    public void setAccessToken(String accessToken) {
+        this.accessToken = accessToken;
+    }
+
+    @Override
+    public String toString() {
+        return "WechatUserInfo{" +
+                "id=" + id +
+                ", openId='" + openId + '\'' +
+                ", nickname='" + nickname + '\'' +
+                ", avatar='" + avatar + '\'' +
+                ", gender='" + gender + '\'' +
+                ", unionid='" + unionid + '\'' +
+                ", accessToken='" + accessToken + '\'' +
+                '}';
+    }
+}

+ 65 - 0
donate-service/src/main/java/com/uas/service/donate/util/WechatConnector.java

@@ -0,0 +1,65 @@
+package com.uas.service.donate.util;
+
+import com.alibaba.fastjson.JSONObject;
+import com.uas.service.donate.model.WechatUserInfo;
+import com.uas.sso.common.util.HttpUtil;
+
+/**
+ * Created by 黄诚天 on 2017-11-25.
+ */
+public class WechatConnector {
+
+    public static String createAuthorizeUrl(String scope, String appid, String redirectUri) {
+
+        StringBuilder urlBuilder = new StringBuilder("https://open.weixin.qq.com/connect/oauth2/authorize?");
+        urlBuilder.append("appid=" + appid);
+        urlBuilder.append("&redirect_uri=" + redirectUri);
+        urlBuilder.append("&response_type=code");
+        urlBuilder.append("&scope=" + scope);
+        urlBuilder.append("&state=123");
+        urlBuilder.append("#wechat_redirect");
+        return urlBuilder.toString();
+    }
+
+    public static JSONObject getAccessToken(String code, String app_id, String app_secret) throws Exception {
+
+        StringBuilder urlBuilder = new StringBuilder("https://api.weixin.qq.com/sns/oauth2/access_token?");
+        urlBuilder.append("appid="+app_id);
+        urlBuilder.append("&secret="+app_secret);
+        urlBuilder.append("&code=" + code);
+        urlBuilder.append("&grant_type=authorization_code");
+        String url = urlBuilder.toString();
+        HttpUtil.ResponseWrap responseWrap = HttpUtil.doGet(url);
+        if (responseWrap.isSuccess()) {
+            return JSONObject.parseObject(responseWrap.getContent());
+        }
+
+        return null;
+
+    }
+    /**
+     *
+     * @author xiaoqiang1006
+     * @date 2016年9月29日 下午2:34:58
+     */
+    public static WechatUserInfo getOauthUser(String code, String app_id, String app_secret) throws Exception {
+
+        JSONObject tokenJson = getAccessToken(code,app_id,app_secret);
+        String accessToken = tokenJson.getString("access_token");
+        String openId = tokenJson.getString("openid");
+        String url = "https://api.weixin.qq.com/sns/userinfo?" + "access_token=" + accessToken + "&openid=" + openId + "&lang=zh_CN";
+        HttpUtil.ResponseWrap responseWrap = HttpUtil.doGet(url);
+        WechatUserInfo user = new WechatUserInfo();
+        if (responseWrap.isSuccess()) {
+            user.setUnionid(tokenJson.getString("unionid"));
+            JSONObject json = JSONObject.parseObject(responseWrap.getContent());
+            user.setAccessToken(accessToken);
+            user.setAvatar(json.getString("headimgurl"));
+            user.setNickname(json.getString("nickname"));
+            user.setOpenId(openId);
+            int sex = json.getIntValue("sex");
+            user.setGender(sex == 1 ? "male" : "female");
+        }
+        return user;
+    }
+}

+ 1 - 0
donate-service/src/main/resources/MP_verify_BMkQAHplMGROBlAn.txt


+ 1 - 0
donate-service/src/main/resources/templates/MP_verify_BMkQAHplMGROBlAn.txt


+ 1 - 0
donate-service/src/main/webapp/WEB-INF/MP_verify_BMkQAHplMGROBlAn.txt


+ 101 - 8
donate-service/src/main/webapp/WEB-INF/views/userAgreement.html

@@ -464,17 +464,110 @@
                 <div class="chooseDetail">
                     <!--注册信息-->
                     <div class="detail show">
-                        <h3 class="protocol">优软一元捐用户协议</h3>
+                        <h3 class="protocol">一元捐公益平台用户协议</h3>
                         <div class="protocol-detail">
                             <div class="item">
                                 <h5>1.重要须知</h5>
-                                <p>1.1.本协议是用户(您)与腾讯公益慈善基金会(以下简称“腾讯”)之间关于腾讯公益网(以下简称“公益网”)服务产品的法律协议。</p>
-                                <p>1.2.腾讯在此特别提醒用户认真阅读本《用户协议》中的各个条款,并特别提醒用户欲使用公益网服务,必须事先认真阅读本服务条款中各条款,包括免除或者限制腾讯责任的免责条款以及对用户的权利限制条款。</p>
-                                <p>1.3.这些条款可由腾讯随时更新,且毋须另行通知。本协议条款一旦发生变更,腾讯将在网页上公布修改内容。修改后的协议条款一旦在网页上公布即有效,并代替原来的协议条款。您可随时登录网站查阅最新版服务条款。</p>
-                                <p>1.4.用户阅读后,请选择接受或不接受本服务条款(未成年人审阅时应该得到法定监护人的陪同)。</p>
-                                <p>1.5.如果用户不同意本服务条款或腾讯随时对服务条款修改,则用户无权使用并应主动取消腾讯提供的服务。</p>
-                                <p>1.6.用户的使用行为将被视为用户对全部服务条款的完全接受,包括接受腾讯对服务条款随时所做的任何修改,并同意接受本《协议》各项条款的约束。</p>
-                                <p style="margin-bottom: 70px;">1.7.用户若有违反本条款规定,腾讯有权终止用户腾讯公益网服务的使用资格并保留追究相关法律责任的权利。</p>
+                                <p>1.1.本协议是用户(您)使用优软一元捐公益平台 (以下简称“一元捐公益平台”)产品服务的法律协议。一元捐公益平台包括但不限于一元捐公益平台网、一元捐公益平台微信服务号、一元捐公益平台网移动版。一元捐公益平台上的用户均可通过一元捐公益平台发布公益活动或参与公益活动,相关公益活动的信息真实性由活动发起者负责。</p>
+                                <p>1.2.一元捐公益平台在此特别提醒用户认真阅读本《一元捐用户协议》中的各个条款,并特别提醒用户欲使用一元捐服务,必须事先认真阅读本服务条款中各条款,包括免除或者限制一元捐公益平台责任的免责条款及对用户的权利限制条款。</p>
+                                <p>1.3.这些条款可由一元捐公益平台随时更新,且毋须另行通知。本协议条款一旦发生变更, 一元捐公益平台将在网页上公布修改内容。修改后的协议条款一旦在网页上公布即有效,并代替原来的协议条款。您可随时登陆网站查阅最新版服务条款。</p>
+                                <p>1.4.用户阅读后,请选择接受或不接受本服务条款(未成年人审阅时应得到法定监护人的陪同)。</p>
+                                <p>1.5.如用户不同意本服务条款或一元捐公益平台随时对服务条款的修改,则用户无权使用并应主动取消一元捐公益平台提供的服务。</p>
+                                <p>1.6.用户的使用行为将被视为用户对全部服务条款的完全接受,包括接受一元捐公益平台对服务条款随时所做的任何修改,并同意接受本《协议》各项条款的约束。</p>
+                                <p style="margin-bottom: 20px;">1.7.用户若有违反本条款规定,一元捐公益平台有权终止用户一元捐公益平台服务的使用资格并保留追究相关法律责任的权利。</p>
+                                <h5>2.一元捐公益平台保护条款</h5>
+                                <p style="margin-bottom: 20px;">一元捐公益平台是由一元捐公益平台版权所有。一元捐公益平台所有相关内容(包括但不限于名称、程序编码、主题、声音效果、视觉效果、文字内容等)的著作权、专利权、商标、商业秘密及其它任何所有权或权利,均属一元捐公益平台所有。非经一元捐公益平台的同意,用户不得为了任何目的而擅自下载、修改、编辑、使用一元捐公益平台相关内容,否则应依法承担相应的法律责任。</p>
+                                <h5>3.用户的基本义务</h5>
+                                <p>3.1.用户应当遵守中华人民共和国法律,不得利用本一元捐公益平台进行(从事)危害国家安全、泄露国家秘密的行为,不得侵犯国家、社会、集体的和公民的合法权益,不得利用本一元捐公益平台制作、复制和传播下列信息: </p>
+                                <p style="margin-left: 20px;">(一)煽动抗拒、破坏宪法和法律、行政法规实施的;</p>
+                                <p style="margin-left: 20px;">(二)煽动颠覆国家政权,推翻社会主义制度的;</p>
+                                <p style="margin-left: 20px;">(三)煽动分裂国家、破坏国家统一的;</p>
+                                <p style="margin-left: 20px;">(四)煽动民族仇恨、民族歧视,破坏民族团结的;</p>
+                                <p style="margin-left: 20px;">(五)捏造或者歪曲事实,散布谣言,扰乱社会秩序的;</p>
+                                <p style="margin-left: 20px;">(六)宣扬封建迷信、淫秽、色情、赌博、暴力、凶杀、恐怖、教唆犯罪的;</p>
+                                <p style="margin-left: 20px;">(七)公然侮辱他人或者捏造事实诽谤他人的,或者进行其他恶意攻击的;</p>
+                                <p style="margin-left: 20px;">(八)损害国家机关信誉的;</p>
+                                <p style="margin-left: 20px;">(九)其他违反宪法和法律行政法规的。</p>
+                                <p>3.2.用户在遵守法律及本协议的前提下可依本协议使用一元捐公益平台服务,用户无权实施包括但不限于下列行为:</p>
+                                <p style="margin-left: 20px;">3.2.1.删除一元捐公益平台及其他副本上所有关于版权的信息、内容;</p>
+                                <p style="margin-left: 20px;">3.2.2.对于一元捐公益平台上相关信息等,未经一元捐公益平台书面同意使用、复制、修改、链接、转载、汇编、发表、出版一元捐公益平台相关内容、建立镜像站点、擅自借助一元捐公益平台发展与之有关的衍生产品、作品等;</p>
+                                <p style="margin-left: 20px;">3.2.3.利用一元捐公益平台侵害他人合法权益的行为,包括但不限于发表、传送、传播、储存侵害他人知识产权、商业机密等合法权利的内容等;</p>
+                                <p style="margin-left: 20px;">3.2.4.进行任何危害计算机网络安全的行为,包括但不限于:使用未经许可的数据或进入未经许可的服务器帐户;未经允许进入公众计算机网络或者他人计算机系统并删除、修改、增加存储信息;未经许可,企图探查、扫描、测试本一元捐公益平台网站系统或网络的弱点或其它实施破坏网络安全的行为;企图干涉、破坏一元捐公益平台系统或网站的正常运行,故意传播恶意程序或病毒以及其他破坏干扰正常网络信息服务的行为;伪造TCP/IP数据包名称或部分名称等。</p>
+                                <p>3.3.用户如果需要使用一元捐公益平台服务,必须满足以下条件:</p>
+                                <p style="margin-left: 20px;">3.3.1.用户需拥有或有权使用登陆网站的终端设备;</p>
+                                <p style="margin-left: 20px;">3.3.2.能够连接上互联网,并自行负担上网所需的各项费用;除了在本协议内所提及的款项之外,用户必须自行负担全部所需的硬件费用、软件费用、网络服务费用以及相关的税收。</p>
+                                <h5>4.用户须知</h5>
+                                <p>4.1.用户完成一元捐公益平台注册程序并自行设置密码后,将获得一元捐公益平台使用帐号,用户应自行承担帐号及帐号密码的安全保护责任。用户对其帐号下(包括但不限于UU号,UU号的捆绑手机号码等)所进行的任何活动负完全的责任,一元捐公益平台无法对非法或未经用户授权使用您帐号及密码的行为作出甄别,因此一元捐公益平台不承担任何责任。在此,用户同意并承诺做到∶</p>
+                                <p style="margin-left: 20px;">1)当用户的密码或帐号遭到未获授权的使用,或者发生其他任何安全问题时,用户会立即有效通知到一元捐公益平台;</p>
+                                <p style="margin-left: 20px;">2)且当用户每次上网或使用其他服务完毕后,会将有关帐号等安全退出。</p>
+                                <p>4.2.用户同意于注册时提供完整、详尽、真实的个人资料或法人注册资料,若所提供的资料于日后有变更的,用户应当及时在一元捐公益平台中进行更新。若用户所提供的资料与事实不符或所提供的资料业已变更而未更新或有任何误导之嫌疑,导致一元捐公益平台无法提供服务的,一元捐公益平台及一元捐公益平台不因此承担任何责任。</p>
+                                <p>4.3.一元捐公益平台产品同大多数因特网产品一样,易受到各种安全问题的困扰,此类包括但不限于: </p>
+                                <p style="margin-left: 20px;">4.3.1.用户透露详细个人资料,被不法分子利用,造成现实生活中的骚扰;</p>
+                                <p style="margin-left: 20px;">4.3.2.用户被哄骗、被破译密码;</p>
+                                <p style="margin-left: 20px;">4.3.3.用户下载安装的其它软件中含有“特洛伊木马”等病毒,威胁到个人计算机上信息和数据的安全,继而威胁对一元捐公益平台的使用。用户须明白并自行承担以上风险,一元捐公益平台及一元捐公益平台对此不承担任何责任。
+                                </p>
+                                <p style="margin-left: 20px;">4.3.1.用户透露详细个人资料,被不法分子利用,造成现实生活中的骚扰;</p>
+                                <p>4.4.通过任何非经一元捐公益平台或一元捐公益平台授权开发并正式发布的其它网页或软件访问一元捐公益平台,将可能导致不可预知的风险,由此产生的一切法律责任与纠纷一概与一元捐公益平台及一元捐公益平台无关。用户不得轻易访问此类网页或下载、安装、使用此类软件,否则,一元捐公益平台及一元捐公益平台有权采取惩罚性措施,包括但不限于中/终止用户一元捐公益平台帐号使用资格、中/终止用户一元捐公益平台使用资格。</p>
+                                <p>4.5.一元捐公益平台在此郑重提请用户注意,任何经由本一元捐公益平台服务上传、下载、张贴、发送的即时信息、电子邮件或任何其他方式传送的资讯、资料、文字、软件、音乐、音讯、照片、图形、视讯、信息、用户的登记资料或其他资料等(以下简称“内容”),无论系公开还是私下传送,均由内容提供者承担责任。一元捐公益平台无法完全监控经由本一元捐公益平台服务传送之内容,也无法对用户的使用行为进行全面控制,因此不保证内容的合法性、正确性、完整性、真实性或品质等;用户已预知使用本服务时,可能会接触到令人不快、不适当或令人厌恶之内容,并同意将自行加以判断并承担所有风险,而不依赖于一元捐公益平台或一元捐公益平台。但在任何情况下,一元捐公益平台有权依法停止任何前述内容的服务并采取相应行动,包括但不限于暂停用户使用本服务的全部或部分,保存有关记录,并向有关机关报告。但一元捐公益平台及一元捐公益平台有权(但无义务)依其自行之考量,拒绝和删除可经由本服务提供之违反本条款的或其他引起一元捐或其他用户反感的任何内容。若内容提供者在本服务中提供的信息内容存在侵犯第三人著作权的可能,一元捐公益平台将遵循“版权保护投诉指引”处理该信息内容。</p>
+                                <p>4.6.个人用户须知</p>
+                                <p style="margin-left: 20px;">4.6.1. 个人用户是指:</p>
+                                <p style="margin-left: 40px;">4.6.1.1. 年满十八周岁,并具有民事权利能力和民事行为能力的自然人;</p>
+                                <p style="margin-left: 40px;">4.6.1.2. 未满十八周岁,但监护人(包括但不仅限于父母)同意的自然人;</p>
+                                <p style="margin-left: 40px;">4.6.1.3. 无民事行为能力人、限制民事行为能力人不当注册为本网站用户或超过其民事权利或行为能力范围从事公益的,其与本网站之间的服务条款自始无效,本网站一经发现,有权立即注销该用户,并追究其使用本网站“服务”的一切法律责任。</p>
+                                <p style="margin-left: 20px;">4.6.2.个人用户可以在一元捐公益平台注册使用帐号,可以凭自己的判断参与通过一元捐公益平台发布的公益活动;个人用户在注册时应提供真实的资料,包括但不限于姓名、身份证等,并保证如联系电话、联系地址等内容的有效性及安全性,同时有义务在相关资料发生变化时及时更新有关注册资料。</p>
+                                <p style="margin-left: 20px;">4.6.3 个人用户可以通过一元捐公益平台发起公益项目,有责任保证在一元捐公益平台上发布的案例均为真实,并且所募金额须在合理的范围之内,且须有公募资格的基金会对项目进行核实与认领后,才能通过一元捐公益平台进行筹款。同时个人用户有责任协助公募基金会发布公告、公示或其他途径告知捐款人款项的使用详情。</p>
+                                <p style="margin-left: 20px;">4.6.4.个人用户通过一元捐公益平台参与活动,所发生的一切纠纷及损失与一元捐公益平台及一元捐公益平台无关,一元捐公益平台或一元捐公益平台不会对相关的纠纷或损失承担任何责任。个人用户参与活动时应当多方面主动了解活动组织者或组织单位的资质及信用信息,自行鉴别信息的真伪,并为自己的行为负责。</p>
+                                <p style="margin-left: 20px;">4.6.5.个人用户有权利知道组织活动责任方及活动的信息。个人用户有权利从组织活动责任方处得知自己的捐款去向。</p>
+                                <p style="margin-left: 20px;">4.6.6.个人用户在一元捐公益平台上参与活动过程中与组织方发生纠纷,可以请求一元捐公益平台从中予以协调。个人用户若发现其他用户或组织方有违法或违反本协议的行为,可以向一元捐公益平台进行反映要求处理。但一元捐公益平台及一元捐公益平台并不对处理结果做任何保证或承诺。</p>
+                                <p style="margin-left: 20px;">4.6.7.个人用户参与活动的过程中应遵循诚实信用的原则、遵守社会公德及公序良俗原则,不得扰乱活动的正常进行,不进行与活动无关的行为或进行其他任何违法行为。</p>
+                                <p style="margin-left: 20px;">4.6.8.个人用户不得在一元捐公益平台上恶意评价任何组织方和其他用户,或采取不正当手段提高自身的信用度或降低任何组织方和其他用户的信用度。</p>
+                                <p style="margin-left: 20px;">4.6.9.个人用户不得在一元捐公益平台上发布各类违法或违规信息。</p>
+                                <p style="margin-left: 20px;">4.6.10.个人用户使用一元捐公益平台时实施的所有行为均应遵守国家法律、法规和一元捐公益平台的相关规定以及各种社会公共利益或公共道德。如有违反导致任何法律后果的发生,个人用户将以自己的名义独立承担所有相应的法律责任。</p>
+                                <p style="margin-left: 20px;">4.6.11.个人用户不得对一元捐公益平台上任何信息做商业性利用,包括但不限于在未经一元捐公益平台事先书面批准的情况下,以复制、传播等方式使用在一元捐公益平台上展示的任何资料。</p>
+                                <p>4.7.组织用户须知</p>
+                                <p style="margin-left: 20px;">4.7.1.本协议中的“组织用户”是指:</p>
+                                <p style="margin-left: 40px;">4.7.1.1.根据中国法律或设立地法律、法规和/或规章成立并合法存在的慈善组织、公益基金会、社团组织、公司、企事业单位、和其他组织(下称“组织用户”);</p>
+                                <p style="margin-left: 40px;">4.7.1.2.无经营或特定经营资格的组织不当注册为本网站用户或超过其民事权利或行为能力范围从事公益的,其与本网站之间的服务条款自始无效,本网站一经发现,有权立即注销该用户,并追究其使用本网站“服务”的一切法律责任。</p>
+                                <p style="margin-left: 20px;">4.7.2.“组织用户”中的有公募资格的基金会特别要求条款:</p>
+                                <p style="margin-left: 40px;">4.7.2.1.有责任保证在一元捐公益平台上发布的案例均为真实,并且所募金额必须在合理范围之内;</p>
+                                <p style="margin-left: 40px;">4.7.2.2.有责任通过发布公告公示或其他途径告知捐款人款项的使用详情;</p>
+                                <p style="margin-left: 40px;">4.7.2.3.在捐款金额中,收取项目管理费用的,应当告知捐款人,并且应当按照国家相关法律法规的规定收取。</p>
+                                <p style="margin-left: 20px;">4.7.3. 组织用户可以在一元捐公益平台注册使用帐号;组织用户在注册时应提供组织的真实资料,并保证如联系电话、联系地址等内容的有效性及安全性,同时在相关资料发生变化时及时更新有关注册资料,以便活动能够顺利进行。</p>
+                                <p style="margin-left: 20px;">4.7.4. 组织用户可以在一元捐公益平台发布合法的公益活动;没有公募资格的组织用户发起筹款项目时,需要有公募资格的基金会对项目进行审核与认领后,才能通过一元捐公益平台进行筹款;同时组织用户有责任协助公募基金会,发布公告、公示或其他途径告知捐款人款项的使用详情。</p>
+                                <p style="margin-left: 20px;">4.7.5.组织用户可以查询参与活动的个人用户的信息,但一元捐公益平台及一元捐公益平台并不保证信息的真实性,组织用户应通过其他有效途径进行验证。</p>
+                                <p style="margin-left: 20px;">4.7.6.组织用户在一元捐公益平台上组织活动过程中与其他用户发生纠纷,可以请求一元捐公益平台从中予以协调;组织用户若发现其他组织方或用户有违法或违反本协议的行为,可以向一元捐公益平台进行反映要求处理;但一元捐公益平台及一元捐公益平台并不对处理结果做任何保证或承诺。</p>
+                                <p style="margin-left: 20px;">4.7.7.组织用户在组织或参与活动的过程中应遵循诚实信用的原则,遵守社会公德及公序良俗原则,不得随意变更或取消活动,如有特殊情况需要变更活动应有效通知用户并协商进行,不得利用活动进行任何侵害他人或违法的行为。</p>
+                                <p style="margin-left: 20px;">4.7.8.组织用户不得在一元捐公益平台上恶意评价其他组织方和用户,或采取不正当手段提高自身的信用度或降低其他组织方和用户的信用度。</p>
+                                <p style="margin-left: 20px;">4.7.9.组织用户不得在一元捐公益平台上发布各类违法或违规信息。</p>
+                                <p style="margin-left: 20px;">4.7.10.组织用户使用一元捐公益平台时实施的所有行为均应遵守国家法律、法规和一元捐公益平台的相关规定以及各种社会公共利益或公共道德。如有违反导致任何法律后果的发生,组织用户将以自己的名义独立承担所有相应的法律责任。</p>
+                                <p style="margin-left: 20px;"> 4.7.11.组织用户不得对一元捐公益平台上任何信息做商业性利用,包括但不限于在未经一元捐公益平台事先书面批准的情况下,以复制、传播等方式使用在一元捐公益平台上展示的任何资料。</p>
+                                <h5>5.一元捐公益平台服务声明及免责事由</h5>
+                                <p style="margin-left: 20px;">5.1.用户使用一元捐公益平台由用户自己承担风险,在适用法律允许的最大范围内,一元捐公益平台在任何情况下不就因使用或不能使用本产品所发生的特殊的、意外的、非直接或间接的损失承担赔偿责任。即使已事先被告知该损害发生的可能性。</p>
+                                <p style="margin-left: 20px;">5.2.用户须明白,使用一元捐公益平台服务产品涉及到互联网服务,可能会受到各个环节不稳定因素的影响。因此服务存在不可抗力、计算机病毒或黑客攻击、系统不稳定、用户所在位置、用户关机以及其他任何技术、互联网络、通信线路原因等造成的服务中断或不能满足用户要求的风险。用户须承担以上风险,一元捐公益平台及一元捐公益平台不作任何担保。对因此导致用户不能发送和接受阅读消息、或接发错消息,一元捐公益平台及一元捐公益平台不承担任何责任。</p>
+                                <p style="margin-left: 20px;">5.3.如一元捐公益平台的系统发生故障影响到本服务的正常运行,一元捐公益平台承诺在第一时间内与相关单位配合,及时处理进行修复。但用户因此而产生的经济损失,一元捐公益平台、一元捐公益平台及合作公司不承担责任。此外,一元捐公益平台及一元捐公益平台保留不经事先通知为维修保养、升级或其他目的暂停本服务任何部分的权利。</p>
+                                <p style="margin-left: 20px;">5.4.用户须明白,在使用本服务产品存在有来自任何他人的包括威胁性的、诽谤性的、令人反感的或非法的内容或行为或对他人权利的侵犯(包括知识产权)的匿名或冒名的信息的风险,用户须承担以上风险,一元捐公益平台、一元捐公益平台及合作公司对服务不作任何类型的担保,不论是明确的或隐含的,包括所有有关信息真实性、适商性、适于某一特定用途、所有权和非侵权性的默示担保和条件,对因此导致任何因用户不正当或非法使用服务产生的直接、间接、偶然、特殊及后续的损害,不承担任何责任。</p>
+                                <p style="margin-left: 20px;">5.5.本协议定义的信息内容包括:文字、软件、声音、相片、录像、图表;在广告中全部内容;一元捐公益平台为用户提供的信息受版权、商标权、和其它知识产权和所有权法律的保护。所以,用户只能在一元捐公益平台及相关权利人的授权下才能使用这些内容,而不能擅自复制、修改、编撰这些内容、或创造与内容有关的衍生产品。因用户擅自复制、修改、编撰等行为导致的任何形式的责任及索赔均由用户自行承担相应的责任。</p>
+                                <p style="margin-left: 20px;">5.6.使用本服务必须遵守国家有关法律和政策等,维护国家利益,保护国家安全,并遵守本条款,对于用户违法或违反本条款的使用(包括但不限于言论发表、传送等)而引起的一切责任,由用户负全部责任,概与一元捐公益平台、一元捐公益平台及合作单位无关,导致一元捐公益平台、一元捐公益平台及合作单位损失的,一元捐公益平台、一元捐公益平台及合作单位有权要求赔偿,并有权立即停止向其提供服务,保留相关记录,并保留配合司法机关追究法律责任的权利。</p>
+                                <p style="margin-left: 20px;">5.7.尊重用户隐私是一元捐公益平台的一贯制度,一元捐公益平台将会采取合理的措施保护用户的资料信息,除法律或政府要求或用户同意等原因外,一元捐公益平台未经用户同意不向除合作单位以外的第三方公开、透露用户信息。但是用户在注册时选择或同意公开,或用户与一元捐公益平台及合作单位之间就用户资料公开或使用另有约定的除外,同时用户应自行承担因此可能产生的任何风险,一元捐公益平台对此不予负责。</p>
+                                <p style="margin-left: 20px;">5.8.用户对自己的各类财产帐户、银行卡、信用卡及对应密码等重要资料信息负有保管责任,请用户注意勿在使用一元捐公益平台上透露自己的各类财产帐户、银行卡、信用卡及对应密码等重要资料,否则由此带来的任何损失由用户自行承担。</p>
+                                <p style="margin-left: 20px;">5.9.一元捐公益平台属于群体类平台产品,参与一元捐公益平台上活动的个人之间,或个人与发起活动各个组织之间,或组织与组织之间引发的任何纠纷一元捐公益平台将不负责任。</p>
+                                <p style="margin-left: 20px;">5.10.由于第三方人为或非人为因素例如网络中断等,导致一元捐公益平台的部分或全部用户无法正常使用其功能的,一元捐公益平台及一元捐公益平台将不予补偿由此带来的经济损失。 </p>
+                                <p style="margin-left: 20px;">5.11.用户应规范、合法地使用一元捐公益平台,如用户有在公共环境下捣乱、骚扰、欺骗其他用户等行为或者实施其他违反本协议的行为,一经发现,一元捐公益平台及一元捐公益平台有权停止其在一元捐公益平台的任何活动及终止其使用帐号等。</p>
+                                <p style="margin-left: 20px;">5.12.用户不得利用一元捐公益平台进行违反国家法律的活动。如有发现,一元捐公益平台会配合公安部门全力协助调查工作。</p>
+                                <h5>6.其他约定</h5>
+                                <p style="margin-left: 20px;">6.1.一元捐公益平台及一元捐公益平台保留随时地、不事先通知地、不需要任何理由地、单方面地修订本协议的权利。本协议一经修订,一元捐公益平台将会用修订后的协议版本完全替代修订前的协议版本,并通过原有方式向所有用户公布。您应当及时关注和了解本协议的修订情况,如果您不同意修订后协议版本,请您立即停止对一元捐公益平台实施任何使用行为,否则即视同您同意并完全接受修订后的协议版本。</p>
+                                <p style="margin-left: 20px;">6.2.一元捐公益平台将本协议内置于一元捐公益平台用户注册页面当中,用户在注册的过程中即可查阅、了解本协议,亦可以通过点击“我同意”或“我接受”表示您完全同意并接受本协议之约束,或者点击“我不同意”或“我不接受”表示您不同意本协议。</p>
+                                <p style="margin-left: 20px;">6.3.除了本协议第6.2条所述的方式之外,您还可以通过浏览一元捐公益平台网站上来查阅、了解本协议。</p>
+                                <p style="margin-left: 20px;">6.4.一元捐公益平台将会不定期地对本协议进行补充、修订。补充、修订后的协议将会在一元捐公益平台网站上对用户公布,该补充、修订一旦公布即成为本协议不可分割的组成部分,与之具有同等的法律效力。该等补充条款与本协议有矛盾或者冲突的地方,适用该补充、修改条款,没有涉及的内容,仍适用本《协议》的有关约定。</p>
+                                <p style="margin-left: 20px;">6.5.一元捐公益平台服务内容或提供给用户的信息内容中如采用了除一元捐公益平台及其合作单位之外的第三方知识产权,而该等第三方对用户使用该知识产权有要求的,则第三方的要求将会以补充条款的形式向用户公布,用户亦应当一并遵守。</p>
+                                <p style="margin-left: 20px;">6.6.本协议各条款是可分的,所约定的任何条款如果部分或者全部无效,不影响该条款其他部分及本协议其他条款的法律效力。</p>
+                                <p style="margin-left: 20px;">6.7.本协议各条款的标题只是为了方便用户阅读而起到提示、醒目的作用,对本协议的解释及适用没有任何指引作用。 </p>
+                                <p style="margin-left: 20px;">6.8.用户若与一元捐公益平台或一元捐公益平台因本协议或其补充条款所涉及的有关事宜发生争议或者纠纷,双方应当友好协商解决;协商不成的,用户完全同意将争议提交本协议签订地有管辖权的人民法院通过诉讼方式解决。</p>
+                                <p style="margin-left: 20px;">6.9.本《协议》签订地为深圳市南山区。本《协议》及其补充条款均受中华人民共和国法律、法规管辖,一元捐公益平台保留最终解释权。一元捐公益平台拥有对以上各项条款内容的解释权及修改权。</p>
+                            </div>
+                            <div class="footer">
+                                <span>一元捐公益平台</span>
+                                <span>二〇一七年十月</span>
                             </div>
                         </div>
                     </div>

+ 1 - 0
donate-service/src/main/webapp/resources/MP_verify_BMkQAHplMGROBlAn.txt


+ 86 - 57
donate-service/src/main/webapp/resources/js/pay.js

@@ -9,6 +9,7 @@
 
 const userAgent = navigator.userAgent;
 const isMobile = /(iPhone|iPad|Opera Mini|Android.*Mobile|NetFront|PSP|BlackBerry|Windows Phone)/ig.test(userAgent);
+var orderInterval;
 
 var pay =function (proId, amount, payWay, uuid) {
      var customAmount = $("#custom-amount" + proId).val();
@@ -18,7 +19,12 @@ var pay =function (proId, amount, payWay, uuid) {
         var patt = new RegExp(reg);
         var r = patt.test(customAmount);
         if (r) {
-            amount = customAmount;
+            if (parseFloat(customAmount) < 10000000) {
+                amount = customAmount;
+            } else {
+                alert("您输入的金额过大,请不要超过一千万");
+                return;
+            }
         } else {
             alert('输入金额有误,请正确输入金额且最多保留两位小数!');
             return;
@@ -49,51 +55,18 @@ var wxPay = function (proId, amount, payWay, uuid) {
     //var userAgent = navigator.userAgent;
     if (userAgent.match(/MicroMessenger/i) == 'MicroMessenger') {
         //公众号支付逻辑(微信浏览器)
-        $.ajax({
-            url : "/wxpay/webPay",
-            type : "POST",
-            dataType : "json",
-            async: false,
-            data: {
-                jsonStr : jsonStr
-            },
-            success : function(data) {
-                WeixinJSBridge.invoke('getBrandWCPayRequest', {
-                    "appId" : data.appId, //公众号名称,由商户传入       
-                    "timeStamp" : data.timeStamp, //时间戳,自1970年以来的秒数       
-                    "nonceStr" : data.nonceStr, //随机串       
-                    "package" : data.package,
-                    "signType" : data.signType, //微信签名方式:       
-                    "paySign" : data.paySign
-                    //微信签名   
-                }, function(res) {
-                    if (res.err_msg == "get_brand_wcpay_request:ok") {
-                        alert("支付成功");
-                        // 使用以上方式判断前端返回:res.err_msg将在用户支付成功后返回    ok,但并不保证它绝对可靠。
-                    }
-                    else{
-                        alert("支付失败");
-                        //res.err_msg;  
-                    }
-                });
-
-
-                //这个if判断后面加的  不知道作用
-                if (typeof WeixinJSBridge == "undefined") {
-                    if (document.addEventListener) {
-                        document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
-                    } else if (document.attachEvent) {
-                        document.attachEvent('WeixinJSBridgeReady', onBridgeReady);
-                        document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
-                    }
-                } else {
-                    onBridgeReady();
-                }
-            },
-            error : function() {
-                alert('系统异常,请联系客服!');
-            }
-        });
+        webPay(jsonStr);
+        // $.ajax({
+        //     url : "/wxpay/userAdvanced",
+        //     type : "GET",
+        //     async: false,
+        //     success : function() {
+        //         webPay(jsonStr);
+        //     },
+        //     error : function() {
+        //         alert("请求openid失败");
+        //     }
+        // });
     }else{
         //H5支付逻辑
 
@@ -115,16 +88,17 @@ var wxPay = function (proId, amount, payWay, uuid) {
                 jsonStr : jsonStr
             },
             success : function(res){
-                if (res.error == null) {
-                    if (isMobile) {
-                        var mwebUrl = res;
-                        window.location.href = mwebUrl;
-                    } else {
-                        var qrcodeUrl = res;
-                        window.location.href = qrcodeUrl;
-                    }
+                var resJsonObj=JSON.parse(res);
+                if (resJsonObj.error != null) {
+                    alert(resJsonObj.error);
+                    return;
+                }
+
+                if (isMobile) {
+                    window.location.href = resJsonObj.mwebUrl;
                 } else {
-                    alert(res.error);
+                    document.cookie = 'qrcodeUrl='+encodeURIComponent(resJsonObj.qrcodeUrl);
+                    window.location.href = "http://lj.ubtob.com/project#/donateQrcode/" + resJsonObj.outTradeNo;
                 }
             },
             error : function() {
@@ -164,6 +138,40 @@ var unionPay  = function () {
 
 }
 
+/*公众号支付*/
+var webPay = function (jsonStr) {
+    $.ajax({
+        url : '/wxpay/webPay',
+        type : 'POST',
+        dataType : 'json',
+        async: false,
+        data: {
+            jsonStr : jsonStr
+        },
+        success : function(res) {
+            var resJsonObj=JSON.parse(res);
+            if (resJsonObj.error != null) {
+                alert(resJsonObj.error);
+                return;
+            }
+
+            if (typeof WeixinJSBridge == "undefined") {
+                if (document.addEventListener) {
+                    document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
+                } else if (document.attachEvent) {
+                    document.attachEvent('WeixinJSBridgeReady', onBridgeReady);
+                    document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
+                }
+            } else {
+                onBridgeReady(resJsonObj);
+            }
+        },
+        error : function() {
+            alert('系统异常,请联系客服!');
+        }
+    });
+}
+
 var getJson = function (proId, amount, payWay, uuid) {
     if (typeof uuid == 'undefined') {
         return jsonStr = "{proId:" + proId + "," +
@@ -173,14 +181,35 @@ var getJson = function (proId, amount, payWay, uuid) {
     } else {
         return jsonStr = "{proId:" + proId + "," +
             "amount:" + amount + "," +
-            "way:" + "\"" + payWay + "\"" +
-            ", uuid:" + uuid +
+            "way:" + "\"" + payWay + "\"" + "," +
+            "uuid:" + uuid +
             "}";
     }
 
 
 }
 
+function onBridgeReady(resJsonObj){
+    WeixinJSBridge.invoke('getBrandWCPayRequest', {
+        "appId" : resJsonObj.appId, //公众号名称,由商户传入       
+        "timeStamp" : resJsonObj.timeStamp, //时间戳,自1970年以来的秒数       
+        "nonceStr" : resJsonObj.nonceStr, //随机串       
+        "package" : resJsonObj.package,
+        "signType" : resJsonObj.signType, //微信签名方式:       
+        "paySign" : resJsonObj.paySign
+        //微信签名   
+    }, function(res) {
+        if (res.err_msg == "get_brand_wcpay_request:ok") {
+            alert("支付成功");
+            // 使用以上方式判断前端返回:res.err_msg将在用户支付成功后返回    ok,但并不保证它绝对可靠。
+        }
+        else{
+            alert("支付失败");
+            //res.err_msg;  
+        }
+    });
+}
+
 
 
 

+ 56 - 3
donate-service/src/main/webapp/resources/js/project/app.js

@@ -50,10 +50,10 @@ define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'commo
             templateUrl : 'static/view/project/donationsOver.html',
             controller : 'donationsOverCtrl'
         }).state("wxPayQrcode", {
-            url : '/donateQrcode',
+            url : '/donateQrcode/:tradeNo',
             title : '微信扫码',
-            templateUrl : 'static/view/project/donateQrcode.html'
-            // controller : 'donationsOverCtrl'
+            templateUrl : 'static/view/project/donateQrcode.html',
+            controller : 'donateQrcodeCtrl'
         });
 	}]);
 
@@ -80,5 +80,58 @@ define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'commo
         loadData();
     }]);
 
+    app.controller('donateQrcodeCtrl', ['$scope', '$stateParams', '$http', function ($scope, $stateParams, $http) {
+        var tradeNo = $stateParams.tradeNo;
+        var loadData = function () {
+            $scope.qrcodeUrl = decodeURIComponent(getCookie("qrcodeUrl"));
+            $http.get('/projectrecode/detail/' + tradeNo, {
+            }).success(function (data) {
+                $scope.projectRecode = data;
+            }).error(function () {
+                alert("查询支付结果出错");
+            });
+
+        };
+        loadData();
+
+        var orderInterval = self.setInterval(function(){orderStatus(tradeNo)} ,5000);
+
+        /*ajax轮询请求微信订单支付状态,用于跳转回商户页面*/
+        var orderStatus =function (outTradeNo) {
+
+            $.ajax({
+                type : "POST",
+                url : "/wxpay/queryTradeState",
+                dataType : "json",
+                data: {
+                    outTradeNo : outTradeNo
+                },
+                success : function(res){
+                    if ("SUCCESS" == res) {
+                        self.clearInterval(orderInterval);
+                        window.location.href = "http://lj.ubtob.com/project#/donationsOver/" + outTradeNo;
+                    } else if ("ERROR" == res) {
+                        console.log("查询微信订单错误");
+                    }
+                },
+                error : function () {
+                    console.log("查询支付状态请求失败");
+                }
+            });
+        }
+
+
+        function getCookie(key){
+            var arr1 = document.cookie.split('; ');
+            for(var i=0;i<arr1.length;i++){
+                var arr2 = arr1[i].split('=');
+                if(arr2[0] == key){
+                    return decodeURI(arr2[1]);
+                }
+            }
+        }
+
+    }]);
+
 	return app;
 });

+ 3 - 3
donate-service/src/main/webapp/resources/view/project/donateQrcode.html

@@ -136,11 +136,11 @@
 <div class="main">
     <div class="container">
         <div class="section">
-            <p class="project-title">捐款金额<em>1.00</em>元,支持<span>寒门学子 阳光助学</span>公益项目</p>
+            <p class="project-title">捐款金额<em>{{projectRecode.amount}}</em>元,支持<span>{{projectRecode.projectName}}</span>公益项目</p>
             <div class="qrcode">
-                <img src="static/images/instruction.png" alt=""/>
+                <img src="{{qrcodeUrl}}" alt=""/>
             </div>
-            <p class="instruction">收款机构 : <span>中国少年儿童文化艺术基金会</span></p>
+            <p class="instruction">收款机构 : <span>{{projectRecode.orgName}}</span></p>
             <span class="pay">请使用微信扫一扫,使用微信支付完成捐款</span>
         </div>
     </div>