2025-05-22 15:50:52 +08:00
|
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
|
|
namespace app\cunkebao\controller\plan;
|
|
|
|
|
|
|
|
|
|
|
|
use think\Controller;
|
|
|
|
|
|
use think\Request;
|
|
|
|
|
|
use EasyWeChat\Factory;
|
|
|
|
|
|
// use EasyWeChat\Kernel\Exceptions\DecryptException;
|
|
|
|
|
|
use EasyWeChat\Kernel\Http\StreamResponse;
|
|
|
|
|
|
use think\Db;
|
|
|
|
|
|
class PosterWeChatMiniProgram extends Controller
|
|
|
|
|
|
{
|
|
|
|
|
|
public function index()
|
|
|
|
|
|
{
|
|
|
|
|
|
return 'Hello, World!';
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const MINI_PROGRAM_CONFIG = [
|
2025-07-10 14:07:11 +08:00
|
|
|
|
'app_id' => 'wx789850448e26c91d',
|
|
|
|
|
|
'secret' => 'd18f75b3a3623cb40da05648b08365a1',
|
2025-05-22 15:50:52 +08:00
|
|
|
|
'response_type' => 'array'
|
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 生成小程序码,存客宝-操盘手调用
|
2025-07-10 17:23:46 +08:00
|
|
|
|
public function generateMiniProgramCodeWithScene($taskId = '') {
|
2025-05-22 15:50:52 +08:00
|
|
|
|
|
2025-07-10 17:23:46 +08:00
|
|
|
|
if(empty($taskId)) {
|
|
|
|
|
|
$taskId = request()->param('id');
|
|
|
|
|
|
}
|
2025-05-22 15:50:52 +08:00
|
|
|
|
|
|
|
|
|
|
$app = Factory::miniProgram(self::MINI_PROGRAM_CONFIG);
|
|
|
|
|
|
|
|
|
|
|
|
// scene参数长度限制为32位
|
|
|
|
|
|
// $scene = 'taskId=' . $taskId;
|
|
|
|
|
|
$scene = 'id=' . $taskId;
|
|
|
|
|
|
|
|
|
|
|
|
// 调用接口生成小程序码
|
|
|
|
|
|
$response = $app->app_code->getUnlimit($scene, [
|
|
|
|
|
|
'page' => 'pages/poster/index', // 必须是已经发布的小程序页面
|
|
|
|
|
|
'width' => 430, // 二维码的宽度,默认430
|
|
|
|
|
|
// 'auto_color' => false, // 自动配置线条颜色
|
|
|
|
|
|
// 'line_color' => ['r' => 0, 'g' => 0, 'b' => 0], // 颜色设置
|
|
|
|
|
|
// 'is_hyaline' => false, // 是否需要透明底色
|
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
|
|
// 保存小程序码到文件
|
|
|
|
|
|
if ($response instanceof StreamResponse) {
|
|
|
|
|
|
// $filename = 'minicode_' . $taskId . '.png';
|
|
|
|
|
|
// $response->saveAs('path/to/codes', $filename);
|
|
|
|
|
|
// return 'path/to/codes/' . $filename;
|
|
|
|
|
|
|
|
|
|
|
|
$img = $response->getBody()->getContents();//获取图片二进制流
|
|
|
|
|
|
$img_base64 = 'data:image/png;base64,' .base64_encode($img);//转化base64
|
|
|
|
|
|
return $img_base64;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// return false;
|
|
|
|
|
|
return null;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// getPhoneNumber
|
|
|
|
|
|
public function getPhoneNumber() {
|
|
|
|
|
|
|
|
|
|
|
|
$taskId = request()->param('id');
|
|
|
|
|
|
$code = request()->param('code');
|
|
|
|
|
|
// code 不能为空
|
|
|
|
|
|
if (!$code) {
|
|
|
|
|
|
return json([
|
|
|
|
|
|
'code' => 400,
|
|
|
|
|
|
'message' => 'code不能为空'
|
|
|
|
|
|
]);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
$task = Db::name('customer_acquisition_task')->where('id', $taskId)->find();
|
|
|
|
|
|
if (!$task) {
|
|
|
|
|
|
return json([
|
|
|
|
|
|
'code' => 400,
|
|
|
|
|
|
'message' => '任务不存在'
|
|
|
|
|
|
]);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
$app = Factory::miniProgram(self::MINI_PROGRAM_CONFIG);
|
|
|
|
|
|
|
|
|
|
|
|
$result = $app->phone_number->getUserPhoneNumber($code);
|
|
|
|
|
|
|
|
|
|
|
|
if ($result['errcode'] == 0 && isset($result['phone_info']['phoneNumber'])) {
|
|
|
|
|
|
|
|
|
|
|
|
// TODO 拿到手机号之后的后续操作:
|
|
|
|
|
|
// 1. 先写入 ck_traffic_pool 表 identifier mobile 都是 用 phone字段的值
|
|
|
|
|
|
$trafficPool = Db::name('traffic_pool')->where('identifier', $result['phone_info']['phoneNumber'])->find();
|
|
|
|
|
|
if (!$trafficPool) {
|
|
|
|
|
|
Db::name('traffic_pool')->insert([
|
|
|
|
|
|
'identifier' => $result['phone_info']['phoneNumber'],
|
|
|
|
|
|
'mobile' => $result['phone_info']['phoneNumber']
|
|
|
|
|
|
]);
|
|
|
|
|
|
}
|
|
|
|
|
|
// 2. 写入 ck_task_customer: 以 task_id ~~identifier~~ phone 为条件,如果存在则忽略,使用类似laravel的firstOrcreate(但我不知道thinkphp5.1里的写法)
|
|
|
|
|
|
// $taskCustomer = Db::name('task_customer')->where('task_id', $taskId)->where('identifier', $result['phone_info']['phoneNumber'])->find();
|
|
|
|
|
|
$taskCustomer = Db::name('task_customer')->where('task_id', $taskId)->where('phone', $result['phone_info']['phoneNumber'])->find();
|
|
|
|
|
|
if (!$taskCustomer) {
|
|
|
|
|
|
Db::name('task_customer')->insert([
|
|
|
|
|
|
'task_id' => $taskId,
|
|
|
|
|
|
// 'identifier' => $result['phone_info']['phoneNumber'],
|
|
|
|
|
|
'phone' => $result['phone_info']['phoneNumber']
|
|
|
|
|
|
]);
|
|
|
|
|
|
}
|
|
|
|
|
|
// return $result['phone_info']['phoneNumber'];
|
|
|
|
|
|
return json([
|
2025-07-10 17:23:46 +08:00
|
|
|
|
'code' => 200,
|
2025-05-22 15:50:52 +08:00
|
|
|
|
'message' => '获取手机号成功',
|
|
|
|
|
|
'data' => $result['phone_info']['phoneNumber']
|
|
|
|
|
|
]);
|
|
|
|
|
|
} else {
|
|
|
|
|
|
// return null;
|
|
|
|
|
|
return json([
|
|
|
|
|
|
'code' => 400,
|
|
|
|
|
|
'message' => '获取手机号失败: ' . $result['errmsg'] ?? '未知错误'
|
|
|
|
|
|
]);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// return $result;
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// todo 获取海报获客任务的任务/海报数据 -- 表还没设计好,不急 ck_customer_acquisition_task
|
|
|
|
|
|
public function getPosterTaskData() {
|
|
|
|
|
|
$id = request()->param('id');
|
2025-07-10 14:57:32 +08:00
|
|
|
|
$task = Db::name('customer_acquisition_task')->where(['id' => $id,'deleteTime' => 0])->find();
|
|
|
|
|
|
if (!$task) {
|
|
|
|
|
|
return json([
|
|
|
|
|
|
'code' => 400,
|
|
|
|
|
|
'message' => '任务不存在'
|
|
|
|
|
|
]);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if($task['status'] == 0) {
|
|
|
|
|
|
return json([
|
|
|
|
|
|
'code' => 400,
|
|
|
|
|
|
'message' => '任务已结束'
|
|
|
|
|
|
]);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
$sceneConf = json_decode($task['sceneConf'], true);
|
|
|
|
|
|
|
|
|
|
|
|
if(isset($sceneConf['posters'][0]['preview'])) {
|
|
|
|
|
|
$posterUrl = $sceneConf['posters'][0]['preview'];
|
|
|
|
|
|
} else {
|
|
|
|
|
|
$posterUrl = '';
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$data = [
|
|
|
|
|
|
'id' => $task['id'],
|
|
|
|
|
|
'name' => $task['name'],
|
|
|
|
|
|
'poster' => ['sUrl' => $posterUrl],
|
|
|
|
|
|
'sTip' => '啦啦啦啦',
|
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-05-22 15:50:52 +08:00
|
|
|
|
// todo 只需 返回 poster_url success_tip
|
|
|
|
|
|
return json([
|
2025-07-10 17:23:46 +08:00
|
|
|
|
'code' => 200,
|
2025-05-22 15:50:52 +08:00
|
|
|
|
'message' => '获取海报获客任务数据成功',
|
2025-07-10 14:57:32 +08:00
|
|
|
|
'data' => $data
|
2025-05-22 15:50:52 +08:00
|
|
|
|
]);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|