PHP实现企业微信会话内容存档功能

发布时间:2022-07-21 08:25:11 浏览量:3586 标签: PHP 企业微信会话 内容存档

一、前言

企业微信会话内容存档介绍:为保障客户服务质量、提高内部协作效率和监管合规等原因,企业微信提供会话内容存档功能。企业可以统一设置存档的员工范围,并通过API获取开启存档员工的工作沟通内容,满足企业的外部监管合规和内部管理需求。(官方内容,复制粘贴过来的)


官方没有PHP SDK,一直都没有,估计是不可能去开发了。目前PHP开发者都是通过PHP扩展方面去实现功能,这里主要介绍一下 柴神 csdn作者,内容对本次开发起到了关键性指导。


二、准备内容


1、企业微信的企业id,例如:wwd08c8eaaaa5ab44d,可以在企业微信管理端--我的企业--企业信息查看

2、Secret,例如:pmJKLSD238SKJL3JKLS12XzQmnau-KwLVLEg2342jslkWWJxv9f_k,聊天内容存档的Secret,可以在企业微信管理端--管理工具--聊天内容存档查看


以上两项参数仅供演示,均为虚假数据。

3、服务器IP地址,需要在企业微信管理后台设置白名单。例如:39.6.12.3

4、公钥、私钥。可通过在线工具直接获取,后续会详细介绍

5、SDK下载,下载地址:https://developer.work.weixin.qq.com/document/path/91774,下载最新版本的

扩展包下载,下载地址:https://github.com/pangdahua/php7-wxwork-finance-sdk,将文件克隆或者zip下载到电脑中

6、宝塔面板必须是 编译安装的PHP


三、公钥、私钥获取

在线工具地址:http://web.chacuo.net/netrsakeypair,选择2048位,官方要求的

encrypt_random_key是使用企业在管理端填写的公钥(使用模值为2048bit的秘钥),采用RSA加密算法进行加密处理后base64 encode的内容,加密内容为企业微信产生。RSA使用PKCS1。

如下图,直接将生成的内容保存到记事本中!!!!

image.png

四、部署扩展

1、将刚刚下载的两个压缩包解压,选择企业微信提供的SDK,进入C_sdk目录,将GIthub下载的文件包解压,将全部文件拷贝到C_sdk目录中。如下图:

image.png

将C_sdk文件夹压缩,并上传到服务器,宝塔面板示例位置/www/wwwroot/C_sdk,能找到路径就可以。

2、编译安装

进入服务器,命令行模式,查找phpize位置。可以使用命令:

find / -name phpize

phpize示例位置:/www/server/php/70/bin/phpize,执行如下命令:

./configure --with-php-config=/www/server/php/70/bin/phpize/php-config --with-wxwork-finance-sdk=./

注意替换PHPize的路径

进行代码编译,命令:

make
make test
make install

此处可能涉及到禁用函数问题,如果遇到请解除禁用,PHP8版本arginfo不再是可选。

在对应版本的PHP中,找到php.ini文件,编辑在尾部 增加 extension=wxwork_finance_sdk.so,保存。

重启php-fpm、Nginx,不然扩展不生效。

检验扩展,使用php -m命令查看,出现wxwork_finance_sdk,表示安装成功。


五、代码

<?php

try {
    $obj = new WxworkFinanceSdk("wwee78***********", "pmd8************");
    // 私钥地址
    $privateKey = '-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDD6oBGld+kI5a4
lc4gF5T+ApjinEHkQAPy1x6tRBXA6FQ5gC9HDeKXlKkhI9Y8SfxNTPEtjnkLRWRQ
tcXB6iiwej0aczNnpbUbfoTvv3etMEktQACG9nFeikX9p6qhloueXrcn2LEx7jM0
yatInnTqhocbaLt559rzz09HIaGy6W2ZjqwWPjwOuj/QqHsAwLSOWq6ePl18AaNC
qN9+6eXYjpCkqZ424QpbLtOZJdhsTz8QTS43JhO5OPZMp5C+ZY1h9i1NEMKHnJWo
jthm7/sRalwKS4OZbdgU9yq8ogaBeWHnR0GJyVKXjkoHXJhgyPCXzc+yHJ/slFpt
9ru3Sxg1AgMBA***************************************************
*********************            演示数据                 *******
************************************
-----END PRIVATE KEY-----';

    $chats = json_decode($obj->getChatData(0, 20), true);
    foreach ($chats['chatdata'] as $val) {
        $message = msg($val['encrypt_random_key'], $privateKey, $obj, $val['encrypt_chat_msg']);
        var_dump($message);
    }
} catch (\WxworkFinanceSdkException $e) {
    var_dump("请求异常");
    var_dump($e->getCode());
    var_dump($e->getMessage());
}

/**
 *
 * @param $encrypt_random_key
 * @param $privateKey
 * @param $obj
 * @param $encrypt_chat_msg
 * @return void
 * @author shenlin
 * @time 2022/7/21 0021 9:04
 * @phone 13614048679
 */
function msg($encrypt_random_key, $privateKey, $obj, $encrypt_chat_msg)
{
    $decryptRandKey = null;
    openssl_private_decrypt(base64_decode($encrypt_random_key), $decryptRandKey, $privateKey, OPENSSL_PKCS1_PADDING);
    $t = $obj->decryptData($decryptRandKey, $encrypt_chat_msg);
    return json_decode($t, true);
}

image.png

参考示例


六、注意事项

1、企业微信后台会话存档设置公钥的时候有版本号,请注意对应的消息私钥版本需要使用对应的公钥版本去解密,版本对不上无法解密。msg方法中可能出现报错情况,建议使用try catch规避,或者在消息解密是判断版本号。


2、必须使用编辑安装的PHP安装扩展。如果不是可以新编辑安装一个版本哈


3、消息拉取,请仔细查看官方文档内容。解密后的内容涉及到消息类型。请注意。


评论
登录后才可以进行评论哦! QQ登录
验证码
评论内容