zory před 1 týdnem
rodič
revize
4960d5c99a
2 změnil soubory, kde provedl 76 přidání a 1 odebrání
  1. 25 1
      app/controller/merchant/Order.php
  2. 51 0
      app/extra/douyin/Order.php

+ 25 - 1
app/controller/merchant/Order.php

@@ -206,7 +206,31 @@ class Order extends Base
             if (!is_array($param)) return error($param);
             $order = $this->mode->where("order_sn",$param['order'])->findOrEmpty();
             if ($order->isEmpty()) return error("订单数据异常");
-            return errorTrans("error.data");
+            $dyConfig = sConf("dy.");
+            $endStart = strtotime(date("Y-m-d ".$dyConfig['end_start'].":00"));
+            $endEnd = strtotime(date("Y-m-d ".$dyConfig['end_end'].":00"));
+            if (time() < $endStart) return error("为确保店铺安全,该时间内系统暂停核销功能!");
+            if (time() > $endEnd) return error("为确保店铺安全,该时间内系统暂停核销功能~");
+            if (empty($order['verify_id'])) {
+                $resp = (new \app\extra\douyin\Order)->config($this->getDyConfig())->token()->verifyOrder($order->toArray());
+                if ($resp['err_no'] <> 0) return error($resp['err_msg']);
+                $verify_id = $resp['data']['order_verify_results'][0]['certificate_verify_results'][0]['verify_id']??'';
+                $order->verify_id = $verify_id;
+                $order['verify_id'] = $verify_id;
+            }
+            $resps = (new \app\extra\douyin\Order)->config($this->getDyConfig())->token()->verifyOrderPush($order['order_id'],[$order['verify_id']]);
+            if ($resps['err_no'] <> 0) return error($resps['err_msg']);
+            $order->express_status = 2;
+            $order->status = 4;
+            $state = $order->save();
+            (new SaasOrderLife)->where("order_id",$order['order_id'])->update(['status' => 3]);
+            (new SaasOrderLog)->insertGetId([
+                'order_id'  => $param['order'],
+                "title"     => "完成核销",
+                "remark"    => "管理员手动完成就核销,该笔交易完成"
+            ]);
+            if (!$state) return errorTrans("error.data");
+            return successTrans("success.data");
         } catch (\Throwable $throwable) {
             return error($throwable->getMessage());
         }

+ 51 - 0
app/extra/douyin/Order.php

@@ -46,4 +46,55 @@ class Order extends Base
         return Http::asJson()->withHeaders($this->header)->post($this->gateway."api/apps/trade/v2/toolkit/change_lock_status/",$param)->array();
     }
 
+    /**
+     * 验券
+     * @param array $data
+     * @return array
+     */
+    public function verifyOrder(array $data = []): array
+    {
+        $param = [
+            "open_id"   => $data['open_id'],
+            "order_entry_schema" => [
+                "path" => "pages/order/info",
+                "params" => json_encode([
+                    "order" => $data['order_sn']
+                ])
+            ],
+            "order_info_list" => [
+                [
+                    "certificate_info_list" => [
+                        [
+                            "book_info" => [
+                                "book_start_time" => time(),
+                                "book_end_time" => strtotime("+2 day")
+                            ],
+                            "certificate_id" => $data['certificate_id']
+                        ]
+                    ],
+                    "lock_key" => $data['lock_key'],
+                    "order_id" => $data['order_id']
+                ]
+            ],
+            "poi_id" => $data['poi_id'],
+            "verify_token" => $data['lock_key']
+        ];
+        return Http::asJson()->withHeaders($this->header)->post($this->gateway."api/apps/trade/v2/toolkit/verify_local_certificates/",$param)->array();
+    }
+
+    /**
+     * 推结算状态
+     * @param string $order_id
+     * @param array $verify_id
+     * @return array
+     */
+    public function verifyOrderPush(string $order_id = "",array $verify_id = []): array
+    {
+        $param = [
+            "order_id"          => $order_id,
+            "verify_id_list"    => $verify_id
+        ];
+        return Http::asJson()->withHeaders($this->header)->post($this->gateway."api/apps/trade/v2/toolkit/push_service_done/",$param)->array();
+    }
+
 }