Files
cunkebao_v3/Server/application/cunkebao/controller/plan/GetAddFriendPlanDetailV1Controller.php
2025-08-12 15:02:00 +08:00

191 lines
5.9 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace app\cunkebao\controller\plan;
use app\common\model\Device as DeviceModel;
use app\common\model\DeviceWechatLogin as DeviceWechatLoginModel;
use library\ResponseHelper;
use think\Controller;
use think\Db;
/**
* 获取获客计划详情控制器
*/
class GetAddFriendPlanDetailV1Controller extends Controller
{
/**
* 生成签名
*
* @param array $params 参数数组
* @param string $apiKey API密钥
* @return string
*/
private function generateSignature($params, $apiKey)
{
// 1. 移除sign和apiKey
unset($params['sign'], $params['apiKey']);
// 2. 移除空值
$params = array_filter($params, function($value) {
return !is_null($value) && $value !== '';
});
// 3. 参数按键名升序排序
ksort($params);
// 4. 直接拼接参数值
$stringToSign = implode('', array_values($params));
// 5. 第一次MD5加密
$firstMd5 = md5($stringToSign);
// 6. 拼接apiKey并第二次MD5加密
return md5($firstMd5 . $apiKey);
}
/**
* 生成测试URL
*
* @param string $apiKey API密钥
* @return array
*/
public function testUrl($apiKey)
{
try {
if (empty($apiKey)) {
return [];
}
// 构建测试参数
$testParams = [
'name' => '测试客户',
'phone' => '18888888888',
'apiKey' => $apiKey,
'timestamp' => time()
];
// 生成签名
$sign = $this->generateSignature($testParams, $apiKey);
$testParams['sign'] = $sign;
// 构建签名过程说明
$signParams = $testParams;
unset($signParams['sign'], $signParams['apiKey']);
ksort($signParams);
$signStr = implode('', array_values($signParams));
// 构建完整URL参数不对中文进行编码
$urlParams = [];
foreach ($testParams as $key => $value) {
$urlParams[] = $key . '=' . $value;
}
$fullUrl = implode('&', $urlParams);
return [
'apiKey' => $apiKey,
'originalString' => $signStr,
'sign' => $sign,
'fullUrl' => $fullUrl
];
} catch (\Exception $e) {
return [];
}
}
/**
* 获取计划详情
*
* @return \think\response\Json
*/
public function index()
{
try {
$planId = $this->request->param('planId');
if (empty($planId)) {
return ResponseHelper::error('计划ID不能为空', 400);
}
// 查询计划详情
$plan = Db::name('customer_acquisition_task')
->where('id', $planId)
->find();
if (!$plan) {
return ResponseHelper::error('计划不存在', 404);
}
// 解析JSON字段
$sceneConf = json_decode($plan['sceneConf'], true) ?: [];
$reqConf = json_decode($plan['reqConf'], true) ?: [];
$reqConf['deveiceGroups'] = $reqConf['device'];
$msgConf = json_decode($plan['msgConf'], true) ?: [];
$tagConf = json_decode($plan['tagConf'], true) ?: [];
if(!empty($sceneConf['wechatGroups'])){
$groupList = Db::name('wechat_group')->alias('wg')
->join('wechat_account wa', 'wa.wechatId = wg.ownerWechatId')
->where('wg.id', 'in', $sceneConf['wechatGroups'])
->order('wg.id', 'desc')
->field('wg.id,wg.name,wg.chatroomId,wg.ownerWechatId,wa.nickName as ownerNickName,wa.avatar as ownerAvatar,wa.alias as ownerAlias,wg.avatar')
->select();
$sceneConf['wechatGroupsOptions'] = $groupList;
}else{
$sceneConf['wechatGroupsOptions'] = [];
}
if (!empty($reqConf['deveiceGroups'])){
$deveiceGroupsOptions = DeviceModel::alias('d')
->field([
'd.id', 'd.imei', 'd.memo', 'd.alive',
'l.wechatId',
'a.nickname', 'a.alias', '0 totalFriend'
])
->leftJoin('device_wechat_login l', 'd.id = l.deviceId and l.alive =' . DeviceWechatLoginModel::ALIVE_WECHAT_ACTIVE . ' and l.companyId = d.companyId')
->leftJoin('wechat_account a', 'l.wechatId = a.wechatId')
->order('d.id desc')
->whereIn('d.id',$reqConf['deveiceGroups'])
->select();
$reqConf['deveiceGroupsOptions'] = $deveiceGroupsOptions;
}else{
$reqConf['deveiceGroupsOptions'] = [];
}
unset(
$reqConf['device'],
$sceneConf['groupSelected'],
);
// 合并数据
$newData['messagePlans'] = $msgConf;
$newData = array_merge($newData, $sceneConf, $reqConf, $tagConf, $plan);
// 移除不需要的字段
unset(
$newData['sceneConf'],
$newData['reqConf'],
$newData['msgConf'],
$newData['tagConf'],
$newData['userInfo'],
$newData['createTime'],
$newData['updateTime'],
$newData['deleteTime']
);
// 生成测试URL
$newData['textUrl'] = $this->testUrl($newData['apiKey']);
return ResponseHelper::success($newData, '获取计划详情成功');
} catch (\Exception $e) {
return ResponseHelper::error('系统错误: ' . $e->getMessage(), 500);
}
}
}