ufutx.dma/app/Http/Controllers/PublicController.php
2026-03-04 14:42:40 +08:00

251 lines
9.0 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\Http\Controllers;
use AlibabaCloud\Client\AlibabaCloud;
use AlibabaCloud\Client\Exception\ClientException;
use AlibabaCloud\Client\Exception\ServerException;
use AlibabaCloud\Sts\Sts;
use App\Facades\CommonService;
use App\Facades\WechatService;
use App\Http\Response\CatchError;
use App\Http\Response\ResponseJson;
use App\Jobs\AddErrorLog;
use App\Models\China;
use App\Models\Group;
use App\Models\MedicalReport;
use App\Models\PublicConfig;
use App\Models\User;
use App\Models\UserInfo;
use App\Models\Version;
use App\Services\ConfigService;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Redis;
use Illuminate\Support\Facades\Validator;
class PublicController extends Controller
{
use ResponseJson, CatchError;
/**
* 获取三部曲配置
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\JsonResponse
*/
public function getInfoStepConfig(Request $request)
{
try {
$chat_id = $request->get('chat_id');
$service_user_id = $request->get('service_user_id');
$sex = $request->get('sex');
if(!empty($chat_id)){
if($service_user_id){
$group = Group::with('order')->where('im_chat_id',$chat_id)->first();
}else{
$group = Group::with('order')->where('chat_id',$chat_id)->first();
}
$user = User::where('id',$group->order->user_id??0)->first();
if(empty($user)){
return $this->failure('用户信息不存在');
}
}else{
$user = auth()->user();
}
$configService = new ConfigService();
if(empty($sex)){
$sex = $user->sex;
}
$res = $configService->stepConfig($user,$sex);
if (!$res['status']) {
return $this->failure($res['msg']);
}
return $this->success('ok', $res['data']??[]);
} catch (\Exception $e) {
return $this->failure('获取失败');
}
}
/**
* 获取阿里云oss配置
* @param Request $request
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\JsonResponse
*/
public function aliYunSignature(Request $request)
{
try {
$id = config('alioss.id');
$key = config('alioss.secret');
$host = 'https://' . config('alioss.domain');
$bucket = config('alioss.bucket');
// $host = 'https://ufutx-images.oss-accelerate.aliyuncs.com';
$now = time();
$expire = 60 * 30; //设置该policy超时时间是60s. 即这个policy过了这个有效时间将不能访问
$end = $now + $expire;
$expiration = gmt_iso8601($end);
$dir = urldecode($request->dir);
if (empty($dir)) {
$dir = date('Y') . date('m') . "/" . date('d') . "/";
}
//最大文件大小.用户可以自己设置
$condition = array(0 => 'content-length-range', 1 => 0, 2 => 1048576000);
$conditions[] = $condition;
//表示用户上传的数据,必须是以$dir开始, 不然上传会失败,这一步不是必须项,只是为了安全起见,防止用户通过policy上传到别人的目录
$start = array(0 => 'starts-with', 1 => '$key', 2 => $dir);
$conditions[] = $start;
//这里默认设置是2020年.注意了,可以根据自己的逻辑,设定expire 时间.达到让前端定时到后面取signature的逻辑
$arr = array('expiration' => $expiration, 'conditions' => $conditions);
$policy = json_encode($arr);
$base64_policy = base64_encode($policy);
$string_to_sign = $base64_policy;
$signature = base64_encode(hash_hmac('sha1', $string_to_sign, $key, true));
$callback_url = $request->root() . '/api/upload';
$callback_param = array(
'callbackUrl' => $callback_url,
'callbackBody' => 'filename=${object}&size=${size}&mimeType=${mimeType}&height=${imageInfo.height}&width=${imageInfo.width}',
'callbackBodyType' => "application/x-www-form-urlencoded"
);
$callback_string = json_encode($callback_param);
$base64_callback_body = base64_encode($callback_string);
$response = array();
$response['access_id'] = $id;
$response['host'] = $host;
$response['policy'] = $base64_policy;
$response['signature'] = $signature;
$response['expire'] = $end;
$response['secret'] = $key;
//这个参数是设置用户上传指定的前缀
$response['dir'] = $dir;
$response['picture_domain'] = config('alioss.domain');
$response['bucket'] = $bucket;
$response['endpoint'] = config('alioss.out_endpoint');
//$response['callback'] = $base64_callback_body;
return $this->success('ok', $response);
} catch (\Exception $e) {
AddErrorLog::dispatch('aliYunSignature:' . $e->getMessage())->onQueue('health');
return $this->failure("上传失败");
}
}
/**
*
* @param Request $request
* @return \Illuminate\Http\JsonResponse|void
*/
public function getJsSdkConfig(Request $request)
{
try {
$url = $request->get('url');
if ($url) {
$url = urldecode($url);
} else {
$url = env('APP_URL') . '/home/';
}
// $config = WechatService::getOfficialShareConfig($url);
$config = WechatService::buildJsSdkConfig($url);
return $this->success('ok', $config);
} catch (\Exception $e) {
$this->getError($e);
return $this->success('ok');
}
}
public function getChina(Request $request)
{
// $pid = $request->get('pid');
if (empty($pid)) {
$pid = 0;
}
$redis = Redis::client();
$address = $redis->get('china_address');
if(!empty($address)){
$address = json_decode($address);
}else{
$address = China::where('id', '<>', 0)->where('pid', $pid)->orderBy('id', 'asc')->get()->toArray();
if (strlen($pid)) {
foreach ($address as $key => $value) {
$address[$key]['city'] = $city = China::where('pid', $value['id'])->orderBy('id', 'asc')->get()->toArray();
foreach ($city as $k => $v){
$address[$key]['city'][$k]['county'] = China::where('pid', $v['id'])->orderBy('id', 'asc')->get()->toArray();
}
}
}
$redis->set('china_address',json_encode($address));
}
return $this->success('ok', $address);
}
public function getSubscribeTemplateId()
{
return $this->success('ok', config('wechat.sub_tpls'));
}
public function getVersion(Request $request)
{
$type = $request->get('type');
$version = Version::where('type', $type)->orderBydesc('id')->value('version');
return $this->success('ok', $version);
}
public function getReportType()
{
$report = [
"色情低俗",
"违法犯罪",
"政治敏感",
"违规营销",
"不实信息",
"危害人身安全",
"未成年相关",
"侵犯权益",
"其他",
];
return $this->success('ok', $report);
}
public function getPrivacy(Request $request)
{
try {
$name = $request->get('name', PublicConfig::APP_PRIVACY);
$privacy = PublicConfig::where('name', $name)->get();
foreach ($privacy as $key => $value) {
// $value->content = json_decode($value->content,true);
$content = json_decode($value->content, true);
if ($content != null) {
$value->content = $content;
}
}
return $this->success('ok', $privacy);
} catch (\Exception $e) {
Log::error('getPrivacy:' . $e->getMessage());
return $this->failure('获取失败');
}
}
public function getOfficialQrcodeImg()
{
try {
$img = "https://images.health.ufutx.com/202402/27/990ef8b7127a62952a52b25d2cb0eb80.jpeg";
return $this->success('ok', $img);
} catch (\Exception $e) {
Log::error('getOfficialQrcodeImg:' . $e->getMessage());
return $this->failure('获取失败');
}
}
}