diff --git a/packages/protocol/src/web/qzone-public.ts b/packages/protocol/src/web/qzone-public.ts index 551bd69a..b18827dd 100644 --- a/packages/protocol/src/web/qzone-public.ts +++ b/packages/protocol/src/web/qzone-public.ts @@ -286,7 +286,7 @@ export async function getQzoneShareArk( }, }); - if (data.err !== undefined) { + if (data.err !== undefined && data.err !== null) { if ( !isObject(data.err) || (data.err.code !== undefined && typeof data.err.code !== 'number') diff --git a/packages/protocol/tests/web/qzone-share.test.ts b/packages/protocol/tests/web/qzone-share.test.ts index ee1be4f0..11fc1d65 100644 --- a/packages/protocol/tests/web/qzone-share.test.ts +++ b/packages/protocol/tests/web/qzone-share.test.ts @@ -62,6 +62,26 @@ describe('Qzone share card', () => { }); }); + it('preserves a successful card when the upstream business error is null', async () => { + const card = '{ "app": "com.tencent.miniapp.lua", "view": "miniapp" }'; + const req = request({ + template_data: card, + err: null, + info: { + busi_data: Buffer.from( + JSON.stringify({ err_code: 0, err_msg: '', need_break: false, tips: {} }), + ).toString('base64'), + }, + }); + + await expect(getQzoneShareArk(cookies, feed)).resolves.toEqual({ + ark: card, + requires_confirmation: false, + notice: null, + }); + expect(req).toHaveBeenCalledOnce(); + }); + it('rejects unavailable sharing and incomplete feeds before requesting a card', async () => { const req = request({ template_data: ark }); await expect( @@ -77,6 +97,11 @@ describe('Qzone share card', () => { it.each([ [{ err: { code: 3, msg: '参数错误' }, template_data: ark }, '3 参数错误'], [{ err: { code: '0' }, template_data: ark }, '业务响应异常'], + [{ err: false, template_data: ark }, '业务响应异常'], + [{ err: 0, template_data: ark }, '业务响应异常'], + [{ err: '', template_data: ark }, '业务响应异常'], + [{ err: [], template_data: ark }, '业务响应异常'], + [{ err: null }, '未返回卡片'], [{}, '未返回卡片'], [{ template_data: '[]' }, '卡片格式异常'], [{ template_data: ark, info: { busi_data: '!' } }, '提示编码异常'],