feta: 增加获取媒体内容
This commit is contained in:
parent
e16af1ec19
commit
1970aed910
79
README.md
79
README.md
@ -1,2 +1,79 @@
|
||||
# wxwork_finance_sdk_wrapper
|
||||
企业微信获取会话内容 PHP 扩展
|
||||
|
||||
企业微信-获取会话内容PHP扩展
|
||||
|
||||
|
||||
## 依赖
|
||||
企业微信提供的sdk;
|
||||
|
||||
PHP VERSION >= 7.0
|
||||
|
||||
## 安装步骤及要求
|
||||
```
|
||||
$INSATLL_PATH_PATH/bin/phpize
|
||||
|
||||
./configure --with-php-config=$INSTALL_PHP_PATH/php-config --with-wxwork_finance_sdk=$WXWORK_FINANCE_C_SDK_PATH
|
||||
make && make install
|
||||
```
|
||||
php.ini 增加 extension=wxwork_finance_sdk.so
|
||||
|
||||
## API
|
||||
```php
|
||||
WxworkFinanceSdkExcption::__construct();
|
||||
```
|
||||
|
||||
```php
|
||||
WxworkFinanceSdk::__construct(string $corpId, string $secret, array $options);
|
||||
string $corpId 企业号
|
||||
|
||||
string $secret 秘钥
|
||||
|
||||
array $options = [ // 可选参数
|
||||
'proxy_host' => string,
|
||||
'proxy_password' => string,
|
||||
'timeout' => 10, // 默认超时时间为10s
|
||||
]
|
||||
```
|
||||
|
||||
```php
|
||||
string WxworkFinanceSdk::getChatData(int $seq, int $limit);
|
||||
* 拉取聊天数据
|
||||
$seq 起始位置
|
||||
$limit 获取条数
|
||||
```
|
||||
|
||||
```php
|
||||
array WxworkFinanceSdk::getMediaData(string $fileId, string $indexBuf = '')
|
||||
* 拉取媒体消息
|
||||
$filedId 从GetChatData返回的聊天消息中,媒体消息包括的sdkfileid
|
||||
$indexBuf 下一次拉取记录
|
||||
|
||||
返回结构:
|
||||
[
|
||||
'data' => '媒体内容',
|
||||
'nextIndex' => '下一次拉取记录',
|
||||
'isFininshed' => bool // true 数据已全部拉取完毕
|
||||
]
|
||||
|
||||
```
|
||||
|
||||
## 示例
|
||||
|
||||
```php
|
||||
$sdk = new WxworkFinanceSdk("wwd08coe7d775abaaa", "zJ6k0naVVQ--gt9PUSSEvs03zW_nlDVmjAkPOTAfrew", [
|
||||
"proxy_host" => "hello", // 代理地址
|
||||
"proxy_password" => "world", // 代理密码
|
||||
"timeout" => 100, // 超时时间
|
||||
]);
|
||||
|
||||
var_dump(json_decode($sdk->getChatData(0, 100)));
|
||||
/**
|
||||
return [
|
||||
'data' => string // 返回的数据,
|
||||
'nextIndex' => string // 下一个指针,
|
||||
'isFinished' => bool // 是否继续获取 下一条数据标识
|
||||
];
|
||||
*/
|
||||
var_dump($sdk->getMediaData("dddd"));
|
||||
```
|
||||
|
||||
|
||||
@ -48,41 +48,38 @@ static WeWorkFinanceSdk_t *sdk;
|
||||
*/
|
||||
PHP_METHOD(WxworkFinanceSdk, __construct)
|
||||
{
|
||||
zend_string *corp_id, *secret = NULL;
|
||||
char *corp_id, *secret;
|
||||
size_t corp_id_len, secret_len;
|
||||
zval *option_zval = NULL;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "SS|a", &corp_id, &secret, &option_zval) == FAILURE) {
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss|a", &corp_id, &corp_id_len, &secret, &secret_len, &option_zval) == FAILURE) {
|
||||
zend_error(E_ERROR, "param error");
|
||||
return;
|
||||
}
|
||||
|
||||
if (ZSTR_LEN(corp_id) == 0 || ZSTR_LEN(secret) == 0) {
|
||||
if (corp_id_len == 0 || secret_len == 0) {
|
||||
zend_throw_exception(spl_ce_InvalidArgumentException, "corpId and secret cannot be bull", 0);
|
||||
return;
|
||||
}
|
||||
|
||||
TRACE("corp_id value=%s secret = %s", ZSTR_VAL(corp_id), ZSTR_VAL(secret));
|
||||
|
||||
int ret = Init(sdk, ZSTR_VAL(corp_id), ZSTR_VAL(secret));
|
||||
int ret = Init(sdk, corp_id, secret);
|
||||
|
||||
if (ret != 0) {
|
||||
zend_throw_exception(wxwork_finance_sdk_exception_ce, "Call WeWorkFinanceSdk_t Init error", ret);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
zval *this = getThis();
|
||||
zend_class_entry *ce = Z_OBJCE_P(this);
|
||||
|
||||
zend_declare_property_string(ce, "_corpId", sizeof("_corpId") - 1, ZSTR_VAL(corp_id), ZEND_ACC_PRIVATE);
|
||||
zend_declare_property_string(ce, "_secret", sizeof("_secret") - 1, ZSTR_VAL(secret), ZEND_ACC_PRIVATE);
|
||||
zend_update_property_string(ce, this, "_corpId", sizeof("_corpId") - 1, corp_id);
|
||||
zend_update_property_string(ce, this, "_secret", sizeof("_secret") - 1, secret);
|
||||
|
||||
if (option_zval) {
|
||||
zval *proxy_host_zval = zend_hash_find(Z_ARR_P(option_zval), zend_string_init("proxy_host", sizeof("proxy_host") - 1, 0));
|
||||
|
||||
if (proxy_host_zval != NULL) {
|
||||
zval *proxy_password_zval = zend_hash_find(Z_ARR_P(option_zval), zend_string_init("proxy_password", sizeof("proxy_password") - 1, 0));
|
||||
TRACE("option proxy_host=%s proxy_password=%s", Z_STRVAL_P(proxy_host_zval), Z_STRVAL_P(proxy_password_zval));
|
||||
zval_ptr_dtor(proxy_host_zval);
|
||||
|
||||
zend_update_property_string(ce, this, "proxy_host", sizeof("proxy_host") - 1, Z_STRVAL_P(proxy_host_zval));
|
||||
if (proxy_password_zval != NULL) {
|
||||
@ -90,10 +87,19 @@ PHP_METHOD(WxworkFinanceSdk, __construct)
|
||||
zval_ptr_dtor(proxy_password_zval);
|
||||
}
|
||||
|
||||
zval_ptr_dtor(proxy_host_zval);
|
||||
}
|
||||
|
||||
zval *timeout_zval = zend_hash_find(Z_ARR_P(option_zval), zend_string_init("timeout", sizeof("timeout") - 1, 0));
|
||||
if (timeout_zval != NULL) {
|
||||
zend_update_property_long(ce, this, "_timeout", sizeof("_timeout") - 1, zval_get_long(timeout_zval));
|
||||
zval_ptr_dtor(timeout_zval);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
{{{ proto public WxworkFinanceSdk::getChatData(int $seq, int $limit)
|
||||
*/
|
||||
|
||||
PHP_METHOD(WxworkFinanceSdk, getChatData)
|
||||
{
|
||||
@ -103,6 +109,13 @@ PHP_METHOD(WxworkFinanceSdk, getChatData)
|
||||
return;
|
||||
}
|
||||
|
||||
Slice_t *chat_data = NewSlice();
|
||||
|
||||
if (NULL == chat_data) {
|
||||
zend_error(E_ERROR, "There is not enough memory!");
|
||||
return;
|
||||
}
|
||||
|
||||
zval *this = getThis();
|
||||
zend_class_entry *ce = Z_OBJCE_P(this);
|
||||
|
||||
@ -110,30 +123,70 @@ PHP_METHOD(WxworkFinanceSdk, getChatData)
|
||||
zval *proxy_password_zval = zend_read_property(ce, this, "_proxy_password", sizeof("_proxy_password") - 1, 0, NULL);
|
||||
zval *timeout_zval = zend_read_property(ce, this, "_timeout", sizeof("_timeout") - 1, 0, NULL);
|
||||
|
||||
convert_to_long(timeout_zval);
|
||||
|
||||
Slice_t *chatDatas = NewSlice();
|
||||
|
||||
int ret = GetChatData(sdk, (int)seq, (int)limit, Z_STRVAL_P(proxy_host_zval), Z_STRVAL_P(proxy_password_zval), Z_LVAL_P(timeout_zval), chatDatas);
|
||||
if (ret != 0) {
|
||||
int ret = GetChatData(sdk, (int)seq, (int)limit, Z_STRVAL_P(proxy_host_zval), Z_STRVAL_P(proxy_password_zval), zval_get_long(timeout_zval), chat_data);
|
||||
if (0 != ret) {
|
||||
zend_throw_exception(wxwork_finance_sdk_exception_ce, "Call WeWorkFinanceSdk_t GetChatData error", ret);
|
||||
return;
|
||||
}
|
||||
|
||||
zend_string *s = zend_string_init(chatDatas->buf, chatDatas->len, 0);
|
||||
zend_string *s = zend_string_init(GetContentFromSlice(chat_data), GetSliceLen(chat_data), 0);
|
||||
RETURN_STR(s);
|
||||
|
||||
zend_string_release(s);
|
||||
|
||||
zval_ptr_dtor(proxy_host_zval);
|
||||
zval_ptr_dtor(proxy_password_zval);
|
||||
zval_ptr_dtor(timeout_zval);
|
||||
FreeSlice(chatDatas);
|
||||
FreeSlice(chat_data);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
||||
/**
|
||||
{{{ proto WxworkFinanceSdk->getMediaData(string $filedId, string $index='')
|
||||
*/
|
||||
PHP_METHOD(WxworkFinanceSdk, getMediaData) {
|
||||
char *sdk_filedid, *index_buf;
|
||||
int sdk_filedid_len, index_buf_len;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|s", &sdk_filedid, &sdk_filedid_len, &index_buf, &index_buf_len) == FAILURE) {
|
||||
zend_error(E_ERROR, "param error");
|
||||
return;
|
||||
}
|
||||
|
||||
MediaData_t *media_data = NewMediaData();
|
||||
if (NULL == media_data) {
|
||||
zend_error(E_ERROR, "There is not enough memory!");
|
||||
return;
|
||||
}
|
||||
|
||||
zval *this = getThis();
|
||||
zend_class_entry *ce = Z_OBJCE_P(this);
|
||||
|
||||
zval *proxy_host_zval = zend_read_property(ce, this, "_proxy_host", sizeof("_proxy_host") - 1, 0, NULL);
|
||||
zval *proxy_password_zval = zend_read_property(ce, this, "_proxy_password", sizeof("_proxy_password") - 1, 0, NULL);
|
||||
zval *timeout_zval = zend_read_property(ce, this, "_timeout", sizeof("_timeout") - 1, 0, NULL);
|
||||
|
||||
int ret = GetMediaData(sdk, index_buf, sdk_filedid, Z_STRVAL_P(proxy_host_zval), Z_STRVAL_P(proxy_password_zval), zval_get_long(timeout_zval), media_data);
|
||||
|
||||
if (0 != ret) {
|
||||
zend_throw_exception(wxwork_finance_sdk_exception_ce, "Call WeWorkFinanceSdk_t GetMediaData error", ret);
|
||||
return;
|
||||
}
|
||||
|
||||
array_init(return_value);
|
||||
add_assoc_string(return_value, "data", GetData(media_data));
|
||||
add_assoc_string(return_value, "nextIndex", GetOutIndexBuf(media_data));
|
||||
add_assoc_bool(return_value, "isFinished", IsMediaDataFinish(media_data) == 1 ? 1 : 0);
|
||||
|
||||
FreeMediaData(media_data);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
||||
static const zend_function_entry wxwork_finance_sdk_class_methods[] = {
|
||||
PHP_ME(WxworkFinanceSdk, __construct, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_CTOR)
|
||||
PHP_ME(WxworkFinanceSdk, getChatData, NULL, ZEND_ACC_PUBLIC)
|
||||
PHP_ME(WxworkFinanceSdk, getMediaData, NULL, ZEND_ACC_PUBLIC)
|
||||
PHP_FE_END
|
||||
};
|
||||
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
echo "version=", WxworkFinanceSdk::VERSION, PHP_EOL;
|
||||
|
||||
try {
|
||||
$obj = new WxworkFinanceSdk("d", "d", [
|
||||
$obj = new WxworkFinanceSdk("wwd08coe7d775abaaa", "zJ6k0naVVQ--gt9PUSSEvs03zW_nlDVmjAkPOTAfrew", [
|
||||
"proxy_host" => "hello",
|
||||
"proxy_password" => "world",
|
||||
"timeout" => -2,
|
||||
@ -11,6 +11,9 @@ $obj = new WxworkFinanceSdk("d", "d", [
|
||||
var_dump($obj);
|
||||
|
||||
var_dump(json_decode($obj->getChatData(0, 100)));
|
||||
var_dump($obj->getMediaData("dddd"));
|
||||
|
||||
|
||||
}catch(\Exception $e) {
|
||||
var_dump($e->getMessage(), $e->getCode());
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user