更新接口不通过user_id绑定数据

This commit is contained in:
2026-07-27 14:24:53 +08:00
parent 778cdc01da
commit f2543b9aa4
8 changed files with 58 additions and 50 deletions

View File

@@ -0,0 +1,13 @@
<?php
return [
'User asset' => 'User asset',
'Points adjustment' => 'Points adjustment',
'User asset not found' => 'User asset not found',
'Points adjustment must be a non-zero integer' => 'Points adjustment must be a non-zero integer',
'Insufficient available points' => 'Insufficient available points',
'Administrator added %s points' => 'Administrator added %s points',
'Administrator deducted %s points' => 'Administrator deducted %s points',
'Points log cannot be modified' => 'Points log cannot be modified',
'Points log cannot be deleted' => 'Points log cannot be deleted',
];

View File

@@ -0,0 +1,13 @@
<?php
return [
'User asset' => '用户资产',
'Points adjustment' => '调整积分',
'User asset not found' => '用户资产不存在',
'Points adjustment must be a non-zero integer' => '调整积分必须为非零整数',
'Insufficient available points' => '可用积分不足',
'Administrator added %s points' => '管理员增加积分 %s',
'Administrator deducted %s points' => '管理员扣除积分 %s',
'Points log cannot be modified' => '积分流水不允许修改',
'Points log cannot be deleted' => '积分流水不允许删除',
];

View File

@@ -28,7 +28,7 @@ use support\Response;
class Playx extends Api
{
/**
* 从请求解析 mall_user_asset.idmuser token、session、user_id 均指向资产表主键或 playx_user_id
* 从请求解析 mall_user_asset.idmuser token 或 mall_session
*/
private function resolvePlayxAssetIdFromRequest(Request $request): ?int
{
@@ -58,19 +58,6 @@ class Playx extends Api
return $this->resolveAssetIdByToken($token);
}
$userId = strval($request->post('user_id', $request->get('user_id', '')));
if ($userId === '') {
return null;
}
if (ctype_digit($userId)) {
return intval($userId);
}
$asset = MallUserAsset::where('playx_user_id', $userId)->find();
if ($asset) {
return intval($asset->getKey());
}
return null;
}
@@ -683,7 +670,7 @@ class Playx extends Api
/**
* 用户资产
* GET /api/v1/playx/assets?user_id=xxx
* GET /api/v1/mall/assets
*/
public function assets(Request $request): Response
{
@@ -846,7 +833,7 @@ class Playx extends Api
/**
* 订单列表
* GET /api/v1/playx/orders?user_id=xxx
* GET /api/v1/mall/orders
*/
public function orders(Request $request): Response
{
@@ -885,7 +872,7 @@ class Playx extends Api
* 按订单 ID 查询订单(仅当前登录用户本人的订单)
* GET /api/v1/mall/order?order_id=xxx
*
* 鉴权token / session_id / user_id(同 assets/orders
* 鉴权token / session_id同 assets/orders
*/
public function order(Request $request): Response
{
@@ -936,7 +923,7 @@ class Playx extends Api
* 积分流水(领取/兑换/退回/管理员调整)
* GET /api/v1/mall/pointsLogs
*
* 鉴权token / session_id / user_id(同 assets/orders
* 鉴权token / session_id同 assets/orders
*
* 参数:
* - limit: 每页条数(默认 20最大 100

View File

@@ -72,11 +72,11 @@ return [
'Daily push signature missing or incomplete' => 'Daily push signature missing or incomplete',
'Daily push signature verification failed' => 'Daily push signature verification failed',
'Failed to ensure PlayX user asset' => 'Failed to ensure PlayX user asset',
'claim_request_id and user_id/session_id required' => 'claim_request_id and user_id/session_id/token are required',
'claim_request_id and user_id/session_id required' => 'claim_request_id and session_id/token are required',
'User asset not found' => 'User asset not found',
'No points to claim or limit reached' => 'No points to claim or daily limit reached',
'Claim success' => 'Claim successful',
'item_id and user_id/session_id required' => 'item_id and user_id/session_id/token are required',
'item_id and user_id/session_id required' => 'item_id and session_id/token are required',
'Item not found or not available' => 'Item not found or not available',
'Insufficient points' => 'Insufficient points',
'Administrator added %s points' => 'Administrator added %s points',

View File

@@ -73,11 +73,11 @@ return [
'Daily push signature missing or incomplete' => 'Tandatangan push harian tiada atau tidak lengkap',
'Daily push signature verification failed' => 'Pengesahan tandatangan push harian gagal',
'Failed to ensure PlayX user asset' => 'Gagal mencipta/memeta aset pengguna',
'claim_request_id and user_id/session_id required' => 'claim_request_id dan user_id/session_id/token diperlukan',
'claim_request_id and user_id/session_id required' => 'claim_request_id dan session_id/token diperlukan',
'User asset not found' => 'Aset pengguna tidak dijumpai',
'No points to claim or limit reached' => 'Tiada mata untuk dituntut atau had harian dicapai',
'Claim success' => 'Tuntutan berjaya',
'item_id and user_id/session_id required' => 'item_id dan user_id/session_id/token diperlukan',
'item_id and user_id/session_id required' => 'item_id dan session_id/token diperlukan',
'Item not found or not available' => 'Item tidak dijumpai atau tidak tersedia',
'Insufficient points' => 'Mata tidak mencukupi',
'Administrator added %s points' => 'Pentadbir menambah %s mata',

View File

@@ -74,11 +74,11 @@ return [
'Daily push signature missing or incomplete' => '签名缺失或不完整',
'Daily push signature verification failed' => '签名校验失败',
'Failed to ensure PlayX user asset' => '创建/映射用户资产失败',
'claim_request_id and user_id/session_id required' => '缺少 claim_request_id或未提供有效的 user_id/session_id/token',
'claim_request_id and user_id/session_id required' => '缺少 claim_request_id或未提供有效的 session_id/token',
'User asset not found' => '未找到用户资产',
'No points to claim or limit reached' => '暂无可领取积分或已达今日上限',
'Claim success' => '领取成功',
'item_id and user_id/session_id required' => '缺少 item_id或未提供有效的 user_id/session_id/token',
'item_id and user_id/session_id required' => '缺少 item_id或未提供有效的 session_id/token',
'Item not found or not available' => '商品不存在或已下架',
'Insufficient points' => '积分不足',
'Administrator added %s points' => '管理员增加积分 %s',

View File

@@ -35,16 +35,15 @@
## 2. 身份与鉴权(重要)
以下接口都会通过服务端逻辑解析当前资产主体”,优先级如下
以下接口通过服务端解析当前资产主体」,**仅**支持
1. **`session_id`**GET/POST对应表 `mall_session`,未过期则可映射到资产主体
2. **`token`**GET/POST 或 Header):支持会员 token 或 `muser` tokenH5 临时登录签发)
3. **`user_id`**GET/POST
- 纯数字:视为 `mall_user_asset.id`
- 非纯数字:按 `mall_user_asset.playx_user_id` 查找
2. **`token`**GET/POST 或 Header `token` / `ba-token`):会员 token 或 H5 临时登录签发的 **`muser`** token
不再支持单独传 `user_id` 作为鉴权参数(避免越权)。
推荐做法:
- H5 统一**Header `token`**值为 `muser` token),避免 URL 泄露与参数歧义
- H5 统一使**Header `token`**`muser` 或 playX 换 session 后的凭证),避免 URL 泄露。
---
@@ -77,7 +76,7 @@ curl "https://{域名}/api/v1/temLogin?username=test001"
**GET** ` /api/v1/mall/assets `
鉴权:携带 `token``session_id``user_id`
鉴权:携带 `token``session_id`
成功返回 `data`
- `locked_points`:待领取积分
@@ -94,7 +93,7 @@ curl "https://{域名}/api/v1/temLogin?username=test001"
参数:
- `claim_request_id`:必填,幂等键(建议:`{业务前缀}_{assetId}_{毫秒时间戳}`
- 身份参数:`token` / `session_id` / `user_id` 三选一(推荐 `token`
- 身份参数:`token` / `session_id`(推荐 Header `token`
说明:
- 同一个 `claim_request_id` 重复提交会直接返回成功(不会重复入账)
@@ -117,7 +116,7 @@ curl "https://{域名}/api/v1/temLogin?username=test001"
参数:
- `item_id`:必填
- 身份参数:`token` / `session_id` / `user_id`
- 身份参数:`token` / `session_id`
返回:
- `data.order_id`
@@ -132,7 +131,7 @@ curl "https://{域名}/api/v1/temLogin?username=test001"
参数:
- `item_id`:必填
- `address_id`:必填,收货地址主键(`mall_address.id`,须为当前用户资产下地址)
- 身份参数:`token` / `session_id` / `user_id`
- 身份参数:`token` / `session_id`
说明:服务端会将该地址在下单时刻的 **收货人 / 电话 / 完整地址** 写入订单字段(快照),并写入 `mall_order.mall_address_id` 关联所选地址。
@@ -144,7 +143,7 @@ curl "https://{域名}/api/v1/temLogin?username=test001"
参数:
- `item_id`:必填
- 身份参数:`token` / `session_id` / `user_id`
- 身份参数:`token` / `session_id`
---
@@ -152,7 +151,7 @@ curl "https://{域名}/api/v1/temLogin?username=test001"
**GET** ` /api/v1/mall/orders `
鉴权:`token` / `session_id` / `user_id`
鉴权:`token` / `session_id`
说明:
- 返回最多 100 条
@@ -164,7 +163,7 @@ curl "https://{域名}/api/v1/temLogin?username=test001"
**GET** ` /api/v1/mall/order `
鉴权:`token` / `session_id` / `user_id`(同订单列表)
鉴权:`token` / `session_id`(同订单列表)
参数Query
- `order_id`:必填,商城订单主键 `mall_order.id`(兼容参数名 `id`
@@ -191,7 +190,7 @@ curl -G "https://{域名}/api/v1/mall/order" \
**GET** ` /api/v1/mall/pointsLogs `
鉴权:携带 `token``session_id``user_id`
鉴权:携带 `token``session_id`
参数Query
- `limit`:可选,每页条数(默认 20最大 100

View File

@@ -212,11 +212,8 @@ curl -X POST 'http://localhost:1818/api/v1/mall/dailyPush' \
* 若会话无效:兼容把 `session_id` 参数误当作 **商城 token** 再试一次UUID 形态 token
2. **`token`**`post` / `get` 或请求头 **`ba-token`** / **`token`**
* 校验 `token` 表:类型为会员 `user` 或商城临时 **`muser`**。未过期时,`user_id` 字段为 **`mall_user_asset.id`**`muser`)或会员体系约定 ID`user`)。
3. **`user_id`**`post` / `get` 兼容)
* **纯数字**:视为 **`mall_user_asset.id`**。
* **非纯数字**:视为 **`playx_user_id`**,在 `mall_user_asset` 按该字段查找主键。
> 注意:请求参数的取值方式是 `post()` 优先,`get()` 兼容(即同字段既可传 post 也可传 get
> 注意:请求参数的取值方式是 `post()` 优先,`get()` 兼容。不再支持单独传 `user_id` 作为鉴权
---
@@ -309,7 +306,7 @@ curl -X POST 'http://localhost:1818/api/v1/mall/verifyToken' \
### 3.x 收货地址(`mall_address`
> 下面接口用于 H5 维护收货地址。鉴权同本章其他接口:携带 `session_id` 或 `token` 或 `user_id`
> 下面接口用于 H5 维护收货地址。鉴权同本章其他接口:携带 `session_id` 或 `token`。
#### 3.x.1 地址列表
* 方法:`GET`
@@ -353,7 +350,6 @@ Body`id` 必填。若删除默认地址,服务端会自动挑选一条剩
* `session_id`
* `token`(或请求头 `ba-token` / `token`
* `user_id`(纯数字为 **`mall_user_asset.id`**,否则为 **`playx_user_id`**
#### 返回(成功 data
若未找到资产:返回 0。
@@ -397,7 +393,7 @@ curl -G 'http://localhost:1818/api/v1/mall/assets' --data-urlencode 'token=上
* `claim_request_id`幂等键string唯一
鉴权:同 **3.1**`session_id` / `token` / `user_id`
鉴权:同 **3.1**`session_id` / `token`
#### 返回(成功 data
`用户资产` 返回字段一致(资产快照)。
@@ -497,7 +493,7 @@ curl -G 'http://localhost:1818/api/v1/mall/items' --data-urlencode 'type=WITHDRA
#### 请求 Body
必填:
* `item_id`:商品 ID要求 `mall_item.type=BONUS``status=1`
鉴权:同 **3.1**`session_id` / `token` / `user_id`
鉴权:同 **3.1**`session_id` / `token`
#### 返回(成功)
* `msg``Redeem submitted, please wait about 10 minutes`
@@ -535,7 +531,7 @@ curl -X POST 'http://localhost:1818/api/v1/mall/bonusRedeem' \
必填:
* `item_id`:商品 ID要求 `mall_item.type=PHYSICAL``status=1`
* `address_id`:收货地址 ID`mall_address.id`,须属于当前用户资产;下单时写入 `mall_order.mall_address_id`,并将该地址快照写入 `receiver_name` / `receiver_phone` / `receiver_address`
鉴权:同 **3.1**`session_id` / `token` / `user_id`
鉴权:同 **3.1**`session_id` / `token`
#### 返回(成功)
* `msg``Redeem success`
@@ -569,7 +565,7 @@ curl -X POST 'http://localhost:1818/api/v1/mall/physicalRedeem' \
#### 请求 Body
必填:
* `item_id`:商品 ID要求 `mall_item.type=WITHDRAW``status=1`
鉴权:同 **3.1**`session_id` / `token` / `user_id`
鉴权:同 **3.1**`session_id` / `token`
#### 返回(成功)
* `msg``Withdraw submitted, please wait about 10 minutes`
@@ -605,7 +601,7 @@ curl -X POST 'http://localhost:1818/api/v1/mall/withdrawApply' \
#### 请求参数(鉴权)
**3.1**`session_id` / `token` / `user_id`)。
**3.1**`session_id` / `token`)。
#### 返回(成功 data
@@ -654,7 +650,7 @@ curl -G 'http://localhost:1818/api/v1/mall/orders' --data-urlencode 'token=上
* 路径:`/api/v1/mall/pointsLogs`
#### 请求参数(鉴权)
**3.1**`session_id` / `token` / `user_id`)。
**3.1**`session_id` / `token`)。
#### Query 参数
| 字段 | 类型 | 必填 | 说明 |