Explorar el Código

feat(wechatpay): 新增微信支付转账账单功能
- 创建微信支付转账账单数据表结构
- 定义转账账单实体类与模型类
- 添加转账账单状态枚举及中文描述
- 支持记录用户ID、商户号、转账金额等关键信息
- 实现转账状态的完整生命周期管理- 提供收款用户OpenID与姓名存储字段

runphp hace 4 meses
padre
commit
0b568ee626

+ 47 - 0
database/migrations/20251031083213_wechatpay_transfer_bill.php

@@ -0,0 +1,47 @@
+<?php
+
+declare(strict_types=1);
+
+use Phinx\Migration\AbstractMigration;
+
+/**
+ * 微信支付转账账单表
+ * 
+ * 用于存储微信支付转账账单信息
+ */
+final class WechatpayTransferBill extends AbstractMigration
+{
+    /**
+     * Change Method.
+     *
+     * Write your reversible migrations using this method.
+     *
+     * More information on writing migrations is available here:
+     * https://book.cakephp.org/phinx/0/en/migrations.html#the-change-method
+     *
+     * Remember to call "create()" or "update()" and NOT "save()" when working
+     * with the Table class.
+     */
+    public function change(): void
+    {
+        $this->table('wechatpay_transfer_bill', ['comment' => '微信支付转账账单表'])
+            ->addColumn('user_id', 'integer', ['signed' => false, 'comment' => '用户ID 用户表的主键id'])
+            ->addColumn('mch_id', 'string', ['limit' => 32, 'comment' => '商户号 微信支付分配的商户号'])
+            ->addColumn('out_bill_no', 'string', ['limit' => 32, 'comment' => '商户单号 商户系统内部的商家单号,要求此参数只能由数字、大小写字母组成,在商户系统内部唯一'])
+            ->addColumn('transfer_bill_no', 'string', ['limit' => 32, 'null' => true, 'comment' => '商家转账订单号 商家转账订单的主键,唯一定义此资源的标识'])
+            ->addColumn('appid', 'string', ['limit' => 32, 'comment' => '商户AppID 微信开放平台和微信公众平台为开发者的应用程序提供的唯一标识'])
+            ->addColumn('state', 'enum', [
+                'values' => ['APPLYING', 'ACCEPTED', 'PROCESSING', 'WAIT_USER_CONFIRM', 'TRANSFERING', 'SUCCESS', 'FAIL', 'CANCELING', 'CANCELLED'],
+                'comment' => '单据状态 APPLYING:申请中;ACCEPTED:转账已受理;PROCESSING:转账锁定资金中;WAIT_USER_CONFIRM:待收款用户确认;TRANSFERING:转账中;SUCCESS:转账成功;FAIL:转账失败;CANCELING:转账撤销中;CANCELLED:转账撤销完成'
+            ])
+            ->addColumn('transfer_amount', 'integer', ['signed' => false, 'comment' => '转账金额 转账金额单位为"分"'])
+            ->addColumn('transfer_remark', 'string', ['limit' => 32, 'comment' => '转账备注 单条转账备注(微信用户会收到该备注),UTF8编码,最多允许32个字符'])
+            ->addColumn('fail_reason', 'string', ['limit' => 255, 'null' => true, 'comment' => '失败原因 订单已失败或者已退资金时,会返回订单失败原因'])
+            ->addColumn('openid', 'string', ['limit' => 64, 'null' => true, 'comment' => '收款用户OpenID 用户在商户appid下的唯一标识'])
+            ->addColumn('user_name', 'string', ['limit' => 20, 'null' => true, 'comment' => '收款用户姓名 收款方真实姓名'])
+            ->addColumn('create_time', 'timestamp', ['comment' => '单据创建时间 单据受理成功时返回,按照使用rfc3339所定义的格式,格式为yyyy-MM-DDThh:mm:ss+TIMEZONE'])
+            ->addColumn('update_time', 'timestamp', ['comment' => '最后一次状态变更时间 单据最后更新时间,按照使用rfc3339所定义的格式,格式为yyyy-MM-DDThh:mm:ss+TIMEZONE'])
+            ->addIndex(['out_bill_no'], ['unique' => true, 'name' => 'uniq_out_bill_no'])
+            ->create();
+    }
+}

+ 16 - 0
src/Entity/WechatpayTransferBillEntity.php

@@ -0,0 +1,16 @@
+<?php
+declare(strict_types=1);
+namespace SixShop\WechatPay\Entity;
+
+
+use SixShop\Core\Entity\BaseEntity;
+
+class WechatpayTransferBillEntity extends BaseEntity
+{
+    protected function getOptions(): array
+    {
+        return [
+            'name' => 'wechatpay_transfer_bill',
+        ];
+    }
+}

+ 35 - 0
src/Enum/TransferBillStatusEnum.php

@@ -0,0 +1,35 @@
+<?php
+declare(strict_types=1);
+
+namespace SixShop\WechatPay\Enum;
+
+/**
+ * 微信转账账单状态枚举
+ */
+enum TransferBillStatusEnum: string
+{
+    case APPLYING = 'APPLYING';              // 申请中
+    case ACCEPTED = 'ACCEPTED';              // 转账已受理
+    case PROCESSING = 'PROCESSING';          // 转账锁定资金中
+    case WAIT_USER_CONFIRM = 'WAIT_USER_CONFIRM'; // 待收款用户确认
+    case TRANSFERING = 'TRANSFERING';        // 转账中
+    case SUCCESS = 'SUCCESS';                // 转账成功
+    case FAIL = 'FAIL';                      // 转账失败
+    case CANCELING = 'CANCELING';            // 转账撤销中
+    case CANCELLED = 'CANCELLED';            // 转账撤销完成
+
+    public function toString(): string
+    {
+        return match ($this) {
+            self::APPLYING => '申请中',
+            self::ACCEPTED => '转账已受理',
+            self::PROCESSING => '转账锁定资金中',
+            self::WAIT_USER_CONFIRM => '待收款用户确认',
+            self::TRANSFERING => '转账中',
+            self::SUCCESS => '转账成功',
+            self::FAIL => '转账失败',
+            self::CANCELING => '转账撤销中',
+            self::CANCELLED => '转账撤销完成',
+        };
+    }
+}

+ 19 - 0
src/Model/WechatpayTransferBillModel.php

@@ -0,0 +1,19 @@
+<?php
+declare(strict_types=1);
+namespace SixShop\WechatPay\Model;
+
+use think\Model;
+use SixShop\WechatPay\Enum\TransferBillStatusEnum;
+
+class WechatpayTransferBillModel extends Model
+{
+    protected function getOptions(): array
+    {
+        return [
+            'name' => 'wechatpay_transfer_bill',
+            'type' => [
+                'state' => TransferBillStatusEnum::class,
+            ],
+        ];
+    }
+}