想要实现企微会话存档的功能,但企微官方提供的SDK,只有C++和JAVA的版本。要使用PHP实现该功能,就要借助民间大佬的智慧。
PHP版本的SDK
- github上的大佬 @majiameng, 实现了php会话存档SDK,下面是github地址:
https://github.com/majiameng/wework-finance-sdk-php
一、使用要求:
- 需要用到php扩展 ext-wxwork_finance_sdk 或者 ext-ffi,二选一即可。
我这里使用的是 wxwork_finance_sdk扩展。
1.1 安装php7-wxwork-finance-sdk
扩展地址:https://github.com/pangdahua/php7-wxwork-finance-sdk
C版本SDK地址:https://wwcdn.weixin.qq.com/node/wework/images/sdk_20200401.zip
# 1.将php的SDK下载到服务器
git clone https://github.com/pangdahua/php7-wxwork-finance-sdk.git
# 2.下载C版本的SDK
wget https://wwcdn.weixin.qq.com/node/wework/images/sdk_20200401.zip
# 3.使用unzip解压zip包
unzip sdk_20200401.zip
# 4.进入 php7-wxwork-finance-sdk目录
cd php7-wxwork-finance-sdk
# 5.使用phpize进行扩展编译
phpize # 宝塔的路径 /www/server/php/74/bin/phpize
# 6.编译配置
# /www/server/php/74/bin/php-config 为当前使用的php
# /www/sdk_20200401/C_sdk 为上面下载的C版本的sdk路径
./configure --with-php-config=/www/server/php/74/bin/php-config --with-wxwork-finance-sdk=/www/sdk_20200401/C_sdk
# 执行编译安装
make && make install
- 最终生成扩展文件路径
/www/server/php/74/lib/php/extensions/no-debug-non-zts-20190902/wxwork_finance_sdk.so
1.2 将扩展加入php配置中
[wxwork_finance_sdk]
extension=/www/server/php/74/lib/php/extensions/no-debug-non-zts-20190902/wxwork_finance_sdk.so
- 保留后,重启php。
二、在代码中使用,使用框架:tp6
2.1 composer安装sdk代码
composer require tinymeng/wework-finance-sdk
2.2 在代码中实现
<?php
namespace app\controller;
use app\BaseController;
use think\Request;
use tinymeng\WeWorkFinanceSDK\Exception\FinanceSDKException;
use tinymeng\WeWorkFinanceSDK\WxFinanceSDK;
class Session extends BaseController
{
/**
* 获取聊天对话记录(会话存档)
* @param Request $request
* @return void
*/
public function history(Request $request)
{
// 企业配置
$corpConfig = [
'corpid' => '企业ID',
'secret' => '应用密钥',
'private_keys' => [
1 => '-----BEGIN PRIVATE KEY-----
-----END PRIVATE KEY-----',
],
/**
* includePath(使用php-ffi扩展时)
* 可选 :默认使用组件内SDK(默认SDK只支持Liunx),如果想使用其他版本SDK,请填写对应SDK路径
* 官网下载SDK https://developer.work.weixin.qq.com/document/path/91774
*/
'includePath' => '',
];
// 包配置
$srcConfig = [
'default' => 'php-ext',// 两种方式的切换: php-ext 或 php-ffi
];
$seq = $request->param('seq', 1);
$limit = $request->param('limit', 10);
try {
$wxFinanceSDK = WxFinanceSDK::init($corpConfig, $srcConfig);
// 获取会话记录数据(解密)
$list = $wxFinanceSDK->getDecryptChatData($seq, $limit);
foreach ($list as $key => $item) {
if ($wxFinanceSDK->isMedia($item['msgtype'])) {
// 下载媒体资源
$list[$key]['media_path'] = $wxFinanceSDK->getDownloadMediaData($item[$item['msgtype']], $item['msgtype']);
}
}
var_dump($list);
} catch (FinanceSDKException $exception) {
echo $exception->getMessage();
exit();
}
}
}