字体预加载
Home
avatar

翻过墙

翻过墙

dujiaoka-发卡平台

dujiaoka 是一个开源的自动发卡平台,支持多种支付方式,具有商品管理、订单处理、自动发货等功能。它可以帮助个人或小型企业快速搭建自己的数字商品销售平台,是电商创业的理想选择。

主要特性

🛒 商品管理

  • 商品分类: 支持多级商品分类管理
  • 库存管理: 实时库存监控和预警
  • 价格设置: 支持多种价格策略和优惠券
  • 商品展示: 美观的商品展示页面

💳 支付系统

  • 多支付方式: 支持支付宝、微信、PayPal等
  • 支付接口: 集成主流支付平台API
  • 订单管理: 完整的订单生命周期管理
  • 退款处理: 支持自动和手动退款

🚚 自动发货

  • 卡密管理: 支持批量导入和管理卡密
  • 自动发货: 支付成功后自动发送商品
  • 发货通知: 邮件、短信等多种通知方式
  • 发货记录: 完整的发货历史记录

🔧 管理功能

  • 用户管理: 用户注册、登录、权限管理
  • 数据统计: 销售数据统计和分析
  • 系统设置: 灵活的系统和主题配置
  • API接口: 提供RESTful API接口

项目地址

dujiaoka - Github dujiaoka - 官网

安装配置

1. 环境要求

# 系统要求
- PHP >= 7.4
- MySQL >= 5.7
- Nginx/Apache
- Redis (可选)

# PHP扩展要求
- PDO PHP Extension
- OpenSSL PHP Extension
- Mbstring PHP Extension
- Tokenizer PHP Extension
- XML PHP Extension
- Ctype PHP Extension
- JSON PHP Extension
- BCMath PHP Extension

2. 安装步骤

# 1. 克隆项目
git clone https://github.com/assimon/dujiaoka.git
cd dujiaoka

# 2. 安装依赖
composer install

# 3. 复制配置文件
cp .env.example .env

# 4. 生成应用密钥
php artisan key:generate

# 5. 配置数据库
php artisan migrate

# 6. 导入基础数据
php artisan db:seed

# 7. 设置目录权限
chmod -R 755 storage/
chmod -R 755 bootstrap/cache/

3. Docker部署

# docker-compose.yml
version: '3'
services:
  dujiaoka:
    image: dujiaoka/dujiaoka:latest
    container_name: dujiaoka
    ports:
      - "80:80"
    environment:
      - DB_HOST=mysql
      - DB_DATABASE=dujiaoka
      - DB_USERNAME=root
      - DB_PASSWORD=password
    volumes:
      - ./storage:/var/www/html/storage
      - ./public:/var/www/html/public
    depends_on:
      - mysql
      - redis

  mysql:
    image: mysql:5.7
    container_name: dujiaoka-mysql
    environment:
      - MYSQL_ROOT_PASSWORD=password
      - MYSQL_DATABASE=dujiaoka
    volumes:
      - mysql_data:/var/lib/mysql

  redis:
    image: redis:alpine
    container_name: dujiaoka-redis

volumes:
  mysql_data:

基础配置

1. 环境配置

# .env 配置文件
APP_NAME=Dujiaoka
APP_ENV=production
APP_KEY=base64:your-app-key
APP_DEBUG=false
APP_URL=https://your-domain.com

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=dujiaoka
DB_USERNAME=root
DB_PASSWORD=password

CACHE_DRIVER=redis
SESSION_DRIVER=redis
QUEUE_CONNECTION=redis

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=your-email@gmail.com
MAIL_PASSWORD=your-password
MAIL_ENCRYPTION=tls

2. 支付配置

// 支付宝配置
'ali' => [
    'app_id' => env('ALI_APP_ID'),
    'private_key' => env('ALI_PRIVATE_KEY'),
    'public_key' => env('ALI_PUBLIC_KEY'),
    'notify_url' => env('ALI_NOTIFY_URL'),
    'return_url' => env('ALI_RETURN_URL'),
],

// 微信支付配置
'wechat' => [
    'app_id' => env('WECHAT_APP_ID'),
    'mch_id' => env('WECHAT_MCH_ID'),
    'key' => env('WECHAT_KEY'),
    'notify_url' => env('WECHAT_NOTIFY_URL'),
],

// PayPal配置
'paypal' => [
    'client_id' => env('PAYPAL_CLIENT_ID'),
    'client_secret' => env('PAYPAL_CLIENT_SECRET'),
    'mode' => env('PAYPAL_MODE', 'sandbox'),
],

3. 邮件配置

// 邮件模板配置
'email' => [
    'order_success' => [
        'subject' => '订单支付成功通知',
        'template' => 'emails.order_success',
    ],
    'order_delivered' => [
        'subject' => '商品发货通知',
        'template' => 'emails.order_delivered',
    ],
    'order_refund' => [
        'subject' => '订单退款通知',
        'template' => 'emails.order_refund',
    ],
],

高级功能

1. 商品管理

// 商品模型示例
class Product extends Model
{
    protected $fillable = [
        'name', 'description', 'price', 'stock',
        'category_id', 'status', 'sort'
    ];

    public function category()
    {
        return $this->belongsTo(Category::class);
    }

    public function cards()
    {
        return $this->hasMany(Card::class);
    }

    public function getStockAttribute($value)
    {
        return $this->cards()->where('status', 'unused')->count();
    }
}

2. 订单处理

// 订单处理服务
class OrderService
{
    public function createOrder($data)
    {
        DB::transaction(function () use ($data) {
            // 创建订单
            $order = Order::create([
                'order_no' => $this->generateOrderNo(),
                'user_id' => auth()->id(),
                'product_id' => $data['product_id'],
                'quantity' => $data['quantity'],
                'total_amount' => $data['total_amount'],
                'payment_method' => $data['payment_method'],
            ]);

            // 锁定库存
            $this->lockStock($order->product_id, $order->quantity);

            return $order;
        });
    }

    public function processPayment($orderId, $paymentData)
    {
        $order = Order::findOrFail($orderId);
        
        // 验证支付
        if ($this->verifyPayment($paymentData)) {
            $order->update(['status' => 'paid']);
            
            // 自动发货
            $this->autoDeliver($order);
        }
    }
}

3. 自动发货

// 自动发货服务
class DeliveryService
{
    public function autoDeliver($order)
    {
        $cards = Card::where('product_id', $order->product_id)
                    ->where('status', 'unused')
                    ->limit($order->quantity)
                    ->get();

        if ($cards->count() < $order->quantity) {
            throw new Exception('库存不足');
        }

        foreach ($cards as $card) {
            $card->update([
                'status' => 'used',
                'order_id' => $order->id,
                'used_at' => now(),
            ]);
        }

        // 发送发货通知
        $this->sendDeliveryNotification($order, $cards);
    }

    private function sendDeliveryNotification($order, $cards)
    {
        $data = [
            'order' => $order,
            'cards' => $cards,
        ];

        Mail::send('emails.order_delivered', $data, function ($message) use ($order) {
            $message->to($order->user->email)
                    ->subject('商品发货通知');
        });
    }
}

使用场景

1. 数字商品销售

# 数字商品销售
适用商品:
  - 游戏充值卡
  - 软件激活码
  - 会员账号
  - 教程资料
  - 虚拟货币
功能:
  - 自动发货
  - 库存管理
  - 订单跟踪
  - 售后服务

2. 在线教育

# 在线教育平台
适用场景:
  - 课程销售
  - 学习资料
  - 考试题库
  - 培训服务
功能:
  - 课程管理
  - 学习进度
  - 证书发放
  - 学习社区

3. 企业服务

# 企业服务
适用场景:
  - SaaS服务
  - API接口
  - 技术支持
  - 咨询服务
功能:
  - 服务订阅
  - 使用统计
  - 账单管理
  - 客户支持

性能优化

1. 缓存策略

// Redis缓存配置
'cache' => [
    'default' => 'redis',
    'stores' => [
        'redis' => [
            'driver' => 'redis',
            'connection' => 'cache',
            'lock_connection' => 'default',
        ],
    ],
],

// 缓存使用示例
class ProductService
{
    public function getProduct($id)
    {
        return Cache::remember("product:{$id}", 3600, function () use ($id) {
            return Product::with('category')->find($id);
        });
    }

    public function getProducts($categoryId = null)
    {
        $key = $categoryId ? "products:category:{$categoryId}" : 'products:all';
        
        return Cache::remember($key, 1800, function () use ($categoryId) {
            $query = Product::with('category')->where('status', 'active');
            
            if ($categoryId) {
                $query->where('category_id', $categoryId);
            }
            
            return $query->orderBy('sort')->get();
        });
    }
}

2. 队列处理

// 队列配置
'queue' => [
    'default' => 'redis',
    'connections' => [
        'redis' => [
            'driver' => 'redis',
            'connection' => 'default',
            'queue' => env('REDIS_QUEUE', 'default'),
            'retry_after' => 90,
            'block_for' => null,
        ],
    ],
],

// 队列任务示例
class ProcessPaymentJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    public $order;

    public function __construct($order)
    {
        $this->order = $order;
    }

    public function handle()
    {
        // 处理支付逻辑
        $paymentService = new PaymentService();
        $paymentService->process($this->order);
    }
}

3. 数据库优化

-- 数据库索引优化
CREATE INDEX idx_orders_user_id ON orders(user_id);
CREATE INDEX idx_orders_status ON orders(status);
CREATE INDEX idx_orders_created_at ON orders(created_at);
CREATE INDEX idx_cards_product_id ON cards(product_id);
CREATE INDEX idx_cards_status ON cards(status);

-- 查询优化示例
class OrderRepository
{
    public function getUserOrders($userId, $page = 1, $perPage = 20)
    {
        return Order::with(['product', 'cards'])
                    ->where('user_id', $userId)
                    ->orderBy('created_at', 'desc')
                    ->paginate($perPage);
    }

    public function getPendingOrders()
    {
        return Order::with('product')
                    ->where('status', 'pending')
                    ->where('created_at', '>=', now()->subHours(24))
                    ->get();
    }
}

常见问题

Q: 如何添加新的支付方式?

A: 在支付配置中添加新的支付接口,实现相应的支付验证和回调处理逻辑。

Q: 如何处理库存不足的情况?

A: 实现库存预警机制,当库存低于设定阈值时自动发送通知,并暂停商品销售。

Q: 如何优化自动发货速度?

A: 使用队列处理发货任务,优化数据库查询,使用缓存减少重复计算。

Q: 如何实现多商户功能?

A: 在用户表中添加商户标识,在商品和订单中关联商户信息,实现商户权限管理。

总结

dujiaoka 是一个功能完善的自动发卡平台,具有以下优势:

  • 完全免费开源
  • 功能完善
  • 易于部署
  • 扩展性强
  • 安全可靠
  • 性能优异

dujiaoka 特别适合需要搭建数字商品销售平台的个人和企业。

使用dujiaoka时请确保遵守相关法律法规,合理使用支付接口,注意数据安全。

dujiaoka 发卡 开源 电商 工具 免费