use of com.github.liuweijw.commons.base.R in project fw-cloud-framework by liuweijw.
the class UserController method modify.
/**
* 修改用户密码
*/
@RequestMapping(value = "/modify", method = RequestMethod.POST)
@PrePermissions(value = Functional.UPD)
public R<Boolean> modify(HttpServletRequest request, @RequestBody UserForm userForm) {
if (null == userForm.getUsername())
return new R<Boolean>().failure("用户名不存在");
if (null == userForm.getPassword())
return new R<Boolean>().failure("请输入旧密码");
if (null == userForm.getNewpassword())
return new R<Boolean>().failure("请输入新密码");
User user = this.userService.findUserByUsername(userForm.getUsername().trim(), false);
if (null == user)
return new R<Boolean>().failure("用户名不存在");
if (!new BCryptPasswordEncoder().matches(userForm.getPassword().trim(), user.getPassword()))
return new R<Boolean>().failure("旧密码输入错误!");
user.setPassword(new BCryptPasswordEncoder().encode(userForm.getNewpassword().trim()));
boolean r = this.userService.updateUser(user);
return new R<Boolean>().data(r);
}
use of com.github.liuweijw.commons.base.R in project fw-cloud-framework by liuweijw.
the class PaySendRedpackController method sendRedpack.
@RequestMapping(value = "/sendRedpack")
public R<Map<String, Object>> sendRedpack(@RequestBody PaySendRedpackReqBean paySendRedpackReqBean) {
PaySendRedpack paySendRedpack = new PaySendRedpack();
WxPaySendRedpackRequestBuilder wxPaySendRedpackRequestBuilder = WxPaySendRedpackRequest.newBuilder();
R<Boolean> validateResult = validateSendRedpackReqParams(paySendRedpackReqBean, paySendRedpack, wxPaySendRedpackRequestBuilder);
if (!validateResult.getData()) {
log.info(JSON.toJSONString(validateResult));
Map<String, Object> returnMap = PayUtil.makeRetData(PayUtil.makeRetMap(PayConstant.RETURN_VALUE_SUCCESS, validateResult.getMsg(), null, null, null), paySendRedpack.getResKey());
log.info(JSON.toJSONString(returnMap));
return new R<Map<String, Object>>().data(returnMap).failure();
}
return wxSendRedpackService.sendRedpack(paySendRedpack, wxPaySendRedpackRequestBuilder.build());
}
use of com.github.liuweijw.commons.base.R in project fw-cloud-framework by liuweijw.
the class PayOrderController method create.
/**
* 统一下单接口: 1) 先验证接口参数以及签名信息 2) 验证通过创建支付订单 3) 根据商户选择渠道,调用支付服务进行下单 4) 返回下单数据
*/
@RequestMapping(value = "/create")
public R<Map<String, Object>> create(@RequestBody PayUnifiedOrder unifiedOrder) {
PayOrder payOrder = new PayOrder();
Map<String, String> params = new HashMap<>();
R<Boolean> validateResult = this.validatePayOrderParams(unifiedOrder, payOrder, params);
if (!validateResult.getData()) {
log.error(JSON.toJSONString(validateResult));
return new R<Map<String, Object>>().data(PayUtil.makeRetMap(PayConstant.RETURN_VALUE_FAIL, "订单校验失败", null, null)).failure();
}
PayOrder resultOrder = payOrderService.updateOrSavePayOrder(payOrder);
if (null == resultOrder)
return new R<Map<String, Object>>().data(PayUtil.makeRetMap(PayConstant.RETURN_VALUE_FAIL, "订单保存失败", null, null)).failure();
switch(resultOrder.getChannelId()) {
case PayConstant.PAY_CHANNEL_WX_APP:
return wxUnifiedOrderService.doWxUnifiedOrderRequest(PayConstant.WxConstant.TRADE_TYPE_APP, payOrder, params);
case PayConstant.PAY_CHANNEL_WX_JSAPI:
return wxUnifiedOrderService.doWxUnifiedOrderRequest(PayConstant.WxConstant.TRADE_TYPE_JSPAI, payOrder, params);
case PayConstant.PAY_CHANNEL_WX_NATIVE:
return wxUnifiedOrderService.doWxUnifiedOrderRequest(PayConstant.WxConstant.TRADE_TYPE_NATIVE, payOrder, params);
case PayConstant.PAY_CHANNEL_WX_MWEB:
return wxUnifiedOrderService.doWxUnifiedOrderRequest(PayConstant.WxConstant.TRADE_TYPE_MWEB, payOrder, params);
case PayConstant.PAY_CHANNEL_ALIPAY_MOBILE:
case PayConstant.PAY_CHANNEL_ALIPAY_PC:
case PayConstant.PAY_CHANNEL_ALIPAY_WAP:
case PayConstant.PAY_CHANNEL_ALIPAY_QR:
return aliUnifiedOrderService.doAliUnifiedOrderRequest(resultOrder.getChannelId(), payOrder, params);
default:
break;
}
return new R<Map<String, Object>>().data(PayUtil.makeRetMap(PayConstant.RETURN_VALUE_FAIL, "不支持的支付渠道类型[channelId=" + resultOrder.getChannelId() + "]", null, null)).failure();
}
use of com.github.liuweijw.commons.base.R in project fw-cloud-framework by liuweijw.
the class PayOrderController method validatePayOrderParams.
private R<Boolean> validatePayOrderParams(PayUnifiedOrder unifiedOrder, PayOrder payOrder, Map<String, String> params) {
String preFix = "[统一下单提示] ";
if (null == unifiedOrder)
return new R<Boolean>().data(false).failure(preFix + "下单信息不能为空!");
// 商户id
String mchId = unifiedOrder.getMchId();
if (StringHelper.isBlank(mchId))
return new R<Boolean>().data(false).failure(preFix + "商户ID不存在!");
// 商户订单号
String mchOrderNo = unifiedOrder.getMchOrderNo();
if (StringHelper.isBlank(mchOrderNo))
return new R<Boolean>().data(false).failure(preFix + "商户订单号不存在!");
// 渠道ID
String channelId = unifiedOrder.getChannelId();
if (StringHelper.isBlank(channelId))
return new R<Boolean>().data(false).failure(preFix + "渠道ID不存在!");
// 支付金额(单位分)
Long amount = unifiedOrder.getAmount();
if (null == amount || amount <= 0)
return new R<Boolean>().data(false).failure(preFix + "支付金额(单位分)不正确!");
// 币种
String currency = unifiedOrder.getCurrency();
if (StringHelper.isBlank(currency))
return new R<Boolean>().data(false).failure(preFix + "币种未设置!");
// 支付结果回调URL
String notifyUrl = unifiedOrder.getNotifyUrl();
if (StringHelper.isBlank(notifyUrl))
return new R<Boolean>().data(false).failure(preFix + "支付回调未设置!");
// 商品主题
String subject = unifiedOrder.getSubject();
if (StringHelper.isBlank(subject))
return new R<Boolean>().data(false).failure(preFix + "商品主题未设置!");
// 商品描述信息
String body = unifiedOrder.getBody();
if (StringHelper.isBlank(body))
return new R<Boolean>().data(false).failure(preFix + "商品描述信息未设置!");
// ip
String ip = unifiedOrder.getIp();
if (StringHelper.isBlank(ip))
return new R<Boolean>().data(false).failure(preFix + "请求IP地址不正确!");
String device = unifiedOrder.getDevice();
if (StringHelper.isBlank(device))
return new R<Boolean>().data(false).failure(preFix + "请求设备信息设置不正确!");
String extra = unifiedOrder.getExtra();
// 根据不同渠道,判断extra参数
if (PayConstant.PAY_CHANNEL_WX_JSAPI.equalsIgnoreCase(channelId)) {
if (StringHelper.isBlank(extra))
return new R<Boolean>().data(false).failure(preFix + channelId + "[extra]信息未设置!");
JSONObject extraObject = JSON.parseObject(extra);
if (null == extraObject || !extraObject.containsKey("openId"))
return new R<Boolean>().data(false).failure(preFix + channelId + "[extra.openId]信息未设置!");
String openId = extraObject.getString("openId");
if (StringHelper.isBlank(openId))
return new R<Boolean>().data(false).failure(preFix + channelId + "[extra.openId]信息未正确设置!");
} else if (PayConstant.PAY_CHANNEL_WX_NATIVE.equalsIgnoreCase(channelId)) {
if (StringHelper.isBlank(extra))
return new R<Boolean>().data(false).failure(preFix + channelId + "[extra]信息未设置!");
JSONObject extraObject = JSON.parseObject(extra);
if (null == extraObject || !extraObject.containsKey("productId"))
return new R<Boolean>().data(false).failure(preFix + channelId + "[extra.productId]信息未设置!");
String productId = extraObject.getString("productId");
if (StringHelper.isBlank(productId))
return new R<Boolean>().data(false).failure(preFix + channelId + "[extra.productId]信息未正确设置!");
} else if (PayConstant.PAY_CHANNEL_WX_MWEB.equalsIgnoreCase(channelId)) {
if (StringHelper.isBlank(extra))
return new R<Boolean>().data(false).failure(preFix + channelId + "[extra]信息未设置!");
JSONObject extraObject = JSON.parseObject(WebUtils.buildURLDecoder(extra));
if (null == extraObject || !extraObject.containsKey("sceneInfo"))
return new R<Boolean>().data(false).failure(preFix + channelId + "[extra.sceneInfo]信息未设置!");
String sceneInfo = extraObject.getJSONObject("sceneInfo").toJSONString();
if (StringHelper.isBlank(sceneInfo))
return new R<Boolean>().data(false).failure(preFix + channelId + "[extra.sceneInfo]信息未正确设置!");
}
// 签名信息
String sign = unifiedOrder.getSign();
if (StringHelper.isBlank(sign))
return new R<Boolean>().data(false).failure(preFix + "未签名!");
// 查询商户信息
PayMchInfo mchInfo = mchInfoService.findMchInfoByMchId(mchId);
if (null == mchInfo)
return new R<Boolean>().data(false).failure(preFix + "商户信息不存在!");
if (mchInfo.getStatu().intValue() != 1)
return new R<Boolean>().data(false).failure(preFix + "商户信息已失效!");
if (StringHelper.isBlank(mchInfo.getReqKey()))
return new R<Boolean>().data(false).failure(preFix + "商户请求私钥未设置!");
// 查询商户对应的支付渠道
PayChannel payChannel = payChannelService.findPayChannel(channelId, mchId);
if (null == payChannel)
return new R<Boolean>().data(false).failure(preFix + "商户渠道[channelId=" + channelId + ",mchId=" + mchId + "]信息不存在!");
if (payChannel.getStatu().intValue() != 1)
return new R<Boolean>().data(false).failure(preFix + "商户渠道[channelId=" + channelId + ",mchId=" + mchId + "]信息已经失效!");
// 验证签名数据
boolean verifyFlag = PayUtil.verifyPaySign((JSONObject) JSON.toJSON(unifiedOrder), mchInfo.getReqKey());
if (!verifyFlag)
return new R<Boolean>().data(false).failure(preFix + "下单信息验证签名失败!");
payOrder.setPayOrderId(SequenceUtils.getInstance().generateBizSeqNo(BizConstant.PAY_ORDER_PREFIX));
payOrder.setMch_id(mchInfo.getMchId());
payOrder.setMchOrderNo(mchOrderNo);
payOrder.setChannelId(channelId);
payOrder.setAmount(amount);
payOrder.setCurrency(currency);
payOrder.setIp(ip);
payOrder.setDevice(device);
payOrder.setSubject(WebUtils.buildURLDecoder(subject));
payOrder.setBody(WebUtils.buildURLDecoder(body));
payOrder.setExtra(extra);
payOrder.setChannelMchId(payChannel.getChannelMchId());
payOrder.setParam1(unifiedOrder.getParam1());
payOrder.setParam2(unifiedOrder.getParam2());
payOrder.setNotifyUrl(notifyUrl);
params.put("resKey", mchInfo.getResKey());
params.put("channelParam", payChannel.getParam());
// 支付宝支付回调业务地址--非必填
params.put("returnUrl", unifiedOrder.getReturnUrl());
return new R<Boolean>().data(true).success(preFix + "下单信息验证成功!");
}
use of com.github.liuweijw.commons.base.R in project fw-cloud-framework by liuweijw.
the class AliUnifiedOrderServiceImpl method doAliUnifiedOrderRequest.
@Override
public R<Map<String, Object>> doAliUnifiedOrderRequest(String tradeType, PayOrder payOrder, Map<String, String> params) {
try {
if (null == payOrder || null == params || StringHelper.isBlank(tradeType) || StringHelper.isBlank(params.get("resKey")) || StringHelper.isBlank(params.get("channelParam")))
return new R<Map<String, Object>>().data(PayUtil.makeRetMap(PayConstant.RETURN_VALUE_FAIL, "", PayConstant.RETURN_VALUE_FAIL, PayEnum.ERR_0001)).failure();
String resKey = params.get("resKey");
String payOrderId = payOrder.getPayOrderId();
AlipayConfig alipayConfig = AlipayUtil.init(params.get("channelParam"), params.get("returnUrl"));
AlipayClient client = new DefaultAlipayClient(alipayConfig.getUrl(), alipayConfig.getAppId(), alipayConfig.getRsaPrivateKey(), AlipayConfig.FORMAT, AlipayConfig.CHARSET, alipayConfig.getAlipayPublicKey(), AlipayConfig.SIGNTYPE);
Map<String, Object> map = PayUtil.makeRetMap(PayConstant.RETURN_VALUE_SUCCESS, "", PayConstant.RETURN_VALUE_SUCCESS, null);
if (tradeType.equals(PayConstant.PAY_CHANNEL_ALIPAY_WAP)) {
String logPrefix = "【支付宝WAP支付下单】";
AlipayTradeWapPayModel model = new AlipayTradeWapPayModel();
model.setOutTradeNo(payOrderId);
model.setSubject(payOrder.getSubject());
model.setTotalAmount(AmountUtil.convertCent2Dollar(payOrder.getAmount().toString()));
model.setBody(payOrder.getBody());
model.setProductCode("QUICK_WAP_PAY");
String objParams = payOrder.getExtra();
if (StringUtils.isNotEmpty(objParams)) {
JSONObject objParamsJson = JSON.parseObject(objParams);
if (StringUtils.isNotBlank(objParamsJson.getString("quit_url"))) {
model.setQuitUrl(objParamsJson.getString("quit_url"));
}
}
AlipayTradeWapPayRequest alipay_request = new AlipayTradeWapPayRequest();
alipay_request.setBizModel(model);
alipay_request.setNotifyUrl(alipayProperties.getNotifyUrl());
alipay_request.setReturnUrl(alipayConfig.getReturnUrl());
AlipayTradeWapPayResponse alipayTradeWapPayResponse = client.pageExecute(alipay_request);
String payUrl = alipayTradeWapPayResponse.getBody();
log.info("{}生成跳转路径:payUrl={}", logPrefix, payUrl);
boolean result = payOrderService.updatePayOrderStatus4Paying(payOrderId, payOrderId);
log.info("{}更新第三方支付订单号:payOrderId={},tradeNo={},result={}", logPrefix, payOrderId, alipayTradeWapPayResponse.getTradeNo(), result);
log.info("{}生成请求支付宝数据,req={}", logPrefix, alipay_request.getBizModel());
map.put("tradeNo", alipayTradeWapPayResponse.getTradeNo());
map.put("payOrderId", payOrderId);
map.put("payUrl", payUrl);
log.info("{}商户统一下单处理完成", logPrefix);
} else if (tradeType.equals(PayConstant.PAY_CHANNEL_ALIPAY_PC)) {
String logPrefix = "【支付宝PC支付下单】";
AlipayTradePagePayModel model = new AlipayTradePagePayModel();
model.setOutTradeNo(payOrderId);
model.setSubject(payOrder.getSubject());
model.setTotalAmount(AmountUtil.convertCent2Dollar(payOrder.getAmount().toString()));
model.setBody(payOrder.getBody());
model.setProductCode("FAST_INSTANT_TRADE_PAY");
String objParams = payOrder.getExtra();
String qr_pay_mode = "2";
String qrcode_width = "200";
if (StringUtils.isNotEmpty(objParams)) {
JSONObject objParamsJson = JSON.parseObject(objParams);
qr_pay_mode = objParamsJson.containsKey("qr_pay_mode") ? objParamsJson.getString("qr_pay_mode") : qr_pay_mode;
qrcode_width = objParamsJson.containsKey("qrcode_width") ? objParamsJson.getString("qrcode_width") : qrcode_width;
}
model.setQrPayMode(qr_pay_mode);
model.setQrcodeWidth(Long.parseLong(qrcode_width));
AlipayTradePagePayRequest alipay_request = new AlipayTradePagePayRequest();
alipay_request.setBizModel(model);
alipay_request.setNotifyUrl(alipayProperties.getNotifyUrl());
alipay_request.setReturnUrl(alipayConfig.getReturnUrl());
AlipayTradePagePayResponse alipayTradePagePayResponse = client.pageExecute(alipay_request);
String payUrl = alipayTradePagePayResponse.getBody();
log.info("{}生成跳转路径:payUrl={}", logPrefix, payUrl);
boolean result = payOrderService.updatePayOrderStatus4Paying(payOrderId, payOrderId);
log.info("{}更新第三方支付订单号:payOrderId={},tradeNo={},result={}", logPrefix, payOrderId, alipayTradePagePayResponse.getTradeNo(), result);
log.info("{}生成请求支付宝数据,req={}", logPrefix, alipay_request.getBizModel());
map.put("tradeNo", alipayTradePagePayResponse.getTradeNo());
map.put("payOrderId", payOrderId);
map.put("payUrl", payUrl);
log.info("{}商户统一下单处理完成", logPrefix);
} else if (tradeType.equals(PayConstant.PAY_CHANNEL_ALIPAY_MOBILE)) {
String logPrefix = "【支付宝APP支付下单】";
AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
model.setOutTradeNo(payOrderId);
model.setSubject(payOrder.getSubject());
model.setTotalAmount(AmountUtil.convertCent2Dollar(payOrder.getAmount().toString()));
model.setBody(payOrder.getBody());
model.setProductCode("QUICK_MSECURITY_PAY");
AlipayTradeAppPayRequest alipay_request = new AlipayTradeAppPayRequest();
alipay_request.setBizModel(model);
alipay_request.setNotifyUrl(alipayProperties.getNotifyUrl());
alipay_request.setReturnUrl(alipayConfig.getReturnUrl());
AlipayTradeAppPayResponse alipayTradeAppPayResponse = client.sdkExecute(alipay_request);
String payParams = alipayTradeAppPayResponse.getBody();
boolean result = payOrderService.updatePayOrderStatus4Paying(payOrderId, payOrderId);
log.info("{}更新第三方支付订单号:payOrderId={},tradeNo={},result={}", logPrefix, payOrderId, alipayTradeAppPayResponse.getTradeNo(), result);
log.info("{}生成请求支付宝数据,payParams={}", logPrefix, payParams);
map.put("tradeNo", alipayTradeAppPayResponse.getTradeNo());
map.put("payOrderId", payOrderId);
map.put("payParams", payParams);
log.info("{}商户统一下单处理完成", logPrefix);
} else if (tradeType.equals(PayConstant.PAY_CHANNEL_ALIPAY_QR)) {
// 刷脸付 需要签约
String logPrefix = "【支付宝当面付之扫码支付下单】";
AlipayTradePrecreateModel model = new AlipayTradePrecreateModel();
model.setOutTradeNo(payOrderId);
model.setSubject(payOrder.getSubject());
model.setTotalAmount(AmountUtil.convertCent2Dollar(payOrder.getAmount().toString()));
model.setBody(payOrder.getBody());
String objParams = payOrder.getExtra();
if (StringUtils.isNotEmpty(objParams)) {
JSONObject objParamsJson = JSON.parseObject(objParams);
if (StringUtils.isNotBlank(objParamsJson.getString("discountable_amount"))) {
// 可打折金额
model.setDiscountableAmount(objParamsJson.getString("discountable_amount"));
}
if (StringUtils.isNotBlank(objParamsJson.getString("undiscountable_amount"))) {
// 不可打折金额
model.setUndiscountableAmount(objParamsJson.getString("undiscountable_amount"));
}
}
AlipayTradePrecreateRequest alipay_request = new AlipayTradePrecreateRequest();
alipay_request.setBizModel(model);
alipay_request.setNotifyUrl(alipayProperties.getNotifyUrl());
alipay_request.setReturnUrl(alipayConfig.getReturnUrl());
String payUrl = client.execute(alipay_request).getBody();
log.info("{}生成跳转路径:payUrl={}", logPrefix, payUrl);
boolean result = payOrderService.updatePayOrderStatus4Paying(payOrderId, payOrderId);
log.info("{}更新第三方支付订单号:payOrderId={},result={}", logPrefix, payOrderId, result);
log.info("{}生成请求支付宝数据,req={}", logPrefix, alipay_request.getBizModel());
map.put("payOrderId", payOrderId);
map.put("payUrl", payUrl);
log.info("{}商户统一下单处理完成", logPrefix);
}
return new R<Map<String, Object>>().data(PayUtil.makeRetData(map, resKey)).success();
} catch (Exception e) {
log.error("支付宝支付统一下单异常" + e);
return new R<Map<String, Object>>().data(PayUtil.makeRetMap(PayConstant.RETURN_VALUE_FAIL, "", PayConstant.RETURN_VALUE_FAIL, PayEnum.ERR_0001)).failure();
}
}
Aggregations