|
|
@@ -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;
|