|
@@ -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.request.WxPayUnifiedOrderRequest;
|
|
|
import com.github.binarywang.wxpay.bean.result.WxPayOrderQueryResult;
|
|
import com.github.binarywang.wxpay.bean.result.WxPayOrderQueryResult;
|
|
|
import com.github.binarywang.wxpay.bean.result.WxPayUnifiedOrderResult;
|
|
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.constant.WxPayConstants;
|
|
|
import com.github.binarywang.wxpay.exception.WxPayException;
|
|
import com.github.binarywang.wxpay.exception.WxPayException;
|
|
|
import com.github.binarywang.wxpay.util.SignUtils;
|
|
import com.github.binarywang.wxpay.util.SignUtils;
|
|
|
import com.uas.dfs.service.FileClient;
|
|
import com.uas.dfs.service.FileClient;
|
|
|
import com.uas.platform.core.util.HttpUtil;
|
|
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.api.WxPayApi;
|
|
|
import com.uas.service.donate.config.WxConfig;
|
|
import com.uas.service.donate.config.WxConfig;
|
|
|
import com.uas.service.donate.core.support.SystemSession;
|
|
import com.uas.service.donate.core.support.SystemSession;
|
|
@@ -96,6 +98,13 @@ public class WxpayController {
|
|
|
return modelMap;
|
|
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);
|
|
WxPayUnifiedOrderRequest wxPayUnifiedOrderRequest = createWxPayUnifiedOrderRequest(request, projectRecode, WxPayConstants.TradeType.NATIVE);
|
|
|
Map map = unifiedOrder(wxPayUnifiedOrderRequest, null);
|
|
Map map = unifiedOrder(wxPayUnifiedOrderRequest, null);
|
|
|
if ("FAIL".equals(map.get("status"))) {
|
|
if ("FAIL".equals(map.get("status"))) {
|
|
@@ -129,6 +138,13 @@ public class WxpayController {
|
|
|
return modelMap;
|
|
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);
|
|
WxPayUnifiedOrderRequest wxPayUnifiedOrderRequest = createWxPayUnifiedOrderRequest(request, projectRecode, WxPayConstants.TradeType.JSAPI);
|
|
|
String openId = null;
|
|
String openId = null;
|
|
|
Object openIdObj = request.getSession().getAttribute("openId");
|
|
Object openIdObj = request.getSession().getAttribute("openId");
|
|
@@ -187,7 +203,7 @@ public class WxpayController {
|
|
|
|
|
|
|
|
//预付订单再次签名
|
|
//预付订单再次签名
|
|
|
String packageSign = SignUtils.createSign(signMap, "MD5", wxPayApi.getConfig().getMchKey(), false);
|
|
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);
|
|
modelMap.put("paySign", packageSign);
|
|
|
}
|
|
}
|
|
@@ -215,6 +231,13 @@ public class WxpayController {
|
|
|
return modelMap;
|
|
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);
|
|
WxPayUnifiedOrderRequest wxPayUnifiedOrderRequest = createWxPayUnifiedOrderRequest(request, projectRecode, WxPayConstants.TradeType.MWEB);
|
|
|
// currentUrl当有三个参数时去掉第三个
|
|
// currentUrl当有三个参数时去掉第三个
|
|
|
currentUrl = getCurrentUrlInH5(currentUrl);
|
|
currentUrl = getCurrentUrlInH5(currentUrl);
|
|
@@ -227,6 +250,69 @@ public class WxpayController {
|
|
|
return modelMap;
|
|
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(预支付交易会话标识),这个标示是微信提交支付的关键数据
|
|
//通过统一下单接口发起请求,获得prepay_id(预支付交易会话标识),这个标示是微信提交支付的关键数据
|
|
|
public Map unifiedOrder(WxPayUnifiedOrderRequest wxPayUnifiedOrderRequest, String currentUrl) throws Exception {
|
|
public Map unifiedOrder(WxPayUnifiedOrderRequest wxPayUnifiedOrderRequest, String currentUrl) throws Exception {
|
|
@@ -267,6 +353,10 @@ public class WxpayController {
|
|
|
//公众号支付
|
|
//公众号支付
|
|
|
String prepayId = wxPayUnifiedOrderResult.getPrepayId();
|
|
String prepayId = wxPayUnifiedOrderResult.getPrepayId();
|
|
|
map.put("prepayId", prepayId);
|
|
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);
|
|
//byte[] arr = wxPayApi.createScanPayQrcodeMode2(wxPayUnifiedOrderResult.getCodeURL(),null,null);
|
|
|
} catch (WxPayException e) {
|
|
} catch (WxPayException e) {
|
|
@@ -559,6 +649,9 @@ public class WxpayController {
|
|
|
} else if (WxPayConstants.TradeType.NATIVE.equals(tradeType)) {
|
|
} else if (WxPayConstants.TradeType.NATIVE.equals(tradeType)) {
|
|
|
//PC网站——传入浏览器打开的网站主页title名-实际商品名称,例如:腾讯充值中心-QQ会员充值;
|
|
//PC网站——传入浏览器打开的网站主页title名-实际商品名称,例如:腾讯充值中心-QQ会员充值;
|
|
|
wxPayUnifiedOrderRequest.setBody("一元捐-" + projectService.findOne(projectRecode.getProId()).getName());
|
|
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("");//否 商品详细描述,对于使用单品优惠的商户,改字段必须按照规范上传,详见“单品优惠参数说明”
|
|
//wxPayUnifiedOrderRequest.setDetail("");//否 商品详细描述,对于使用单品优惠的商户,改字段必须按照规范上传,详见“单品优惠参数说明”
|