62 lines
3.9 KiB
SQL
62 lines
3.9 KiB
SQL
SET NAMES utf8mb4;
|
|
|
|
SET @provider_order_exists=(SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='orders' AND COLUMN_NAME='provider_order_no');
|
|
SET @provider_order_sql=IF(@provider_order_exists=0,'ALTER TABLE orders ADD COLUMN provider_order_no VARCHAR(100) NOT NULL DEFAULT '''' AFTER channel','SELECT 1');
|
|
PREPARE provider_order_stmt FROM @provider_order_sql;
|
|
EXECUTE provider_order_stmt;
|
|
DEALLOCATE PREPARE provider_order_stmt;
|
|
|
|
SET @checkout_url_exists=(SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='orders' AND COLUMN_NAME='checkout_url');
|
|
SET @checkout_url_sql=IF(@checkout_url_exists=0,'ALTER TABLE orders ADD COLUMN checkout_url VARCHAR(1000) NOT NULL DEFAULT '''' AFTER provider_order_no','SELECT 1');
|
|
PREPARE checkout_url_stmt FROM @checkout_url_sql;
|
|
EXECUTE checkout_url_stmt;
|
|
DEALLOCATE PREPARE checkout_url_stmt;
|
|
|
|
SET @payment_payload_exists=(SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='orders' AND COLUMN_NAME='payment_payload');
|
|
SET @payment_payload_sql=IF(@payment_payload_exists=0,'ALTER TABLE orders ADD COLUMN payment_payload MEDIUMTEXT NULL AFTER checkout_url','SELECT 1');
|
|
PREPARE payment_payload_stmt FROM @payment_payload_sql;
|
|
EXECUTE payment_payload_stmt;
|
|
DEALLOCATE PREPARE payment_payload_stmt;
|
|
|
|
SET @paid_amount_exists=(SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='orders' AND COLUMN_NAME='paid_amount_cent');
|
|
SET @paid_amount_sql=IF(@paid_amount_exists=0,'ALTER TABLE orders ADD COLUMN paid_amount_cent INT UNSIGNED NULL AFTER amount_cent','SELECT 1');
|
|
PREPARE paid_amount_stmt FROM @paid_amount_sql;
|
|
EXECUTE paid_amount_stmt;
|
|
DEALLOCATE PREPARE paid_amount_stmt;
|
|
|
|
SET @payment_notified_exists=(SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='orders' AND COLUMN_NAME='payment_notified_at');
|
|
SET @payment_notified_sql=IF(@payment_notified_exists=0,'ALTER TABLE orders ADD COLUMN payment_notified_at DATETIME(3) NULL AFTER paid_at','SELECT 1');
|
|
PREPARE payment_notified_stmt FROM @payment_notified_sql;
|
|
EXECUTE payment_notified_stmt;
|
|
DEALLOCATE PREPARE payment_notified_stmt;
|
|
|
|
SET @provider_order_index_exists=(SELECT COUNT(*) FROM information_schema.STATISTICS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='orders' AND INDEX_NAME='idx_order_provider_no');
|
|
SET @provider_order_index_sql=IF(@provider_order_index_exists=0,'ALTER TABLE orders ADD KEY idx_order_provider_no (provider_order_no)','SELECT 1');
|
|
PREPARE provider_order_index_stmt FROM @provider_order_index_sql;
|
|
EXECUTE provider_order_index_stmt;
|
|
DEALLOCATE PREPARE provider_order_index_stmt;
|
|
|
|
CREATE TABLE IF NOT EXISTS payment_events (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
event_id VARCHAR(100) NOT NULL,
|
|
order_no VARCHAR(40) NOT NULL,
|
|
channel VARCHAR(30) NOT NULL,
|
|
provider_order_no VARCHAR(100) NOT NULL DEFAULT '',
|
|
event_status VARCHAR(30) NOT NULL,
|
|
amount_cent INT UNSIGNED NOT NULL DEFAULT 0,
|
|
raw_payload MEDIUMTEXT NOT NULL,
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
PRIMARY KEY (id),
|
|
UNIQUE KEY uk_payment_event (event_id),
|
|
KEY idx_payment_event_order (order_no,created_at)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
INSERT INTO system_configs (config_key,config_value,value_type,description) VALUES
|
|
('payment.gateway.create_url','','string','统一支付网关创建支付地址'),
|
|
('payment.gateway.token','','secret','统一支付网关 Bearer Token'),
|
|
('payment.gateway.notify_secret','','secret','支付通知 HMAC-SHA256 密钥'),
|
|
('payment.gateway.notify_url','','string','本系统支付通知公网 HTTPS 地址'),
|
|
('payment.gateway.return_url','','string','支付完成后的客户端返回地址'),
|
|
('payment.gateway.timeout_seconds','10','number','支付网关请求超时秒数')
|
|
ON DUPLICATE KEY UPDATE description=VALUES(description),value_type=VALUES(value_type);
|