zory 3 weken geleden
bovenliggende
commit
c5b2fa6e36
3 gewijzigde bestanden met toevoegingen van 163 en 26 verwijderingen
  1. 19 2
      app/controller/merchant/Goods.php
  2. 1 0
      app/extra/dyLife/BasicLife.php
  3. 143 24
      app/extra/dyLife/data/BaseData.php

+ 19 - 2
app/controller/merchant/Goods.php

@@ -144,10 +144,25 @@ class Goods extends Base
                     $skuData[$key]['specs'] = json_encode($value['specs']);
                 }
             }
+            $param['spu_id'] = CodeExtend::uniqidDate(18);
             unset($param['skuSpecs']);
             $param['line_price'] = $param['line_price'] * 100;
-            print_r($param);
-            return errorTrans("error.data");
+            $store = (new SaasStore)->where("poi_id",$request->user['store_id'])->findOrEmpty();
+            if ($store->isEmpty()) return errorTrans("error.data");
+            // 获取attr_key_value_map参数
+            $valMap = (new BaseData)->config([
+                "appid"     => sConf("wechat.appid"),
+                "secret"    => sConf("wechat.secret"),
+                "account"   => sConf("wechat.shop_id"),
+            ])->token()->getStoreCategoryTemplate($param['category_id'],$param['product_type']);
+            if (empty($valMap['product_attrs'])) return errorTrans("error.data");
+//            $data = (new BaseData)->config([
+//                "appid"     => sConf("wechat.mini_appid"),
+//                "secret"    => sConf("wechat.mini_secret"),
+//            ])->token()->createGoodsData($param,$skuData,$store->toArray(),$valMap);
+
+//            print_r($data);
+//            return errorTrans("error.data");
             $stateSku = false;
             if (!empty($skuData)) {
                 [$stateSku,$msg] = $this->skuData($skuData);
@@ -158,6 +173,8 @@ class Goods extends Base
             return successTrans("success.data");
         } catch (\Throwable $throwable) {
             echo $throwable->getLine()."\n";
+            echo $throwable->getFile()."\n";
+            echo $throwable->getMessage()."\n";
             return error($throwable->getMessage());
         }
     }

+ 1 - 0
app/extra/dyLife/BasicLife.php

@@ -86,6 +86,7 @@ class BasicLife
     public function curlPostApi(string $url = "", array $data = [], string $field = "data"): array
     {
         $result = Http::asJson()->withHeaders($this->header)->post($this->gateway.$url,$data)->array();
+        print_r($result);
         if(!empty($result[$field]))
         {
             return $result[$field];

+ 143 - 24
app/extra/dyLife/data/BaseData.php

@@ -4,6 +4,7 @@ namespace app\extra\dyLife\data;
 
 use app\extra\dyLife\BasicLife;
 use yzh52521\EasyHttp\Http;
+use function DI\string;
 
 class BaseData extends BasicLife
 {
@@ -14,40 +15,158 @@ class BaseData extends BasicLife
      * https://partner.open-douyin.com/docs/resource/zh-CN/local-life/develop/OpenAPI/general-capabilities/goods/save
      * https://open.douyin.com/goodlife/v1/goods/product/save/
      */
-    public function createGoodsData(array $data = []): array
+    public function createGoodsData(array $data = [],array $sku = [],array $store = [],array $valMap = []): array
     {
+        $product_attrs = $sku_attrs = [];
+        foreach ($valMap['product_attrs'] as $val) {
+            $keyVal = $this->getProductAttrs($val['key'],$data);
+            if (!empty($keyVal)) {
+                $product_attrs[$val['key']] = $keyVal;
+            }
+        }
+        foreach ($valMap['sku_attrs'] as $val) {
+            $keyVal = $this->getProductAttrs($val['key'],$data);
+            if (!empty($keyVal)) {
+                $sku_attrs[$val['key']] = $keyVal;
+            }
+        }
         $param = [
+            "account_id"    => $store['store_id'], // 商家id
             "product" => [
-                "account_name"  => "", // 商家名
+                "account_name"  => $store['poi_name'], // 商家名
                 "biz_line"      => 5, // 业务线 固定 5 小程序
-                "category_id"   => "", // 品类id
-                "product_name"  => "", // 商品名
-                "product_type"  => "", // 商品类型
-                "attr_key_value_map"    => [],
-                "out_id"        => "", // 第三方id
-                "out_url"       => "", // 第三方跳转链接,小程序商品必填
+                "category_id"   => $data['category_id']??0, // 品类id
+                "product_name"  => $data['product_name'], // 商品名
+                "product_type"  => $data['product_type'], // 商品类型
+                "attr_key_value_map"    => $product_attrs,
+                "out_id"        => $data['product_id'], // 第三方id
+                "out_url"       => json_encode([
+                    "app_id"    => sConf("wechat.mini_appid"),
+                    "params"    => json_encode(['goods' => $data['product_id']]),
+                    "path"      => "pages/goods/detail"
+                ]), // 第三方跳转链接,小程序商品必填
                 "pois"          => [
                     [
-                        "poi_id"    => "", // 门店POI
+                        "poi_id"    => $store['poi_id'], // 门店POI
                     ]
                 ],
-                "sold_end_time" => "", // 售卖结束时间
-                "sold_start_time"   => "", // 售卖开始时间
-                "spu_id"        => "", // spuid
-                "account_id"    => "", // 商家id
-                "sku"           => [
-                    "attr_key_value_map"    => [],
-                    "actual_amount" => "", // 售价 实际支付价格
-                    "sku_name"      => "", // sku名
-                    "status"        => 1,
-                    "stock"         => [
-                        "limit_type"    => "", // 库存上限类型,为2时stock_qty和avail_qty字段无意义 1 有限库存 2 无限库存
-                        "avail_qty"     => "", // 可用库存,limit_type=2时无意义,始终保证stock_qty=avail_qty+frozen_qty+sold_qty
-                    ]
-                ]
+                "sold_end_time" => strtotime($data['sold_start_times'][1]), // 售卖结束时间
+                "sold_start_time"   => strtotime($data['sold_start_times'][0]), // 售卖开始时间
+                "spu_id"        => (string)$data['spu_id'], // spuid
+                "account_id"    => $store['store_id'], // 商家id
             ]
         ];
-        return [];
+        if (empty($sku)) { // 单sku
+            $param['sku'] = [
+                "attr_key_value_map"    => $sku_attrs,
+                "actual_amount" => $data['price'], // 售价 实际支付价格
+                "sku_name"      => $data['product_name'], // sku名
+                "origin_amount" => $data['line_price'],
+                "status"        => 1,
+                "stock"         => [
+                    "limit_type"    => $data['limit_use_rule'], // 库存上限类型,为2时stock_qty和avail_qty字段无意义 1 有限库存 2 无限库存
+                    "avail_qty"     => $data['use_num_per_consume']??0, // 可用库存,limit_type=2时无意义,始终保证stock_qty=avail_qty+frozen_qty+sold_qty
+                ]
+            ];
+        } else { // 多sku
+
+        }
+        print_r($param);
+        return $this->curlPostApi("goodlife/v1/goods/product/save/",$param);
+    }
+
+
+    /**
+     * 参数处理
+     * @param string $key
+     * @param array $data
+     */
+    protected function getProductAttrs(string $key = "",array $data = [])
+    {
+        switch ($key)
+        {
+            case "EntryType": // 入口类型 1:H5 2:小程序 3:抖音 4:lynx
+                $return = "2";
+                break;
+            case "market_price": // 划线价格
+                $return = (string)$data['line_price'];
+                break;
+            case "can_no_use_date": // 不可使用日期
+                if ($data['can_no_use_date'] == 1) {
+                    $return = json_encode(["enable" => false]);
+                } else {
+                    $return = json_encode(["enable" => false]);
+                }
+                break;
+            case "image_list": // 封面图 图片比例:375:280
+                $image_list = json_decode($data['image_list'],true);
+                $return = json_encode([
+                    [
+                        "url"   => $image_list[0]['url']
+                    ]
+                ]);
+                break;
+            case "limit_use_rule": // 限制使用规则
+                if ($data['rec_person_type']==1) {
+                    $return = json_encode(["is_limit_use" => false]);
+                } else {
+                    $return = json_encode(['is_limit_use' => true, 'use_num_per_consume' => $data['rec_person_num_max']??0]);
+                }
+                break;
+            case "show_channel":
+                $return = (string) $data['show_channel'];
+                break;
+            case "use_date": // 使用日期 券码的可以核销日期,履约核销强依赖
+                if ($data['use_date_type'] == 1) { // 指定天数
+                    $return = json_encode([
+                        "use_date_type" => 2,
+                        "day_duration" => $data['day_duration']
+                    ]);
+                } else { // 指定日期
+                    $return = json_encode([
+                        "use_date_type" => 1,
+                        "use_start_date" => $data['use_times'][0],
+                        "use_end_date" => $data['use_times'][0]
+                    ]);
+                }
+                break;
+            case "use_time": // 使用时间 用户可以消费的时间
+                $return = json_encode([
+                    "use_time_type" => 1
+                ]);
+                break;
+            case "Notification": // 使用规则
+                $return = json_encode([
+                    [
+                        "title"     => "使用规则",
+                        "content"   => "到店出示券码核销"
+                    ]
+                ]);
+                break;
+            case "RefundPolicy": // 退款政策 1-允许退款 2-不可退款 3-有条件退
+                $return = "1";
+                break;
+            case "refund_need_merchant_confirm": // 退款是否需商家审核
+                $return = "true";
+                break;
+            case "code_source_type": // 券码生成方式 "1-抖音码 2-三方码 3-预导码
+                $return = (string)$data['code_source_type'];
+                break;
+            case "settle_type": // 收款方式 1-总店结算 2-分店结算
+                $return = (string)$data['code_source_type'];
+                break;
+            case "limit_rule": // 限制购买
+                if ($data['limit_rule_type'] == 2) {
+                    $return = json_encode(['is_limit' => true,"total_buy_num" => $data['limit_rule']]);
+                } else {
+                    $return = json_encode(['is_limit' => false]);
+                }
+                break;
+            default:
+                $return = "";
+                break;
+        }
+        return $return;
     }
 
     /**