feat: 收款与提现商户拆分,支持后台上传证书

收款仍用 mch_id/mch_key;提现优先 withdraw_mch_id(空则回落);证书分 pay/withdraw 目录落盘。退款逻辑未改。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
XingQue
2026-07-21 03:52:55 +08:00
parent 98b58f8058
commit 8e82a8457d
6 changed files with 328 additions and 16 deletions

View File

@@ -13,13 +13,34 @@ class Club(QModel):
status = models.IntegerField(default=1, verbose_name='1启用0停用')
wx_appid = models.CharField(max_length=32, blank=True, default='')
wx_secret = models.CharField(max_length=128, blank=True, default='')
mch_id = models.CharField(max_length=32, blank=True, default='')
pay_app_id = models.CharField(max_length=32, blank=True, default='')
mch_key = models.CharField(max_length=128, blank=True, default='', verbose_name='APIv2商户密钥')
api_v3_key = models.CharField(max_length=128, blank=True, default='', verbose_name='APIv3密钥')
cert_serial_no = models.CharField(max_length=64, blank=True, default='')
private_key_path = models.CharField(max_length=255, blank=True, default='')
platform_cert_dir = models.CharField(max_length=255, blank=True, default='')
# —— 点单/会员等收款商户V2 JSAPI退款也应对齐这套——
mch_id = models.CharField(max_length=32, blank=True, default='', verbose_name='收款商户号')
pay_app_id = models.CharField(max_length=32, blank=True, default='', verbose_name='收款AppID')
mch_key = models.CharField(max_length=128, blank=True, default='', verbose_name='收款APIv2密钥')
pay_cert_path = models.CharField(
max_length=512, blank=True, default='',
verbose_name='收款商户证书路径',
help_text='apiclient_cert.pem退款/V2 证书用',
)
pay_key_path = models.CharField(
max_length=512, blank=True, default='',
verbose_name='收款商户私钥路径',
help_text='apiclient_key.pem退款/V2 证书用',
)
# —— 提现/转账商户V3可与收款商户号不同——
withdraw_mch_id = models.CharField(
max_length=32, blank=True, default='',
verbose_name='提现商户号',
help_text='空则回落收款商户号 mch_id',
)
api_v3_key = models.CharField(max_length=128, blank=True, default='', verbose_name='提现APIv3密钥')
cert_serial_no = models.CharField(max_length=64, blank=True, default='', verbose_name='提现证书序列号')
private_key_path = models.CharField(
max_length=512, blank=True, default='', verbose_name='提现商户私钥路径',
)
platform_cert_dir = models.CharField(
max_length=512, blank=True, default='', verbose_name='提现平台证书目录',
)
official_appid = models.CharField(max_length=32, blank=True, default='')
official_secret = models.CharField(max_length=128, blank=True, default='')
official_token = models.CharField(max_length=64, blank=True, default='')