if the order is not found, marked the payment as failed

This commit is contained in:
Sebastian 2023-01-10 11:24:46 -03:00
parent 8d59e71724
commit da5b42025a
No known key found for this signature in database
GPG Key ID: BE4FF68352439FC1

View File

@ -1135,9 +1135,9 @@ export function selectForced(
export type SelectPayCoinsResult = export type SelectPayCoinsResult =
| { | {
type: "failure"; type: "failure";
insufficientBalanceDetails: PayMerchantInsufficientBalanceDetails; insufficientBalanceDetails: PayMerchantInsufficientBalanceDetails;
} }
| { type: "success"; coinSel: PayCoinSelection }; | { type: "success"; coinSel: PayCoinSelection };
/** /**
@ -1623,7 +1623,7 @@ export async function runPayForConfirmPay(
const numRetry = opRetry?.retryInfo.retryCounter ?? 0; const numRetry = opRetry?.retryInfo.retryCounter ?? 0;
if ( if (
res.errorDetail.code === res.errorDetail.code ===
TalerErrorCode.WALLET_PAY_MERCHANT_SERVER_ERROR && TalerErrorCode.WALLET_PAY_MERCHANT_SERVER_ERROR &&
numRetry < maxRetry numRetry < maxRetry
) { ) {
// Pretend the operation is pending instead of reporting // Pretend the operation is pending instead of reporting
@ -1942,50 +1942,6 @@ export async function processPurchasePay(
}; };
} }
if (resp.status === HttpStatusCode.BadRequest) {
const errDetails = await readUnexpectedResponseDetails(resp);
logger.warn("unexpected 400 response for /pay");
logger.warn(j2s(errDetails));
await ws.db
.mktx((x) => [x.purchases])
.runReadWrite(async (tx) => {
const purch = await tx.purchases.get(proposalId);
if (!purch) {
return;
}
// FIXME: Should be some "PayPermanentlyFailed" and error info should be stored
purch.purchaseStatus = PurchaseStatus.PaymentAbortFinished;
await tx.purchases.put(purch);
});
throw makePendingOperationFailedError(
errDetails,
TransactionType.Payment,
proposalId,
);
}
if (resp.status === HttpStatusCode.Gone) {
const errDetails = await readUnexpectedResponseDetails(resp);
logger.warn("unexpected 410 response for /pay");
logger.warn(j2s(errDetails));
await ws.db
.mktx((x) => [x.purchases])
.runReadWrite(async (tx) => {
const purch = await tx.purchases.get(proposalId);
if (!purch) {
return;
}
// FIXME: Should be some "PayPermanentlyFailed" and error info should be stored
purch.purchaseStatus = PurchaseStatus.PaymentAbortFinished;
await tx.purchases.put(purch);
});
throw makePendingOperationFailedError(
errDetails,
TransactionType.Payment,
proposalId,
);
}
if (resp.status === HttpStatusCode.Conflict) { if (resp.status === HttpStatusCode.Conflict) {
const err = await readTalerErrorResponse(resp); const err = await readTalerErrorResponse(resp);
if ( if (
@ -2012,6 +1968,29 @@ export async function processPurchasePay(
result: undefined, result: undefined,
}; };
} }
if (resp.status >= 400 && resp.status <= 499) {
const errDetails = await readUnexpectedResponseDetails(resp);
logger.warn(`server returned ${resp.status} response for /pay`);
logger.warn(j2s(errDetails));
await ws.db
.mktx((x) => [x.purchases])
.runReadWrite(async (tx) => {
const purch = await tx.purchases.get(proposalId);
if (!purch) {
return;
}
// FIXME: Should be some "PayPermanentlyFailed" and error info should be stored
purch.purchaseStatus = PurchaseStatus.PaymentAbortFinished;
await tx.purchases.put(purch);
});
throw makePendingOperationFailedError(
errDetails,
TransactionType.Payment,
proposalId,
);
}
} }
const merchantResp = await readSuccessResponseJsonOrThrow( const merchantResp = await readSuccessResponseJsonOrThrow(