更新接口不通过user_id绑定数据
This commit is contained in:
13
app/admin/lang/en/mall/points_log.php
Normal file
13
app/admin/lang/en/mall/points_log.php
Normal 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',
|
||||
];
|
||||
13
app/admin/lang/zh-cn/mall/points_log.php
Normal file
13
app/admin/lang/zh-cn/mall/points_log.php
Normal 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' => '积分流水不允许删除',
|
||||
];
|
||||
@@ -28,7 +28,7 @@ use support\Response;
|
||||
class Playx extends Api
|
||||
{
|
||||
/**
|
||||
* 从请求解析 mall_user_asset.id(muser token、session、user_id 均指向资产表主键或 playx_user_id)
|
||||
* 从请求解析 mall_user_asset.id(muser 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)
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -35,16 +35,15 @@
|
||||
|
||||
## 2. 身份与鉴权(重要)
|
||||
|
||||
以下接口都会通过服务端逻辑解析“当前资产主体”,优先级如下:
|
||||
以下接口通过服务端解析「当前资产主体」,**仅**支持:
|
||||
|
||||
1. **`session_id`**(GET/POST):对应表 `mall_session`,未过期则可映射到资产主体
|
||||
2. **`token`**(GET/POST 或 Header):支持会员 token 或 `muser` token(H5 临时登录签发)
|
||||
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)
|
||||
|
||||
@@ -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 参数
|
||||
| 字段 | 类型 | 必填 | 说明 |
|
||||
|
||||
Reference in New Issue
Block a user