Browse Source

fix: 填写信息的

super-yimizi 1 month ago
parent
commit
a6ab93a83c

+ 3 - 8
application/api/controller/Lottery.php

@@ -290,27 +290,22 @@ class Lottery extends Api
         if (!$validate->scene('setWinRecordAddress')->check($this->request->param())) {
         if (!$validate->scene('setWinRecordAddress')->check($this->request->param())) {
             $this->error($validate->getError());
             $this->error($validate->getError());
         }
         }
-
         $winRecordId = $this->request->param('win_record_id/d');
         $winRecordId = $this->request->param('win_record_id/d');
         $receiverName = $this->request->param('receiver_name');
         $receiverName = $this->request->param('receiver_name');
         $receiverMobile = $this->request->param('receiver_mobile');
         $receiverMobile = $this->request->param('receiver_mobile');
         $receiverAddress = $this->request->param('receiver_address');
         $receiverAddress = $this->request->param('receiver_address');
 
 
         $userId = $this->auth->id;
         $userId = $this->auth->id;
-
-        $winRecord = LotteryWinRecord::where('id', $winRecordId)
-                                     ->where('user_id', $userId)
-                                     ->find();
+        // 验证 中奖记录 是否存在
+        $winRecord = LotteryRecordService::getWinRecordDetail($winRecordId, $userId);
         if (!$winRecord) {
         if (!$winRecord) {
             $this->error('中奖记录不存在');
             $this->error('中奖记录不存在');
         }
         }
-
         if ($winRecord->deliver_status != LotteryEnum::DELIVER_STATUS_PENDING) {
         if ($winRecord->deliver_status != LotteryEnum::DELIVER_STATUS_PENDING) {
             $this->error('该奖品已处理,无法修改地址');
             $this->error('该奖品已处理,无法修改地址');
         }
         }
-
         try {
         try {
-            $winRecord->setDeliveryAddress($receiverName, $receiverMobile, $receiverAddress);
+            LotteryRecordService::setWinRecordDeliveryAddress($winRecord, $receiverName, $receiverMobile, $receiverAddress);
             $this->success('设置成功');
             $this->success('设置成功');
         } catch (Exception $e) {
         } catch (Exception $e) {
             $this->error('设置失败:' . $e->getMessage());
             $this->error('设置失败:' . $e->getMessage());

+ 12 - 32
application/common/Service/Lottery/LotteryRecordService.php

@@ -221,37 +221,6 @@ class LotteryRecordService
         return $records;
         return $records;
     }
     }
     
     
-
-    /**
-     * 获取活动抽奖记录列表
-     */
-    public static function getActivityDrawRecords($activityId, $page = 1, $limit = 20, $filters = [])
-    {
-        $query = LotteryDrawRecord::where('activity_id', $activityId);
-        
-        // 应用过滤器
-        if (isset($filters['is_win'])) {
-            $query->where('is_win', $filters['is_win']);
-        }
-        
-        if (isset($filters['trigger_type'])) {
-            $query->where('trigger_type', $filters['trigger_type']);
-        }
-        
-        if (isset($filters['start_time'])) {
-            $query->where('draw_time', '>=', $filters['start_time']);
-        }
-        
-        if (isset($filters['end_time'])) {
-            $query->where('draw_time', '<=', $filters['end_time']);
-        }
-        
-        return $query->with(['user', 'prize', 'winRecord'])
-                     ->order('draw_time', 'desc')
-                     ->page($page, $limit)
-                     ->select();
-    }
-
     /**
     /**
      * 获取抽奖记录详情
      * 获取抽奖记录详情
      * 
      * 
@@ -416,6 +385,18 @@ class LotteryRecordService
     // ============ 中奖记录相关方法 ============
     // ============ 中奖记录相关方法 ============
 
 
     /**
     /**
+     * 获取中奖记录详情
+     */
+    public static function getWinRecordDetail($winRecordId, $userId = 0)
+    {
+        $query = LotteryWinRecord::where('id', $winRecordId);
+        if ($userId) {
+            $query->where('user_id', $userId);
+        }
+        return $query->find();
+    }
+
+    /**
      * 创建中奖记录
      * 创建中奖记录
      */
      */
     public static function createWinRecord($drawRecordId, $activityId, $userId, $prizeId, $prizeName, $prizeType, $prizeValue = [])
     public static function createWinRecord($drawRecordId, $activityId, $userId, $prizeId, $prizeName, $prizeType, $prizeValue = [])
@@ -467,7 +448,6 @@ class LotteryRecordService
         $winRecord->receiver_address = $address;
         $winRecord->receiver_address = $address;
         return $winRecord->save();
         return $winRecord->save();
     }
     }
-
     /**
     /**
      * 设置中奖记录快递信息
      * 设置中奖记录快递信息
      */
      */

+ 12 - 32
application/common/Service/lottery/LotteryRecordService.php

@@ -221,37 +221,6 @@ class LotteryRecordService
         return $records;
         return $records;
     }
     }
     
     
-
-    /**
-     * 获取活动抽奖记录列表
-     */
-    public static function getActivityDrawRecords($activityId, $page = 1, $limit = 20, $filters = [])
-    {
-        $query = LotteryDrawRecord::where('activity_id', $activityId);
-        
-        // 应用过滤器
-        if (isset($filters['is_win'])) {
-            $query->where('is_win', $filters['is_win']);
-        }
-        
-        if (isset($filters['trigger_type'])) {
-            $query->where('trigger_type', $filters['trigger_type']);
-        }
-        
-        if (isset($filters['start_time'])) {
-            $query->where('draw_time', '>=', $filters['start_time']);
-        }
-        
-        if (isset($filters['end_time'])) {
-            $query->where('draw_time', '<=', $filters['end_time']);
-        }
-        
-        return $query->with(['user', 'prize', 'winRecord'])
-                     ->order('draw_time', 'desc')
-                     ->page($page, $limit)
-                     ->select();
-    }
-
     /**
     /**
      * 获取抽奖记录详情
      * 获取抽奖记录详情
      * 
      * 
@@ -416,6 +385,18 @@ class LotteryRecordService
     // ============ 中奖记录相关方法 ============
     // ============ 中奖记录相关方法 ============
 
 
     /**
     /**
+     * 获取中奖记录详情
+     */
+    public static function getWinRecordDetail($winRecordId, $userId = 0)
+    {
+        $query = LotteryWinRecord::where('id', $winRecordId);
+        if ($userId) {
+            $query->where('user_id', $userId);
+        }
+        return $query->find();
+    }
+
+    /**
      * 创建中奖记录
      * 创建中奖记录
      */
      */
     public static function createWinRecord($drawRecordId, $activityId, $userId, $prizeId, $prizeName, $prizeType, $prizeValue = [])
     public static function createWinRecord($drawRecordId, $activityId, $userId, $prizeId, $prizeName, $prizeType, $prizeValue = [])
@@ -467,7 +448,6 @@ class LotteryRecordService
         $winRecord->receiver_address = $address;
         $winRecord->receiver_address = $address;
         return $winRecord->save();
         return $winRecord->save();
     }
     }
-
     /**
     /**
      * 设置中奖记录快递信息
      * 设置中奖记录快递信息
      */
      */

+ 1 - 0
application/common/model/lottery/LotteryWinRecord.php

@@ -99,4 +99,5 @@ class LotteryWinRecord extends Model
     {
     {
         return is_array($value) ? json_encode($value) : $value;
         return is_array($value) ? json_encode($value) : $value;
     }
     }
+
 } 
 } 

+ 133 - 0
docs/channel/README.md

@@ -0,0 +1,133 @@
+# 渠道配置文档
+
+## 概述
+
+本文档描述了系统支持的各种渠道配置,包括渠道信息、登录方式和支付方式的设置。
+
+## 支持的渠道
+
+根据 `ChannelEnum.php` 枚举类,系统支持以下渠道:
+
+### 微信生态
+- [微信公众号](wechat_official_account.md) - 微信公众号平台
+- [微信小程序](wechat_mini_program.md) - 微信小程序平台
+
+### 移动应用
+- [iOS APP](ios_app.md) - iOS 移动应用
+- [Android APP](android_app.md) - Android 移动应用
+
+### 网页端
+- [H5](h5.md) - 移动网页应用
+- [PC](pc.md) - 桌面网页应用
+
+### 小程序平台
+- [抖音小程序](douyin_mini_program.md) - 抖音小程序平台
+- [QQ小程序](qq_mini_program.md) - QQ小程序平台
+- [支付宝小程序](alipay_mini_program.md) - 支付宝小程序平台
+
+## 渠道分组
+
+### 微信生态 (wechat)
+- 微信公众号
+- 微信小程序
+
+### 移动应用 (mobile_app)
+- iOS APP
+- Android APP
+
+### 网页端 (web)
+- H5
+- PC
+
+### 小程序 (mini_program)
+- 微信小程序
+- 抖音小程序
+- QQ小程序
+- 支付宝小程序
+
+## 配置要素
+
+每个渠道的配置通常包含以下要素:
+
+### 1. 基本信息
+- 渠道标识符
+- 渠道名称
+- 渠道描述
+- 状态(开启/关闭)
+
+### 2. 平台配置
+- 应用ID (AppId)
+- 应用密钥 (AppSecret)
+- 接口地址
+- 回调地址
+
+### 3. 登录方式
+- 自动登录
+- 手动登录
+- 绑定手机号
+- 第三方登录
+
+### 4. 支付方式
+- 微信支付
+- 支付宝支付
+- 余额支付
+- 线下支付
+- 货到付款
+
+### 5. 功能特性
+- 支付功能
+- 分享功能
+- 定位功能
+- 拍照功能
+- 推送功能
+
+## 支付方式兼容性
+
+| 渠道 | 微信支付 | 支付宝支付 | 余额支付 | 线下支付 |
+|-----|---------|----------|---------|---------|
+| 微信公众号 | ✅ | ❌ | ✅ | ❌ |
+| 微信小程序 | ✅ | ❌ | ✅ | ❌ |
+| iOS APP | ✅ | ✅ | ✅ | ❌ |
+| Android APP | ✅ | ✅ | ✅ | ❌ |
+| H5 | ✅ | ✅ | ✅ | ❌ |
+| 抖音小程序 | ❌ | ✅ | ✅ | ❌ |
+| PC | ❌ | ✅ | ✅ | ✅ |
+| QQ小程序 | ❌ | ❌ | ✅ | ❌ |
+| 支付宝小程序 | ❌ | ✅ | ✅ | ❌ |
+
+## 功能特性兼容性
+
+| 渠道 | 支付 | 分享 | 定位 | 拍照 | 推送 |
+|-----|------|------|------|------|------|
+| 微信公众号 | ✅ | ✅ | ✅ | ❌ | ✅ |
+| 微信小程序 | ✅ | ✅ | ✅ | ✅ | ✅ |
+| iOS APP | ✅ | ✅ | ✅ | ✅ | ✅ |
+| Android APP | ✅ | ✅ | ✅ | ✅ | ✅ |
+| H5 | ✅ | ✅ | ✅ | ✅ | ❌ |
+| 抖音小程序 | ✅ | ✅ | ✅ | ✅ | ✅ |
+| PC | ✅ | ❌ | ❌ | ❌ | ❌ |
+| QQ小程序 | ✅ | ✅ | ✅ | ✅ | ✅ |
+| 支付宝小程序 | ✅ | ✅ | ✅ | ✅ | ✅ |
+
+## 配置流程
+
+1. 选择需要配置的渠道
+2. 填写基本信息
+3. 配置平台参数
+4. 设置登录方式
+5. 开启支付方式
+6. 测试配置
+7. 上线发布
+
+## 注意事项
+
+- 每个渠道的配置参数可能不同,请参考对应的详细配置文档
+- 支付方式的开启需要相应的资质和审核
+- 登录方式的配置需要考虑用户体验和安全性
+- 建议在测试环境验证配置后再上线
+
+## 相关链接
+
+- [ChannelEnum.php 枚举类](../../application/common/Enum/ChannelEnum.php)
+- [渠道配置管理后台](#)
+- [API接口文档](#) 

+ 283 - 0
docs/channel/wechat_mini_program.md

@@ -0,0 +1,283 @@
+# 微信小程序渠道配置
+
+## 概述
+
+微信小程序是微信生态中的重要应用形态,具有免安装、即用即走的特点。本文档描述了微信小程序渠道的完整配置流程。
+
+## 基本信息
+
+- **渠道标识**: `wechat_mini_program`
+- **渠道名称**: 微信小程序
+- **渠道类型**: 小程序
+- **所属分组**: 微信生态 (wechat)
+
+## 配置要素
+
+### 1. 基本配置
+
+```php
+// 渠道基本信息
+'channel' => 'wechat_mini_program',
+'name' => '微信小程序',
+'status' => true, // 开启/关闭
+'description' => '微信小程序平台接入'
+```
+
+### 2. 微信平台配置
+
+#### 必填参数
+- **AppId**: 小程序应用ID
+- **AppSecret**: 小程序应用密钥
+
+#### 配置示例
+```php
+'wechat_config' => [
+    'appid' => 'wx9a7153e5b40d9663',
+    'secret' => '8a743955faa5873af394f31d4a58c086',
+    'token' => '', // 消息推送Token(可选)
+    'aes_key' => '', // 消息加解密Key(可选)
+]
+```
+
+#### 获取方式
+1. 登录微信公众平台 (mp.weixin.qq.com)
+2. 选择小程序类型
+3. 在「开发」-「开发管理」-「开发设置」中获取
+
+### 3. 支付配置
+
+微信小程序支持以下支付方式:
+
+#### 3.1 微信支付 ✅ (推荐)
+- **状态**: 开启
+- **优先级**: 1
+- **配置要求**: 
+  - 需要开通微信支付商户号
+  - 配置支付回调域名
+  - 设置支付证书
+
+```php
+'payment_config' => [
+    'wechat' => [
+        'enabled' => true,
+        'mch_id' => '商户号',
+        'key' => '商户密钥',
+        'cert_path' => '证书路径',
+        'key_path' => '密钥路径',
+        'notify_url' => '支付回调地址'
+    ]
+]
+```
+
+#### 3.2 余额支付 ✅
+- **状态**: 开启
+- **优先级**: 2
+- **说明**: 用户使用账户余额进行支付
+
+```php
+'payment_config' => [
+    'balance' => [
+        'enabled' => true,
+        'min_amount' => 0.01, // 最小支付金额
+        'max_amount' => 10000, // 最大支付金额
+    ]
+]
+```
+
+#### 3.3 不支持的支付方式 ❌
+- 支付宝支付
+- 线下支付
+- 货到付款
+
+### 4. 登录配置
+
+#### 4.1 自动登录
+- **状态**: 开启/关闭
+- **说明**: 进入应用后,用户将会自动授权登录,未注册用户将会自动注册
+
+```php
+'login_config' => [
+    'auto_login' => true,
+    'auto_register' => true,
+]
+```
+
+#### 4.2 绑定手机号
+- **状态**: 开启/关闭
+- **说明**: 授权登录后,未绑定手机号的用户,将会立即提醒绑定手机号
+
+```php
+'login_config' => [
+    'force_mobile' => true,
+    'mobile_verify' => true, // 手机号验证
+]
+```
+
+### 5. 功能特性
+
+| 功能 | 支持状态 | 说明 |
+|------|---------|------|
+| 支付功能 | ✅ | 支持微信支付、余额支付 |
+| 分享功能 | ✅ | 支持分享到微信好友、朋友圈 |
+| 定位功能 | ✅ | 支持获取用户地理位置 |
+| 拍照功能 | ✅ | 支持调用摄像头拍照 |
+| 推送功能 | ✅ | 支持模板消息推送 |
+
+## 配置流程
+
+### 1. 微信公众平台配置
+
+1. **注册小程序**
+   - 访问 https://mp.weixin.qq.com
+   - 注册小程序账号
+   - 完成主体认证
+
+2. **获取开发信息**
+   - 在「开发」-「开发管理」-「开发设置」中获取AppID
+   - 生成AppSecret
+
+3. **配置服务器域名**
+   - 在「开发」-「开发管理」-「开发设置」中配置
+   - request合法域名:`https://your-domain.com`
+   - uploadFile合法域名:`https://your-domain.com`
+   - downloadFile合法域名:`https://your-domain.com`
+
+4. **配置支付域名**(如需支付功能)
+   - 在微信支付商户平台配置
+   - 设置支付回调域名
+
+### 2. 系统后台配置
+
+1. **基本信息配置**
+   ```
+   渠道状态: 开启
+   渠道名称: 微信小程序
+   渠道描述: 微信小程序平台
+   ```
+
+2. **平台参数配置**
+   ```
+   AppId: wx9a7153e5b40d9663
+   AppSecret: 8a743955faa5873af394f31d4a58c086
+   ```
+
+3. **支付方式配置**
+   ```
+   微信支付: 开启
+   余额支付: 开启
+   支付宝支付: 关闭
+   货到付款: 关闭
+   ```
+
+4. **登录方式配置**
+   ```
+   自动登录: 开启
+   绑定手机号: 开启
+   ```
+
+### 3. 开发配置
+
+1. **小程序代码配置**
+   ```javascript
+   // app.js
+   App({
+     globalData: {
+       apiUrl: 'https://your-domain.com/api',
+       appId: 'wx9a7153e5b40d9663'
+     }
+   })
+   ```
+
+2. **登录授权**
+   ```javascript
+   // 获取用户信息
+   wx.getUserProfile({
+     desc: '用于完善会员资料',
+     success: (res) => {
+       // 发送用户信息到服务器
+     }
+   })
+   ```
+
+3. **支付调用**
+   ```javascript
+   // 微信支付
+   wx.requestPayment({
+     timeStamp: '',
+     nonceStr: '',
+     package: '',
+     signType: 'MD5',
+     paySign: '',
+     success: function(res) {
+       // 支付成功
+     }
+   })
+   ```
+
+## 测试验证
+
+### 1. 开发者工具测试
+- 使用微信开发者工具
+- 测试登录授权流程
+- 测试支付功能(需要真机)
+
+### 2. 真机测试
+- 扫码体验版小程序
+- 测试完整业务流程
+- 验证支付功能
+
+### 3. 接口测试
+```bash
+# 测试登录接口
+curl -X POST "https://your-domain.com/api/login" \
+  -H "Content-Type: application/json" \
+  -d '{"code":"微信登录code","channel":"wechat_mini_program"}'
+
+# 测试支付接口
+curl -X POST "https://your-domain.com/api/payment/create" \
+  -H "Content-Type: application/json" \
+  -d '{"amount":100,"channel":"wechat_mini_program","payment_type":"wechat"}'
+```
+
+## 注意事项
+
+1. **域名配置**
+   - 必须使用HTTPS协议
+   - 域名需要备案
+   - 需要在微信公众平台配置合法域名
+
+2. **支付配置**
+   - 需要开通微信支付
+   - 配置支付回调地址
+   - 测试环境和生产环境分别配置
+
+3. **用户授权**
+   - 获取用户信息需要用户主动授权
+   - 不能强制用户授权
+   - 需要做好授权失败的处理
+
+4. **版本发布**
+   - 开发完成后需要提交审核
+   - 审核通过后才能发布
+   - 建议先发布体验版测试
+
+## 常见问题
+
+### Q1: AppId和AppSecret在哪里获取?
+A: 在微信公众平台的「开发」-「开发管理」-「开发设置」中获取。
+
+### Q2: 为什么不支持支付宝支付?
+A: 微信小程序只支持微信支付,不支持第三方支付。
+
+### Q3: 如何测试支付功能?
+A: 支付功能需要在真机上测试,开发者工具无法测试支付。
+
+### Q4: 登录授权失败怎么办?
+A: 检查域名配置、AppId配置,确保小程序已发布或设置为体验版。
+
+## 相关链接
+
+- [微信小程序开发文档](https://developers.weixin.qq.com/miniprogram/dev/framework/)
+- [微信支付开发文档](https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php)
+- [微信公众平台](https://mp.weixin.qq.com/)
+- [微信开发者工具](https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html)