Преглед изворни кода

PayStack支付支持自定义邮件、平台记录自定义参数订单号

kevin_zhangl пре 3 година
родитељ
комит
0afa234614
2 измењених фајлова са 26 додато и 4 уклоњено
  1. 12 3
      common/models/forms/ApproachOrderForm.php
  2. 14 1
      frontendEle/src/views/shop/order.vue

+ 12 - 3
common/models/forms/ApproachOrderForm.php

@@ -119,7 +119,7 @@ class ApproachOrderForm extends Model
             // 管理员修改订单状态
             'adminStatus' => ['sn', 'status'],
             // 管理员修改订单状态
-            'verifyPayStack' => ['sn', 'remark'],
+            'verifyPayStack' => ['sn', 'remark', 'email'],
             // 会员下单
             'userOrder' => ['type','addressId', 'payType','goodsId','goodsNum', 'remark', 'payPassword', 'email'],
         ];
@@ -269,7 +269,7 @@ class ApproachOrderForm extends Model
      * 校验PayStack支付,更新订单状态.同步到正式订单.
      * @throws Exception
      */
-    public function verifyPayStack()
+    public function verifyPayStack(): ?ApproachOrder
     {
         if (!$this->validate()) {
             return null;
@@ -291,13 +291,22 @@ class ApproachOrderForm extends Model
             $this->_model->STATUS = \Yii::$app->params['orderStatus']['paid']['value'];
             $this->_model->REMARK = json_encode($this->remark);
             $this->_model->PAY_AT = Date::nowTime();
+            $this->_model->EMAIL = $this->email;
             if (!$this->_model->save()) {
                 throw new Exception(Form::formatErrorsForApi($this->_model->getErrors()));
             }
+            // 更新订单商品的支付Email
+            ApproachOrderGoods::updateAll(['EMAIL' => $this->email], 'ORDER_SN = :ORDER_SN', [':ORDER_SN' => $this->sn]);
+
 
             // 同步准订单到正式订单
             Order::insertOne($this->_model->toArray());
-            OrderGoods::batchInsert(ApproachOrderGoods::findAllAsArray('ORDER_SN = :ORDER_SN', [':ORDER_SN' => $this->sn]));
+            // 同步准订单商品到正式订单商品
+            $approachOrderGoods = ApproachOrderGoods::findAllAsArray('ORDER_SN = :ORDER_SN', [':ORDER_SN' => $this->sn]);
+            foreach ($approachOrderGoods as &$approachOrderGood) {
+                $approachOrderGood['EMAIL'] = $this->email;
+            }
+            OrderGoods::batchInsert($approachOrderGoods);
 
             $transaction->commit();
         } catch (Exception $e) {

+ 14 - 1
frontendEle/src/views/shop/order.vue

@@ -153,6 +153,7 @@
                 :lastname="form.lastname"
                 :amount="form.amount * 100"
                 :email="form.email"
+                :metadata="form.metadata"
                 :currency="form.currency"
                 :paystackkey="form.publicKey"
                 :reference="reference"
@@ -196,6 +197,7 @@
                 category_type: '',
                 prefixSign: '¥',
                 unit: '元',
+                sn: '',
 
                 visible: false,
                 payStackLoading: false,
@@ -207,6 +209,16 @@
                     email: userInfo.userEmail(),
                     amount: 0,  // kobo
                     orderSn: '',
+                    metadata: {
+                        cart_id: this.sn,
+                        custom_fields: [
+                            {
+                                "display_name": "orderSn",
+                                "variable_name": "orderSn",
+                                "value": this.sn
+                            },
+                        ]
+                    },
                 },
             }
         },
@@ -344,6 +356,7 @@
 
                             this.form.orderSn = response.SN
                             this.form.amount = this.cashSum
+                            this.form.metadata.custom_fields[0].value = response.SN
                             this.visible = true
                         }).catch(() => {
                             this.submitButtonStat = true
@@ -471,7 +484,7 @@
 
                 this.payStackLoading = true
                 // 支付成功,更新订单
-                return network.postData('shop/verify-order', { sn: this.form.orderSn, remark: response }).then(_ => {
+                return network.postData('shop/verify-order', { sn: this.form.orderSn, remark: response, email: this.form.email }).then(_ => {
                     this.$message({
                         message: 'Success!',
                         type: 'success'