更新
This commit is contained in:
@@ -434,21 +434,25 @@ class WecomPromotionLogic
|
||||
try {
|
||||
$api->deleteLink($remoteLinkId);
|
||||
} catch (\Throwable $e) {
|
||||
$message = '企业微信官方获客链接删除失败,本地方案已保留:' . $e->getMessage();
|
||||
Db::name('qywx_promotion_link')->where('id', $linkId)->update([
|
||||
'sync_error' => mb_substr($message, 0, 500),
|
||||
'update_time' => time(),
|
||||
]);
|
||||
Db::name('qywx_promotion_range_sync')->where('pool_id', $id)->where('lock_token', $deleteToken)->update([
|
||||
'status' => 4,
|
||||
'next_retry' => 0,
|
||||
'lock_token' => '',
|
||||
'lock_until' => 0,
|
||||
'last_error' => mb_substr($message, 0, 500),
|
||||
'update_time' => time(),
|
||||
]);
|
||||
// 删除是幂等操作:企业微信明确返回 invalid link_id 时,远端目标已不存在
|
||||
// 或已不再属于当前应用,继续完成本地清理;其他错误仍保留方案以便重试。
|
||||
if (!self::isRemoteLinkAlreadyMissing($e)) {
|
||||
$message = '企业微信官方获客链接删除失败,本地方案已保留:' . $e->getMessage();
|
||||
Db::name('qywx_promotion_link')->where('id', $linkId)->update([
|
||||
'sync_error' => mb_substr($message, 0, 500),
|
||||
'update_time' => time(),
|
||||
]);
|
||||
Db::name('qywx_promotion_range_sync')->where('pool_id', $id)->where('lock_token', $deleteToken)->update([
|
||||
'status' => 4,
|
||||
'next_retry' => 0,
|
||||
'lock_token' => '',
|
||||
'lock_until' => 0,
|
||||
'last_error' => mb_substr($message, 0, 500),
|
||||
'update_time' => time(),
|
||||
]);
|
||||
|
||||
throw new RuntimeException($message, 0, $e);
|
||||
throw new RuntimeException($message, 0, $e);
|
||||
}
|
||||
}
|
||||
// 多个历史官方链接部分成功时也保存进度,用户重试删除不会再次请求已删除链接。
|
||||
Db::name('qywx_promotion_link')->where('id', $linkId)->update([
|
||||
@@ -484,6 +488,16 @@ class WecomPromotionLogic
|
||||
});
|
||||
}
|
||||
|
||||
private static function isRemoteLinkAlreadyMissing(\Throwable $error): bool
|
||||
{
|
||||
$message = strtolower($error->getMessage());
|
||||
$isInvalidLinkId = str_contains($message, 'invalid link_id');
|
||||
$isInvalidParameter = (int) $error->getCode() === 40058
|
||||
|| str_contains($message, '[40058]');
|
||||
|
||||
return $isInvalidParameter && $isInvalidLinkId;
|
||||
}
|
||||
|
||||
public static function saveMember(array $params, int $adminId, array $adminInfo): array
|
||||
{
|
||||
self::assertMemberDispatchSchema();
|
||||
|
||||
Reference in New Issue
Block a user