fix: improve h5 payment return flow
This commit is contained in:
@@ -320,6 +320,32 @@ try {
|
||||
assertTrue(($launch['status'] ?? '') === 'pending', 'purchase should create pending payment');
|
||||
assertTrue(($launch['cashier_url'] ?? '') !== '', 'purchase cashier_url missing');
|
||||
$payment = latestPayment($notifyOrderId);
|
||||
$requestJson = json_decode((string)$payment['request_json'], true);
|
||||
$purchaseBody = is_array($requestJson) ? ($requestJson['body'] ?? []) : [];
|
||||
assertTrue(
|
||||
($purchaseBody['return_url'] ?? '') === 'https://m.example.com/?sqb_return_order_id=' . $notifyOrderId . '#/pages/order/detail?id=' . $notifyOrderId,
|
||||
'purchase return_url should include H5 order detail fallback'
|
||||
);
|
||||
assertTrue(($purchaseBody['back_url'] ?? '') === ($purchaseBody['return_url'] ?? ''), 'purchase back_url should match return_url');
|
||||
|
||||
$staleReturnOrderId = createMockOrder($userId, 'STALERETURN');
|
||||
$service->createOrReusePayment($staleReturnOrderId);
|
||||
$stalePayment = latestPayment($staleReturnOrderId);
|
||||
$staleRequestJson = json_decode((string)$stalePayment['request_json'], true);
|
||||
if (is_array($staleRequestJson)) {
|
||||
$staleRequestJson['body']['return_url'] = 'https://m.example.com/#/pages/order/detail?id=' . $staleReturnOrderId;
|
||||
$staleRequestJson['body']['back_url'] = $staleRequestJson['body']['return_url'];
|
||||
Db::name('shouqianba_payments')->where('id', (int)$stalePayment['id'])->update([
|
||||
'request_json' => json_encode($staleRequestJson, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES),
|
||||
]);
|
||||
}
|
||||
$replacement = $service->createOrReusePayment($staleReturnOrderId);
|
||||
$stalePaymentAfterReplace = Db::name('shouqianba_payments')->where('id', (int)$stalePayment['id'])->find();
|
||||
$latestReplacement = latestPayment($staleReturnOrderId);
|
||||
assertTrue((string)($stalePaymentAfterReplace['status'] ?? '') === 'replaced', 'stale H5 payment should be marked replaced');
|
||||
assertTrue((int)$latestReplacement['id'] !== (int)$stalePayment['id'], 'stale H5 payment should be replaced with a new payment row');
|
||||
assertTrue(($replacement['check_sn'] ?? '') === (string)$latestReplacement['check_sn'], 'replacement launch payload should use the new payment row');
|
||||
|
||||
$notifyPayload = [
|
||||
'check_sn' => $payment['check_sn'],
|
||||
'order_status' => '4',
|
||||
|
||||
Reference in New Issue
Block a user