JeffreySu/WeiXinMPSDK · error · InvalidOperationException

Finance SDK 的 操作返回了空指针。

Error message

Finance SDK 的 {operation} 操作返回了空指针。

What it means

The native Finance SDK's Init/GetChatData/GetMediaData/DecryptData return IntPtr handles; EnsureNativeHandle throws InvalidOperationException with 'Finance SDK 的 {operation} 操作返回了空指针。' when an operation returns IntPtr.Zero, meaning the native call produced no valid handle/data pointer.

Solutions

  1. Confirm LibraryPath points to the correct architecture-matched official libWeWorkFinanceSdk (x64) and that it loads without missing native dependencies
  2. Verify CorpId/Secret are correct so native Init succeeds
  3. Check the Linux/Windows environment has all runtime dependencies for the native SDK (e.g. libcurl, openssl)
  4. Re-run with logging around the failing operation to capture the native error before the null handle

Example fix

// before
var options = new MsgAuditFinanceOptions { LibraryPath = "/opt/lib/libWeWorkFinanceSdk.so" }; // wrong arch
// after
var options = new MsgAuditFinanceOptions { LibraryPath = "/opt/lib/x64/libWeWorkFinanceSdk_C.so" }; // match process architecture
Defensive patterns

Strategy: try-catch

Validate before calling

// Pre-flight: verify native library loads and credentials init succeed before batch processing
using var probe = new MsgAuditFinanceClient(options); // constructor initializes native SDK

Try / catch

try { var data = client.GetChatData(...); }
catch (InvalidOperationException ex) when (ex.Message.Contains("返回了空指针")) { /* native call failed: check library arch/deps and credentials, then recreate client */ }

Prevention

When it happens

Trigger: A native SDK call (Init, GetChatData, GetMediaData, DecryptData) returns IntPtr.Zero — typically after native initialization failure, wrong library path, or the SDK returning null output on error without the error code path firing.

Common situations: Running without the correct architecture-matched native library, SDK out-of-memory, invalid credentials causing Init to yield a zero handle, or platform issues (e.g. missing libcurl dependencies on Linux).

Related errors


AI-assisted analysis of JeffreySu/WeiXinMPSDK@be573f6f94 (2026-09-12). Data as JSON: /api/errors/2a6eeddc15e441a9. Report an issue: GitHub.

Appendix: source

Thrown at src/Senparc.Weixin.Work/Senparc.Weixin.Work/AdvancedAPIs/MsgAudit/MsgAuditFinanceClient.cs:301

            {
                throw new ArgumentOutOfRangeException(nameof(options.TimeoutSeconds),
                    "原生 SDK 网络请求超时时间必须大于 0 秒。");
            }
        }

        private static void ValidateRequiredText(string value, string parameterName)
        {
            if (string.IsNullOrWhiteSpace(value))
            {
                throw new ArgumentException("参数不能为空。", parameterName);
            }
        }

        private static void EnsureNativeHandle(IntPtr handle, string operation)
        {
            if (handle == IntPtr.Zero)
            {
                throw new InvalidOperationException($"Finance SDK 的 {operation} 操作返回了空指针。");
            }
        }

        private static void ThrowIfNativeError(int errorCode, string operation)
        {
            if (errorCode != 0)
            {
                throw new MsgAuditFinanceException(errorCode, operation);
            }
        }

        private void ThrowIfDisposed()
        {
            if (_disposed)
            {
                throw new ObjectDisposedException(nameof(MsgAuditFinanceClient));
            }
        }

View on GitHub (pinned to be573f6f94)