Browse Source

微信app支付

huangct 8 years ago
parent
commit
7f0b0a8a93

+ 13 - 0
donate-service/src/main/java/com/uas/service/donate/config/WxConfig.java

@@ -7,10 +7,23 @@ public class WxConfig {
 
     public static String APPID = "wxbc1f8607137d3b8a";
 
+    public static String MCHID = "1280180301";
+
+    public static String MCHKEY = "huangchengtianusoftchina12345678";
+
     public static String APPSECRET = "5788793a734881c3410be63224b75292";
 
     public static String Token = "huangchengtian";
 
     public static String oauthUserScope = "snsapi_userinfo";
 
+    //app支付开放平台对应商户平台商户号
+    public static String OPENMCHID = "1495003642";
+
+    //app支付开放平台对应商户平台商户密钥
+    public static String OPENMCHKEY = "F5B4E8E74FB0A9711CE1BFE45622510C";
+
+    //app支付开放平台应用appID
+    public static String OPENAPPID = "wxd1deafafe3fd9a21";
+
 }

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

@@ -153,7 +153,7 @@ public class AlipayController {
 
         try {
             AlipayTradePagePayModel model = new AlipayTradePagePayModel();
-            model.setTimeoutExpress("30m");//该笔订单允许的最晚付款时间,逾期将关闭交易。取值范围:1m~15d。该参数数值不接受小数点, 如 1.5h,可转换为 90m。
+            model.setTimeoutExpress("30m"); //该笔订单允许的最晚付款时间,逾期将关闭交易。取值范围:1m~15d。该参数数值不接受小数点, 如 1.5h,可转换为 90m。
             //model.setSellerId("2088102171369624");
             model.setOutTradeNo(projectRecode.getId().toString());
             model.setProductCode("FAST_INSTANT_TRADE_PAY");

+ 0 - 38
donate-service/src/main/java/com/uas/service/donate/controller/MessageSendController.java

@@ -1,38 +0,0 @@
-package com.uas.service.donate.controller;
-
-
-import com.uas.service.donate.service.MessageService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.ResponseEntity;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.RequestMapping;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * 发送消息提醒
- * Created by dongbw
- * 17/09/28 17:23.
- */
-@Controller
-@RequestMapping("/message")
-public class MessageSendController {
-
-    @Autowired
-    private MessageService messageService;
-
-    /**
-     * 发送邮件接口
-     */
-    public ResponseEntity<String> sendMail (String receivedMail, Map<String, Object> model) {
-        return messageService.sendMail(receivedMail, model);
-    }
-
-    /**
-     * 发送短信接口
-     */
-    public ResponseEntity<String> sendMessage(String receiverTel, List<Object> obj) {
-        return messageService.sendMessage(receiverTel, obj);
-    }
-}

+ 94 - 1
donate-service/src/main/java/com/uas/service/donate/controller/WxpayController.java

@@ -6,11 +6,13 @@ import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult;
 import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
 import com.github.binarywang.wxpay.bean.result.WxPayOrderQueryResult;
 import com.github.binarywang.wxpay.bean.result.WxPayUnifiedOrderResult;
+import com.github.binarywang.wxpay.config.WxPayConfig;
 import com.github.binarywang.wxpay.constant.WxPayConstants;
 import com.github.binarywang.wxpay.exception.WxPayException;
 import com.github.binarywang.wxpay.util.SignUtils;
 import com.uas.dfs.service.FileClient;
 import com.uas.platform.core.util.HttpUtil;
+import com.uas.platform.core.util.serializer.FlexJsonUtils;
 import com.uas.service.donate.api.WxPayApi;
 import com.uas.service.donate.config.WxConfig;
 import com.uas.service.donate.core.support.SystemSession;
@@ -96,6 +98,13 @@ public class WxpayController {
             return modelMap;
         }
 
+        WxPayConfig wxPayConfig = wxPayApi.getConfig();
+        wxPayConfig.setAppId(WxConfig.APPID);
+        wxPayConfig.setMchId(WxConfig.MCHID);
+        wxPayConfig.setMchKey(WxConfig.MCHKEY);
+        wxPayApi.setConfig(wxPayConfig);
+        logger.info("微信PC支付!APPID:{},MCHID:{}", WxConfig.APPID, WxConfig.MCHID);
+
         WxPayUnifiedOrderRequest wxPayUnifiedOrderRequest = createWxPayUnifiedOrderRequest(request, projectRecode, WxPayConstants.TradeType.NATIVE);
         Map map = unifiedOrder(wxPayUnifiedOrderRequest, null);
         if ("FAIL".equals(map.get("status"))) {
@@ -129,6 +138,13 @@ public class WxpayController {
             return modelMap;
         }
 
+        WxPayConfig wxPayConfig = wxPayApi.getConfig();
+        wxPayConfig.setAppId(WxConfig.APPID);
+        wxPayConfig.setMchId(WxConfig.MCHID);
+        wxPayConfig.setMchKey(WxConfig.MCHKEY);
+        wxPayApi.setConfig(wxPayConfig);
+        logger.info("微信公众号支付!APPID:{},MCHID:{}", WxConfig.APPID, WxConfig.MCHID);
+
         WxPayUnifiedOrderRequest wxPayUnifiedOrderRequest = createWxPayUnifiedOrderRequest(request, projectRecode, WxPayConstants.TradeType.JSAPI);
         String openId = null;
         Object openIdObj = request.getSession().getAttribute("openId");
@@ -187,7 +203,7 @@ public class WxpayController {
 
             //预付订单再次签名
             String packageSign = SignUtils.createSign(signMap, "MD5", wxPayApi.getConfig().getMchKey(), false);
-            logger.info("预付订单再次签名验签--" + SignUtils.checkSign(signMap, "MD5", wxPayApi.getConfig().getMchKey()));
+            logger.info("公众号预付订单再次签名验签--" + SignUtils.checkSign(signMap, "MD5", wxPayApi.getConfig().getMchKey()));
 
             modelMap.put("paySign", packageSign);
         }
@@ -215,6 +231,13 @@ public class WxpayController {
             return modelMap;
         }
 
+        WxPayConfig wxPayConfig = wxPayApi.getConfig();
+        wxPayConfig.setAppId(WxConfig.APPID);
+        wxPayConfig.setMchId(WxConfig.MCHID);
+        wxPayConfig.setMchKey(WxConfig.MCHKEY);
+        wxPayApi.setConfig(wxPayConfig);
+        logger.info("微信H5支付!APPID:{},MCHID:{}", WxConfig.APPID, WxConfig.MCHID);
+
         WxPayUnifiedOrderRequest wxPayUnifiedOrderRequest = createWxPayUnifiedOrderRequest(request, projectRecode, WxPayConstants.TradeType.MWEB);
         // currentUrl当有三个参数时去掉第三个
         currentUrl = getCurrentUrlInH5(currentUrl);
@@ -227,6 +250,69 @@ public class WxpayController {
         return modelMap;
     }
 
+    /**
+     * App支付
+     * @param request
+     * @param response
+     * @throws Exception
+     */
+    @ResponseBody
+    @RequestMapping(value = "/appPay", method = RequestMethod.POST)
+    public String appPay(@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) {
+            logger.error("生成商户订单错误,原因:{}", e.getMessage());
+            modelMap.put("error", "参数错误");
+            return FlexJsonUtils.toJsonDeep(modelMap);
+        }
+
+        WxPayConfig wxPayConfig = wxPayApi.getConfig();
+        wxPayConfig.setAppId(WxConfig.OPENAPPID);
+        wxPayConfig.setMchId(WxConfig.OPENMCHID);
+        wxPayConfig.setMchKey(WxConfig.OPENMCHKEY);
+        wxPayApi.setConfig(wxPayConfig);
+        logger.info("微信app支付!APPID:{},MCHID:{}", WxConfig.OPENAPPID, WxConfig.OPENMCHID);
+
+        WxPayUnifiedOrderRequest wxPayUnifiedOrderRequest = createWxPayUnifiedOrderRequest(request, projectRecode, WxPayConstants.TradeType.APP);
+        Map map = unifiedOrder(wxPayUnifiedOrderRequest, null);
+        if ("FAIL".equals(map.get("status"))) {
+            modelMap.put("error", map.get("message"));
+        } else if ("null".equals(map.get("status"))) {
+            modelMap.put("error", "系统错误!");
+        } else {
+            String nonceStr = String.valueOf(System.currentTimeMillis());
+            String timeStamp = String.valueOf(Long.parseLong(nonceStr) / 1000);
+            String appId = wxPayApi.getConfig().getAppId();
+            String prepayId = (String)map.get("prepayId");
+            String mchId = WxConfig.OPENMCHID; //开放平台对应的商户平台的商户号
+            modelMap.put("appid", appId);
+            modelMap.put("partnerid", mchId);
+            modelMap.put("prepayid", prepayId);
+            modelMap.put("timestamp", timeStamp);
+            modelMap.put("noncestr", nonceStr);
+            modelMap.put("package", "Sign=WXPay");
+
+            logger.info("参数--" + appId + "," + mchId + "," + prepayId + "," + timeStamp + "," + nonceStr);
+            Map<String, String> signMap = new HashMap<>();
+            signMap.put("appid", appId);
+            signMap.put("partnerid", mchId);
+            signMap.put("prepayid", prepayId);
+            signMap.put("noncestr", nonceStr);
+            signMap.put("timestamp", timeStamp);
+            signMap.put("package", "Sign=WXPay");
+
+            //预付订单再次签名  //开放平台对应的商户平台的商户密钥
+            String packageSign = SignUtils.createSign(signMap, "MD5", WxConfig.OPENMCHKEY, false);
+            logger.info("APP预付订单再次签名验签--" + packageSign);
+
+            modelMap.put("sign", packageSign);
+        }
+        return FlexJsonUtils.toJsonDeep(modelMap);
+    }
+
 
     //通过统一下单接口发起请求,获得prepay_id(预支付交易会话标识),这个标示是微信提交支付的关键数据
     public Map unifiedOrder(WxPayUnifiedOrderRequest wxPayUnifiedOrderRequest, String currentUrl) throws Exception {
@@ -267,6 +353,10 @@ public class WxpayController {
                 //公众号支付
                 String prepayId = wxPayUnifiedOrderResult.getPrepayId();
                 map.put("prepayId", prepayId);
+            } else if (WxPayConstants.TradeType.APP.equals(wxPayUnifiedOrderRequest.getTradeType())) {
+                //APP支付
+                String prepayId = wxPayUnifiedOrderResult.getPrepayId();
+                map.put("prepayId", prepayId);
             }
             //byte[] arr = wxPayApi.createScanPayQrcodeMode2(wxPayUnifiedOrderResult.getCodeURL(),null,null);
         } catch (WxPayException e) {
@@ -559,6 +649,9 @@ public class WxpayController {
         } else if (WxPayConstants.TradeType.NATIVE.equals(tradeType)) {
             //PC网站——传入浏览器打开的网站主页title名-实际商品名称,例如:腾讯充值中心-QQ会员充值;
             wxPayUnifiedOrderRequest.setBody("一元捐-" + projectService.findOne(projectRecode.getProId()).getName());
+        } else if (WxPayConstants.TradeType.APP.equals(tradeType)) {
+            //APP——需传入应用市场上的APP名字-实际商品名称,天天爱消除-游戏充值
+            wxPayUnifiedOrderRequest.setBody("一元捐-" + projectService.findOne(projectRecode.getProId()).getName());
         }
 
         //wxPayUnifiedOrderRequest.setDetail("");//否 商品详细描述,对于使用单品优惠的商户,改字段必须按照规范上传,详见“单品优惠参数说明”