常见问题解答

SDK错误码说明

错误码:

返回值 说明 建议
10000 请求参数错误 检查Init接口corpid、secret参数;检查GetChatData接口limit参数是否未填或大于1000;检查GetMediaData接口sdkfileid是否为空,indexbuf是否正常
10001 网络请求错误 检查是否网络有异常、波动;检查使用代理的情况下代理参数是否设置正确的用户名与密码
10002 数据解析失败 建议重试请求。若仍失败,可以反馈给企业微信进行查询,请提供sdk接口参数与调用时间点等信息
10003 系统调用失败 GetMediaData调用失败,建议重试请求。若仍失败,可以反馈给企业微信进行查询,请提供sdk接口参数与调用时间点等信息
10004 已废弃 目前不会返回此错误码
10005 fileid错误 检查在GetMediaData接口传入的sdkfileid是否正确
10006 解密失败 请检查是否先进行base64decode再进行rsa私钥解密,再进行DecryptMsg调用
10007 已废弃 目前不会返回此错误码
10008 DecryptMsg错误 建议重试请求。若仍失败,可以反馈给企业微信进行查询,请提供sdk接口参数与调用时间点等信息
10009 ip非法 请检查sdk访问外网的ip是否与管理端设置的可信ip匹配,若不匹配会返回此错误码
10010 请求的数据过期 用户欲拉取的数据已过期,仅支持近3天内的数据拉取
10011 ssl证书错误 使用openssl版本sdk,校验ssl证书失败

Q&A

Q:是否每次调用都需要new sdk,init sdk?
A:不需要,首次new sdk后,可以在多次的拉取会话记录/拉取媒体数据,使用同一个sdk进行处理.

Q:corpid/secret 在哪里获取?
A: corpid信息在企业微信管理端—我的企业—企业信息查看,secret在企业微信管理端—管理工具—会话内容存档查看

Q:如何拉取指定seq的消息?
A:通过seq跟limit来确认拉取消息的范围,每次拉取的是seq+1开始的limit条消息

Q:拉取消息的时间范围与条数范围?
A:企业微信只提供3天内的消息拉取,即:从发起拉取的时候往前推3天的消息。如果传入的seq不属于3天内,则从3天内的第一个消息的seq开始拉取。每次最多提供1000条消息的拉取

Q:服务部署在内网,如何拉取?
A:通过参数来设置代理进行拉取。支持http代理与sock5代理

Q:管理端填入的ip地址是否可以不填?
A:必须填写,企业微信会对ip地址的访问进行限制。对于使用方而言,需要设置其公网ip,企业微信后台收到的请求,会校验调用方的ip与管理端填写的ip是否匹配。

Q:管理端填入的消息加密公钥格式?
A:管理端填入RSA2048产生的公钥,后续使用pkcs1进行加密。每次上传公钥都会生成一个公钥版本号,在后续的拉取消息接口中,每条消息都会指明使用的加密公钥版本号。

Q:拉取的消息如何解密?
A:企业微信对待存储的消息使用企业最新上传的公钥进行加密,企业自行使用对应版本的私钥进行解密。对json消息体内的encrypt_random_key,base64处理后首先使用对应版本的私钥进行解密得到字符串内容,将字符串内容与消息体内的encrypt_chat_msg,使用sdk的接口DecryptData,得到真正的明文消息。

Q:如何生成秘钥对?
A:建议使用openssl 来生成rsa pkcs1 2048格式的公私钥。例如可使用:openssl genrsa -out private.pem 2048 来生成私钥,并使用openssl rsa -in private.pem -pubout -out public.pem从私钥来产生公钥。

Q:so放置在什么地方?
A:建议将so放置在系统路径:LD_LIBRARY_PATH指定的路径内,或者将so所在的目录加入到LD_LIBRARY_PATH的路径范围内。

Q:消息体内的from tolist roomid是什么含义?
A:如果是单聊:from表示消息发送方、tolist内只有一个消息接收方,roomid为空;如果是群聊:from表示消息发送方,tolist为群内其他成员id,roomid非空;无论消息的发送方还是接收方,如果是本企业成员,则为userid,否则为exteranalopenid

Q:消息何时进行存储?
A:如果是金融版企业成员,则所有会话均会存储,包括发送给本企业或者外部企业/微信的会话消息;如果是非本企业的外部用户与本企业成员会话,则只有外部用户同意了当前会话的存储,才会进行存储(不同意存储也可以进行会话)。外部用户的同意,以会话为粒度(单聊或群聊)。

Q:如果群聊内有多个金融版企业,消息如何存储?
A:如果外部用户同时与多个金融版企业成员所在的群聊进行会话,那么外部用户会收到不同金融版企业的存储邀请,外部用户同意了哪个金融版企业,会话消息才存储到哪个金融版企业。

Q:如何处理sdk接口调用失败?
A:如果出现拉取会话记录、媒体数据失败的情况,建议进行相同参数下一定次数的请求重试。

Q:媒体消息的格式分别是什么?
A:图片是jpg格式、语音是amr格式、视频是mp4格式、文件格式类型包括在消息体内,表情分为动图与静态图,在消息体内定义。

Q:提供什么版本的sdk?
A:目前提供c版本的so以及java版本的so。Java版本使用jni的方式来进行调用。

Q:为什么发出某些表情得到的是文本消息?
A:对于系统内置的表情,是以文本消息的形式发送的,存储的也是文本消息

Q:媒体消息下载也有时间限制吗?
A:是的,类似会话记录,也只能拉取3天内的媒体消息内容

Q:支持的消息类型是否覆盖了所有的消息类型?
A:目前提供了常用的10+类消息类型的导出,后续如果有新消息类型的产生,也会及时的进行新消息类型的导出。对于目前不识别的消息类型,统一使用:【未知消息类型】的文本消息类型来表示。

Q:是否可以重复拉取消息?
A:目前是可以的,支持重入,相同的seq与limit可以多次拉取,但是有频率限制控制。如果过快的拉取,可能会返回失败。

Q:sdk是什么环境的?
A:sdk支持linux跟windows环境。

Q:会话记录消息格式是什么?
A:通过sdk接口拉取的会话记录为json格式,使用私钥解密后调用sdk接口获取到的消息明文也是json格式。

Q:何时开始存储消息?
A:管理端上传秘钥进行开通金融版功能后,企业成员的客户端会被强制要求同意使用金融版。同意使用的企业成员,发出的消息会开始被进行存储。

Q:为什么拉取到的媒体数据不完整?
A:请确认下同一个媒体文件,是否是追加写。如果每次覆盖,则得到的文件是最后一个分片的内容。

Q:返回非0错误码如何处理?
A:无论对于拉取会话记录,还是拉取媒体消息。如果返回码是10001-10003的错误码,建议原参数重试。

Q:错误码列表如何查看?
A:在SDK的头文件内,有错误码列表以及错误码含义解释。

Q:为什么会返回10001错误?
A:10001是网络错误,请校验下是否使用代理访问;是否放开了80 443端口。

Q:如何表明已经拉取完会话数据?
A:通过GetChatData接口拉取的会话数据,若返回的json结构中,chatdata为空,则表明已拉取完成会话数据。

Q:JAVA版本的sdk报错UnsatisfiedLinkError?
A:请检查是否修改了sdk的包名。

Q:SDK返回access_token missing?
A:请检查初始化接口中corpid/secret是否填写正确;请检查是否每次都进行了sdk的初始化与销毁,不必每次进行sdk的初始化与销毁。

© 1998 - 2021 Tencent Inc. All Rights Reserved