微信后端代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

77 lines
3.1 KiB

package com.ynxbd.common.action;
import com.ynxbd.common.action.base.BaseAction;
import com.ynxbd.common.bean.enums.MerchantEnum;
import com.ynxbd.common.bean.pay.Order;
import com.ynxbd.common.helper.common.CodeHelper;
import com.ynxbd.common.helper.common.HttpHelper;
import com.ynxbd.common.result.Result;
import com.ynxbd.common.result.ResultEnum;
import com.ynxbd.common.service.OutCollectService;
import com.ynxbd.common.service.PayService;
import com.ynxbd.wx.wxfactory.WxPayHelper;
import lombok.extern.slf4j.Slf4j;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import java.math.BigDecimal;
@Slf4j
@Namespace("/wechat_mini")
public class WechatMiniAction extends BaseAction {
/**
* [外采支付]
*
* @param authCode 二维码授权码
* @param title 标题
* @param operateUser 操作人
* @param totalFee 总金额
* @return Y|N
*/
@Action("miniPayMicro")
public Result microPay(String authCode, String title, String operateUser, BigDecimal totalFee, String barCode, String patientId, String cardNo, String mid) {
Result result = PayService.isNoPay();
if (result != null) {
return result;
}
MerchantEnum merchantEnum = MerchantEnum.getMerchantEnumByAuthCode(authCode);
if (merchantEnum == null) {
log.info("[外采支付]条码不符合规则 authCode={}", authCode);
return Result.error(ResultEnum.PAY_AUTH_CODE_RULES_ERROR); // 条码不符合规则
}
log.info("{} 外采支付 title={}, totalFee={}", merchantEnum.NAME, title, totalFee);
if (operateUser == null || authCode == null || title == null || totalFee == null) {
return Result.error(ResultEnum.PARAM_IS_DEFECT);
}
String ip = HttpHelper.getIpAddress(request);
String outTradeNo = CodeHelper.getOutTradeNo(merchantEnum);
Order order = PayService.payMicro(merchantEnum, outTradeNo, title, totalFee, authCode, ip);
if (!order.isSuccess()) {
log.info("[外采支付]订单号={}, errMsg={}", outTradeNo, order.getErrorMsg());
// 等待输入密码
if (WxPayHelper.USER_PAYING.equals(order.getTradeState())) {
return Result.error(ResultEnum.PAY_NEED_PASSWORD, order.getOutTradeNo(), order.getErrorMsg());
}
return Result.error(ResultEnum.ERROR, order.getOutTradeNo(), order.getErrorMsg());
}
order.setOperateUser(operateUser);
order.setTotalFee(totalFee);
order.setAuthCode(authCode);
order.setPatientId(patientId);
order.setOpenid(mid);
order.setPayWay(merchantEnum.PAY_WAY_MICRO);
Order orderResult = new OutCollectService().ocPayMicro(order, barCode, cardNo);
return orderResult.isSuccess()
? Result.success(outTradeNo)
: Result.error(ResultEnum.ERROR, outTradeNo, orderResult.getErrorMsg());
}
}