初始化项目

This commit is contained in:
2026-09-01 22:15:50 +08:00
commit b5a26a8848
11217 changed files with 1710987 additions and 0 deletions
@@ -0,0 +1,178 @@
<?php
// +----------------------------------------------------------------------
// | 萤火商城系统 [ 致力于通过产品和服务,帮助商家高效化开拓市场 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2017~2023 https://www.yiovo.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed 这不是一个自由软件,不允许对程序代码以任何形式任何目的的再发行
// +----------------------------------------------------------------------
// | Author: 萤火科技 <admin@yiovo.com>
// +----------------------------------------------------------------------
declare (strict_types=1);
namespace app\store\controller;
use app\store\model\store\User as StoreUserModel;
use app\store\service\store\User as StoreUserService;
use app\api\model\Code as CodeModel;
use app\store\model\Order as OrderModel;
use think\facade\Cache;
use think\response\Json;
use think\facade\Request;
use GatewayWorker\Lib\Gateway;
/**
* 商家后台认证
* Class Passport
* @package app\store\controller
*/
class Passport extends Controller
{
/**
* 强制验证当前访问的控制器方法method
* 例: [ 'login' => 'POST' ]
* @var array
*/
protected $methodRules = [
'login' => 'POST',
'logout' => 'POST',
];
/**
* 商家用户登录
* @return array|bool|string
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function login()
{
$model = new StoreUserModel;
$postData = $this->postData();
if (($userInfo = $model->login($postData)) === false) {
return $this->renderError($model->getError() ?: '登录失败');
}
return $this->renderSuccess([
'userId' => (int)$userInfo['store_user_id'],
'token' => $model->getToken()
], '登录成功');
}
/**
* 退出登录
* @return array
*/
public function logout()
{
// 清空登录状态
StoreUserService::logout();
return $this->renderSuccess('操作成功');
}
public function bindUid()
{
$postData = $this->postData();
$uid = $postData['uid'];
$clientId = $postData['client_id'];
Gateway::bindUid($clientId, $uid);
}
/**
* 订单匹配支付码
* @param int $orderId
* @return Json
* @throws BaseException
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
* @throws \cores\exception\BaseException
*/
public function detail(int $orderId): Json
{
$domain = Request::instance()->domain();
$order = OrderModel::detail($orderId);
// 加锁
$lock_key = $orderId . '_lock';
while (true) {
$lock_success = Cache::store('redis')->setnx($lock_key, 1);
if (!$lock_success) {
// 锁定失败,说明其他客户端已经在处理该队列了,可以直接返回或者等待一段时间后重试
continue;
}
// 设置锁定过期时间,防止锁定无法释放
Cache::store('redis')->expire($lock_key, 20);
break;
}
$update_time = 0;
if(empty($order['code_id']) && $order['order_status'] == 10) {
/**查询支付码**/
$CodeModel = new CodeModel();
$codeInfo = $CodeModel->getCodeDetail($order['total_price'], $order['passageway'])->toArray();
if (empty($codeInfo['code_id'])) {
$order->save([
'ip' => Request::instance()->ip(),
'buyer_remark' => '分配支付码失败',
'update_time' => time(),
]);
$result = ['money'=>0,'qrcode'=>'','seconds'=>0,'passageway'=>$order['passageway']];
return $this->renderSuccess($result,'分配支付码失败');
} else {
$order->save([
'ip' => Request::instance()->ip(),
'code_id' => $codeInfo['code_id'],
'order_no_sn' => $codeInfo['order_no_sn'],
'shop_id' => $codeInfo['shop_id'],
'store_user_id' => $codeInfo['store_user_id'],
'search_url' => $codeInfo['search_url'],
'passageway' => $codeInfo['passageway'],
'update_time' => time(),
]);
}
$update_time = time();
}elseif($order['code_id']){
$codeInfo = CodeModel::detail($order['code_id']);
$update_time = is_string($order['update_time'])?(int)strtotime($order['update_time']):$order['update_time'];
}
// 释放锁定
Cache::store('redis')->del($lock_key);
$seconds = ($update_time+300-time())>0?($update_time+300-time()):0;
$qrcode = '';
if(isset($codeInfo['code_id']) && $seconds>0 && $order['order_status'] == 10) {
if($order['passageway'] == 'WX') {
$url = $domain . '/wxScanPng.php';
//$aa = str_replace("&", "%26", $codeInfo['link']);
//$bb = str_replace("amp;", "", $aa);
$qrcode = $url . '?url=' . urlencode(htmlspecialchars_decode($codeInfo['link']));
}elseif($order['passageway'] == 'SNZFBH5'){
$qrcode = htmlspecialchars_decode($codeInfo['alipay']);
}else{
//$qrcode = htmlspecialchars_decode($codeInfo['alipay']);
$qrcode = "alipays://platformapi/startapp?appId=20000067&url=".urlencode(htmlspecialchars_decode($codeInfo['alipay']));
}
}
$result = ['money'=>$order['total_price'],'qrcode'=>$qrcode,'seconds'=>$seconds,'passageway'=>$order['passageway']];
return $this->renderSuccess($result);
}
/**
* 修改订单点击支付次数
* @param int $orderId
* @return Json
* @throws BaseException
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
* @throws \cores\exception\BaseException
*/
public function clickNum(int $orderId): Json
{
$order = OrderModel::detail($orderId);
if(!empty($order['code_id'])) {
$order->save(['click'=>(int)$order['click']+1]);
}
return $this->renderSuccess();
}
}