| | |
| | | import com.huifu.bspay.sdk.opps.client.BasePayClient; |
| | | import com.huifu.bspay.sdk.opps.core.BasePay; |
| | | import com.huifu.bspay.sdk.opps.core.config.MerConfig; |
| | | import com.huifu.bspay.sdk.opps.core.request.V2TradePaymentScanpayCloseRequest; |
| | | import com.huifu.bspay.sdk.opps.core.request.V3TradePaymentJspayRequest; |
| | | import com.huifu.bspay.sdk.opps.core.request.V3TradePaymentScanpayQueryRequest; |
| | | import com.talentcard.server.common.BusinessException; |
| | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 关掉一笔还没支付的预支付单。 |
| | | * |
| | | * <p>取消订单必须落到通道侧:只在本地把流水标成已关闭,用户仍然可以拿手上那张预支付单付款, |
| | | * 钱会收进来而订单已经取消。关单只对未支付的原交易有效,通道对一分钟以内的订单、已终态的原交易 |
| | | * 都会拒绝——拒绝原因由调用方结合 {@code org_trans_stat} 判断。 |
| | | */ |
| | | public Map<String, Object> closeMiniProgramPayment(HuifuPaymentCloseCommand command) { |
| | | ensureConfigured(); |
| | | ensureCollectingMerchant(command.huifuId()); |
| | | initializeSdk(); |
| | | V2TradePaymentScanpayCloseRequest request = new V2TradePaymentScanpayCloseRequest(); |
| | | request.setReqDate(REQUEST_DATE.format(LocalDateTime.now())); |
| | | request.setReqSeqId(command.requestNo()); |
| | | request.setHuifuId(command.huifuId().trim()); |
| | | request.setOrgReqDate(command.requestDate()); |
| | | Map<String, Object> extendInfo = new LinkedHashMap<>(); |
| | | extendInfo.put("org_req_seq_id", command.paymentNo()); |
| | | if (!blank(command.providerTransactionNo())) extendInfo.put("org_hf_seq_id", command.providerTransactionNo()); |
| | | request.setExtendInfo(extendInfo); |
| | | try { |
| | | Map<String, Object> response = BasePayClient.request(request, false); |
| | | log.info("Huifu mini-program payment close response: paymentNo={}, response={}", command.paymentNo(), logJson(response)); |
| | | return response; |
| | | } catch (Exception exception) { |
| | | log.warn("Huifu mini-program payment close failed: paymentNo={}, type={}, message={}", |
| | | command.paymentNo(), exception.getClass().getSimpleName(), safeMessage(exception.getMessage())); |
| | | throw new HuifuPaymentGatewayException("汇付关单失败,请稍后重试", isOutcomeUnknown(exception), exception); |
| | | } |
| | | } |
| | | |
| | | private void ensureConfigured() { |
| | | if (!properties.isEnabled()) throw new BusinessException(ErrorCode.CONFLICT, "汇付支付尚未启用"); |
| | | if (blank(properties.getSystemId()) || blank(properties.getProductId()) || blank(properties.getMerchantId()) |