feat: 真实支付配置 + 修复 yansongda 配置结构 bug + 后台 AI 实时进度
- 支付设置:支付宝/微信各自支持正式/沙箱网关环境,凭据字段补全(支付宝公钥、微信商户证书私钥/平台证书 PEM),密钥可直接粘贴 PEM 文本(yansongda 支持字符串) - 修复关键 bug:yansongda 配置结构错误(app_id 等在 default 租户外,真实网关拿不到配置),现按 alipay.default / wechat.default 正确传入,并用 _force 保证每次调用生效 - 后台 AI 设置页新增 WebSocket 实时审核进度(ai.moderation.* 事件),未连接时降级提示 - 部署文档:明确 queue:work 与 workerman:serve 等价、dev:watch 用法 - 测试:支付宝/微信配置结构回归 + AI 设置页加载
This commit is contained in:
@@ -54,6 +54,7 @@ class AdminPagesTest extends TestCase
|
||||
{
|
||||
$this->actingAs($this->admin)->get('/admin/plugins')->assertOk();
|
||||
$this->actingAs($this->admin)->get('/admin/payments')->assertOk();
|
||||
$this->actingAs($this->admin)->get('/admin/ai-settings')->assertOk();
|
||||
}
|
||||
|
||||
public function test_guest_is_redirected_to_login(): void
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Tests\Feature;
|
||||
|
||||
use App\Models\Setting;
|
||||
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||
use Plugins\Neatstudio\Payment\Services\PaymentManager;
|
||||
use Tests\TestCase;
|
||||
|
||||
class PaymentGatewayConfigTest extends TestCase
|
||||
{
|
||||
use RefreshDatabase;
|
||||
|
||||
public function test_alipay_config_lands_in_default_tenant(): void
|
||||
{
|
||||
Setting::set('pay_alipay_mode', 'sandbox');
|
||||
Setting::set('pay_alipay_app_id', '2021000000000000');
|
||||
Setting::set('pay_alipay_app_secret', "-----BEGIN PRIVATE KEY-----\nAAAA\n-----END PRIVATE KEY-----");
|
||||
Setting::set('pay_alipay_public_key', "-----BEGIN PUBLIC KEY-----\nBBBB\n-----END PUBLIC KEY-----");
|
||||
|
||||
app(PaymentManager::class)->alipay();
|
||||
|
||||
$config = \Yansongda\Pay\get_provider_config('alipay');
|
||||
|
||||
$this->assertSame(\Yansongda\Pay\Pay::MODE_SANDBOX, $config['mode']);
|
||||
$this->assertSame('2021000000000000', $config['app_id']);
|
||||
$this->assertStringContainsString('PRIVATE KEY', $config['app_secret_cert']);
|
||||
$this->assertStringContainsString('PUBLIC KEY', $config['alipay_public_cert_path']);
|
||||
$this->assertStringContainsString('pay/notify', $config['notify_url']);
|
||||
}
|
||||
|
||||
public function test_wechat_config_lands_in_default_tenant(): void
|
||||
{
|
||||
Setting::set('pay_wechat_mode', 'normal');
|
||||
Setting::set('pay_wechat_mch_id', '1900000001');
|
||||
Setting::set('pay_wechat_mch_secret', 'api-v3-key');
|
||||
Setting::set('pay_wechat_mch_cert', "-----BEGIN PRIVATE KEY-----\nCCCC\n-----END PRIVATE KEY-----");
|
||||
Setting::set('pay_wechat_platform_cert', "-----BEGIN PUBLIC KEY-----\nDDDD\n-----END PUBLIC KEY-----");
|
||||
Setting::set('pay_wechat_app_id', 'wx123456');
|
||||
|
||||
app(PaymentManager::class)->wechat();
|
||||
|
||||
$config = \Yansongda\Pay\get_provider_config('wechat');
|
||||
|
||||
$this->assertSame(\Yansongda\Pay\Pay::MODE_NORMAL, $config['mode']);
|
||||
$this->assertSame('1900000001', $config['mch_id']);
|
||||
$this->assertSame('api-v3-key', $config['mch_secret_key']);
|
||||
$this->assertStringContainsString('PRIVATE KEY', $config['mch_secret_cert']);
|
||||
$this->assertStringContainsString('PUBLIC KEY', $config['mch_public_cert_path']);
|
||||
$this->assertSame('wx123456', $config['mp_app_id']);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user