WeWorkFinanceSdk_C.h 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. // All Rights Reserved.
  2. // *File : WeWorkFinanceSdk_C.h
  3. // @Brief:拉取企业聊天记录与媒体消息sdk头文件
  4. #pragma once
  5. //返回码 错误说明
  6. //10000 参数错误,请求参数错误
  7. //10001 网络错误,网络请求错误
  8. //10002 数据解析失败
  9. //10003 系统失败
  10. //10004 密钥错误导致加密失败
  11. //10005 fileid错误
  12. //10006 解密失败
  13. //10007 找不到消息加密版本的私钥,需要重新传入私钥对
  14. //10008 解析encrypt_key出错
  15. //10009 ip非法
  16. //10010 数据过期
  17. //10011 证书错误
  18. typedef struct WeWorkFinanceSdk_t WeWorkFinanceSdk_t;
  19. // 数据
  20. typedef struct Slice_t {
  21. char* buf;
  22. int len;
  23. } Slice_t;
  24. typedef struct MediaData {
  25. char* outindexbuf;
  26. int out_len;
  27. char* data;
  28. int data_len;
  29. int is_finish;
  30. } MediaData_t;
  31. #ifdef __cplusplus
  32. extern "C" {
  33. #endif
  34. WeWorkFinanceSdk_t* NewSdk();
  35. /**
  36. * 初始化函数
  37. * Return值=0表示该API调用成功
  38. *
  39. * @param [in] sdk NewSdk返回的sdk指针
  40. * @param [in] corpid 调用企业的企业id,例如:wwd08c8exxxx5ab44d,可以在企业微信管理端--我的企业--企业信息查看
  41. * @param [in] secret 聊天内容存档的Secret,可以在企业微信管理端--管理工具--聊天内容存档查看
  42. *
  43. *
  44. * @return 返回是否初始化成功
  45. * 0 - 成功
  46. * !=0 - 失败
  47. */
  48. int Init(WeWorkFinanceSdk_t* sdk, const char* corpid, const char* secret);
  49. /**
  50. * 拉取聊天记录函数
  51. * Return值=0表示该API调用成功
  52. *
  53. *
  54. * @param [in] sdk NewSdk返回的sdk指针
  55. * @param [in] seq 从指定的seq开始拉取消息,注意的是返回的消息从seq+1开始返回,seq为之前接口返回的最大seq值。首次使用请使用seq:0
  56. * @param [in] limit 一次拉取的消息条数,最大值1000条,超过1000条会返回错误
  57. * @param [in] proxy 使用代理的请求,需要传入代理的链接。如:socks5://10.0.0.1:8081 或者 http://10.0.0.1:8081
  58. * @param [in] passwd 代理账号密码,需要传入代理的账号密码。如 user_name:passwd_123
  59. * @param [in] timeout 超时时间,单位秒
  60. * @param [out] chatDatas 返回本次拉取消息的数据,slice结构体.内容包括errcode/errmsg,以及每条消息内容。示例如下:
  61. {"errcode":0,"errmsg":"ok","chatdata":[{"seq":196,"msgid":"CAQQ2fbb4QUY0On2rYSAgAMgip/yzgs=","publickey_ver":3,"encrypt_random_key":"ftJ+uz3n/z1DsxlkwxNgE+mL38H42/KCvN8T60gbbtPD+Rta1hKTuQPzUzO6Hzne97MgKs7FfdDxDck/v8cDT6gUVjA2tZ/M7euSD0L66opJ/IUeBtpAtvgVSD5qhlaQjvfKJc/zPMGNK2xCLFYqwmQBZXbNT7uA69Fflm512nZKW/piK2RKdYJhRyvQnA1ISxK097sp9WlEgDg250fM5tgwMjujdzr7ehK6gtVBUFldNSJS7ndtIf6aSBfaLktZgwHZ57ONewWq8GJe7WwQf1hwcDbCh7YMG8nsweEwhDfUz+u8rz9an+0lgrYMZFRHnmzjgmLwrR7B/32Qxqd79A==","encrypt_chat_msg":"898WSfGMnIeytTsea7Rc0WsOocs0bIAerF6de0v2cFwqo9uOxrW9wYe5rCjCHHH5bDrNvLxBE/xOoFfcwOTYX0HQxTJaH0ES9OHDZ61p8gcbfGdJKnq2UU4tAEgGb8H+Q9n8syRXIjaI3KuVCqGIi4QGHFmxWenPFfjF/vRuPd0EpzUNwmqfUxLBWLpGhv+dLnqiEOBW41Zdc0OO0St6E+JeIeHlRZAR+E13Isv9eS09xNbF0qQXWIyNUi+ucLr5VuZnPGXBrSfvwX8f0QebTwpy1tT2zvQiMM2MBugKH6NuMzzuvEsXeD+6+3VRqL"}]}
  62. *
  63. * @return 返回是否调用成功
  64. * 0 - 成功
  65. * !=0 - 失败
  66. */
  67. int GetChatData(WeWorkFinanceSdk_t* sdk, unsigned long long seq, unsigned int limit, const char *proxy,const char* passwd, int timeout,Slice_t* chatDatas);
  68. /**
  69. * @brief 解析密文.企业微信自有解密内容
  70. * @param [in] encrypt_key, getchatdata返回的encrypt_random_key,使用企业自持对应版本秘钥RSA解密后的内容
  71. * @param [in] encrypt_msg, getchatdata返回的encrypt_chat_msg
  72. * @param [out] msg, 解密的消息明文
  73. * @return 返回是否调用成功
  74. * 0 - 成功
  75. * !=0 - 失败
  76. */
  77. int DecryptData(const char* encrypt_key, const char* encrypt_msg, Slice_t* msg);
  78. /**
  79. * 拉取媒体消息函数
  80. * Return值=0表示该API调用成功
  81. *
  82. *
  83. * @param [in] sdk NewSdk返回的sdk指针
  84. * @param [in] sdkFileid 从GetChatData返回的聊天消息中,媒体消息包括的sdkfileid
  85. * @param [in] proxy 使用代理的请求,需要传入代理的链接。如:socks5://10.0.0.1:8081 或者 http://10.0.0.1:8081
  86. * @param [in] passwd 代理账号密码,需要传入代理的账号密码。如 user_name:passwd_123
  87. * @param [in] indexbuf 媒体消息分片拉取,需要填入每次拉取的索引信息。首次不需要填写,默认拉取512k,后续每次调用只需要将上次调用返回的outindexbuf填入即可。
  88. * @param [in] timeout 超时时间,单位秒
  89. * @param [out] media_data 返回本次拉取的媒体数据.MediaData结构体.内容包括data(数据内容)/outindexbuf(下次索引)/is_finish(拉取完成标记)
  90. *
  91. * @return 返回是否调用成功
  92. * 0 - 成功
  93. * !=0 - 失败
  94. */
  95. int GetMediaData(WeWorkFinanceSdk_t* sdk, const char* indexbuf,
  96. const char* sdkFileid,const char *proxy,const char* passwd, int timeout, MediaData_t* media_data);
  97. /**
  98. * @brief 释放sdk,和NewSdk成对使用
  99. * @return
  100. */
  101. void DestroySdk(WeWorkFinanceSdk_t* sdk);
  102. //--------------下面接口为了其他语言例如python等调用c接口,酌情使用--------------
  103. Slice_t* NewSlice();
  104. /**
  105. * @brief 释放slice,和NewSlice成对使用
  106. * @return
  107. */
  108. void FreeSlice(Slice_t* slice);
  109. /**
  110. * @brief 为其他语言提供读取接口
  111. * @return 返回buf指针
  112. * !=NULL - 成功
  113. * NULL - 失败
  114. */
  115. char* GetContentFromSlice(Slice_t* slice);
  116. int GetSliceLen(Slice_t* slice);
  117. // 媒体记录相关工具
  118. MediaData_t* NewMediaData();
  119. void FreeMediaData(MediaData_t* media_data);
  120. char* GetOutIndexBuf(MediaData_t* media_data);
  121. char* GetData(MediaData_t* media_data);
  122. int GetIndexLen(MediaData_t* media_data);
  123. int GetDataLen(MediaData_t* media_data);
  124. int IsMediaDataFinish(MediaData_t* media_data);
  125. #ifdef __cplusplus
  126. }
  127. #endif