Procházet zdrojové kódy

跨境商品支付接入

kevin před 1 rokem
rodič
revize
3fcd4a01f6

+ 38 - 0
common/models/forms/ApproachOrderForm.php

@@ -232,6 +232,44 @@ class ApproachOrderForm extends Model
         return $this->_model;
     }
 
+    public function verifyPayUPOP(): ?ApproachOrder
+    {
+        if (!$this->validate()) {
+            return null;
+        }
+
+        // 支付校验
+        $db = \Yii::$app->db;
+        $transaction = $db->beginTransaction();
+        try {
+            // 更新准订单状态为已支付
+            $this->_model->STATUS = $this->status;
+            $this->_model->NOTE = json_encode($this->note);
+            $this->_model->PAY_AT = strtotime($this->note['pay_time']);
+            if (!$this->_model->save()) {
+                throw new Exception(Form::formatErrorsForApi($this->_model->getErrors()));
+            }
+
+            // 同步准订单到正式订单
+            Order::insertOne($this->_model->toArray());
+            // 同步准订单商品到正式订单商品
+            $approachOrderGoods = ApproachOrderGoods::findAllAsArray('ORDER_SN = :ORDER_SN', [':ORDER_SN' => $this->sn]);
+            OrderGoods::batchInsert($approachOrderGoods);
+
+            // 删除中间表
+            ApproachOrder::deleteAll('SN=:SN', [':SN' => $this->sn]);
+            ApproachOrderGoods::deleteAll('ORDER_SN = :ORDER_SN', [':ORDER_SN' => $this->sn]);
+
+            $transaction->commit();
+        } catch (Exception $e) {
+            $transaction->rollBack();
+            $this->addError('edit', $e->getFile() . '  ' . $e->getMessage());
+            return null;
+        }
+
+        return $this->_model;
+    }
+
     /**
      * BV分期
      *

+ 35 - 46
frontendApi/modules/v1/controllers/ShopController.php

@@ -781,51 +781,40 @@ class ShopController extends BaseController {
             return http_response_code(200);
         }
         // 解密
-        $response = (new PaySign())->decodeData($encryptKey, $signData, $encryptData);
-        LoggerTool::info([sprintf('UPOP - webhook: (error). agencyId {%s}', json_encode($response))]);
-
-
-//        try {
-//            // 订单状态
-//            $orderStatus = ($data['Status'] == '1') ? \Yii::$app->params['orderStatus']['paid']['value'] : \Yii::$app->params['orderStatus']['failPaid']['value'];
-//
-//            $oderSn = $data['RefNo'] ?? '';
-//
-//            $formModel =  new ApproachOrderForm();
-//            $formModel->scenario = 'verifyPay';
-//            $load = [
-//                'sn' => $oderSn,
-//                'scenario' => 'verifyPay',
-//                'status' => $orderStatus,
-//                'note' => [
-//                    'MerchantCode' => $data['MerchantCode'],
-//                    'PaymentId' => $data['PaymentId'],
-//                    'status' => $data['Status'],
-//                    'Signature' => $data['Signature'],
-//                    'Currency' => $data['Currency'],
-//                    'Amount' => $data['Amount'],
-//                    'TransId' => $data['TransId'],
-//                    'TranDate' => $data['TranDate'],
-//                    'BankMID' => $data['BankMID'],
-//                    'CCNo' => $data['CCNo'],
-//
-//                ],
-//            ];
-//
-//            if ($formModel->load($load, '') && $result = $formModel->verifyPayOnline()) {
-//                LoggerTool::info($result);
-//
-//                echo 'RECEIVEOK';
-//                return http_response_code(200);
-//            } else {
-//                echo 'RECEIVEOK';
-//                LoggerTool::error(Form::formatErrorsForApi($formModel->getErrors()));
-//                return http_response_code(200);
-//            }
-//        } catch (\Exception $e) {
-//            echo 'RECEIVEOK';
-//            LoggerTool::error(sprintf('actionUpopWebhookError: File[%s], Line:[%s], Message[%s]', $e->getFile(), $e->getLine(), $e->getMessage()));
-//            return http_response_code(200);
-//        }
+        $payload = (new PaySign())->decodeData($encryptKey, $signData, $encryptData);
+        if (!$payload) {
+            LoggerTool::error(['UPOP - webhook: (error). payload is false']);
+
+            echo 'success';
+            return http_response_code(200);
+        }
+
+        try {
+            // 支付状态
+            $orderStatus = ($payload['pay_result'] == '1') ? \Yii::$app->params['orderStatus']['paid']['value'] : \Yii::$app->params['orderStatus']['failPaid']['value'];
+
+            $formModel =  new ApproachOrderForm();
+            $formModel->scenario = 'verifyPay';
+            $load = [
+                'sn' => $payload['order_no'],
+                'scenario' => 'verifyPay',
+                'status' => $orderStatus,
+                'note' => $payload,
+            ];
+
+            if ($formModel->load($load, '') && $result = $formModel->verifyPayUPOP()) {
+                LoggerTool::info([sprintf('UPOP - webhook: (success). orderNo: {%s}', $payload['order_no'])]);
+
+                echo 'success';
+            } else {
+                echo 'success';
+                LoggerTool::error([sprintf('UPOP - webhook: (error). orderNo: {%s}', $payload['order_no'])]);
+            }
+            return http_response_code(200);
+        } catch (\Exception $e) {
+            echo 'success';
+            LoggerTool::error([sprintf('UPOP - webhook: (exp). orderNo: {%s}, File[%s], Line:[%s], Message[%s]', $payload['order_no'], $e->getFile(), $e->getLine(), $e->getMessage())]);
+            return http_response_code(200);
+        }
     }
 }