| | |
| | | package com.talentcard.server.business.payment; |
| | | |
| | | import com.talentcard.server.business.DatabaseRows; |
| | | import com.talentcard.server.business.payment.HuifuPaymentPayload.TransStatus; |
| | | import com.talentcard.server.business.payment.huifu.HuifuPayload; |
| | | import com.talentcard.server.business.payment.huifu.HuifuPayload.TransStatus; |
| | | import com.talentcard.server.business.payment.PaymentSettlementService.ProviderPaymentFact; |
| | | import com.talentcard.server.business.payment.PaymentSettlementService.SettlementOutcome; |
| | | import com.talentcard.server.business.payment.huifu.HuifuMiniProgramPaymentGateway; |
| | |
| | | if (result.success()) { |
| | | // The query was made with the order's sub-merchant, so that number is the expected one. |
| | | SettlementOutcome outcome = settlementService.settle(new ProviderPaymentFact( |
| | | paymentNo, HuifuPaymentPayload.firstNonBlank(result.huifuId(), huifuId), result.amountInCent(), |
| | | paymentNo, HuifuPayload.firstNonBlank(result.huifuId(), huifuId), result.amountInCent(), |
| | | result.providerNo(), result.code(), result.message(), "QUERY")); |
| | | if (outcome.accepted()) { |
| | | issues.resolve("PAYMENT_PENDING_TIMEOUT", paymentNo, "system"); |
| | |
| | | String huifuId, Long amountInCent) { |
| | | private static ProviderResult from(Map<String, Object> response) { |
| | | Map<String, Object> data = response.get("data") instanceof Map<?, ?> map ? (Map<String, Object>) map : response; |
| | | String status = HuifuPaymentPayload.value(data, "trans_stat", "transStat"); |
| | | String code = HuifuPaymentPayload.code(data); |
| | | String message = HuifuPaymentPayload.message(data); |
| | | String providerNo = HuifuPaymentPayload.value(data, "hf_seq_id", "hfSeqId"); |
| | | String huifuId = HuifuPaymentPayload.value(data, "huifu_id", "huifuId"); |
| | | TransStatus classification = HuifuPaymentPayload.status(status); |
| | | boolean success = classification == TransStatus.SUCCESS && HuifuPaymentPayload.successCode(code); |
| | | String status = HuifuPayload.value(data, "trans_stat", "transStat"); |
| | | String code = HuifuPayload.code(data); |
| | | String message = HuifuPayload.message(data); |
| | | String providerNo = HuifuPayload.value(data, "hf_seq_id", "hfSeqId"); |
| | | String huifuId = HuifuPayload.value(data, "huifu_id", "huifuId"); |
| | | TransStatus classification = HuifuPayload.status(status); |
| | | boolean success = classification == TransStatus.SUCCESS && HuifuPayload.successCode(code); |
| | | // An unknown or missing status means "cannot confirm yet", not "failed". |
| | | boolean pending = classification == TransStatus.PENDING || classification == TransStatus.UNKNOWN; |
| | | return new ProviderResult(success, !success && !pending, status, code, message, providerNo, huifuId, |
| | | HuifuPaymentPayload.amountInCent(HuifuPaymentPayload.value(data, "trans_amt", "transAmt"))); |
| | | HuifuPayload.amountInCent(HuifuPayload.value(data, "trans_amt", "transAmt"))); |
| | | } |
| | | } |
| | | } |