BaseData.php 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. <?php
  2. namespace app\extra\dyLife\data;
  3. use app\extra\dyLife\BasicLife;
  4. use yzh52521\EasyHttp\Http;
  5. use function DI\string;
  6. class BaseData extends BasicLife
  7. {
  8. /**
  9. * 创建团购商品
  10. * https://bytedance.larkoffice.com/docx/doxcnnyH289B98IgcPiLWxpSChc
  11. * https://partner.open-douyin.com/docs/resource/zh-CN/local-life/develop/OpenAPI/general-capabilities/goods/save
  12. * https://open.douyin.com/goodlife/v1/goods/product/save/
  13. */
  14. public function createGoodsData(array $data = [],array $sku = [],array $store = [],array $valMap = []): array
  15. {
  16. $product_attrs = $sku_attrs = [];
  17. foreach ($valMap['product_attrs'] as $val) {
  18. $keyVal = $this->getProductAttrs($val['key'],$data);
  19. if (!empty($keyVal)) {
  20. $product_attrs[$val['key']] = $keyVal;
  21. }
  22. }
  23. foreach ($valMap['sku_attrs'] as $val) {
  24. $keyVal = $this->getProductAttrs($val['key'],$data);
  25. if (!empty($keyVal)) {
  26. $sku_attrs[$val['key']] = $keyVal;
  27. }
  28. }
  29. $param = [
  30. "account_id" => $store['store_id'], // 商家id
  31. "product" => [
  32. "account_name" => $store['poi_name'], // 商家名
  33. "biz_line" => 5, // 业务线 固定 5 小程序
  34. "category_id" => $data['category_id']??0, // 品类id
  35. "product_name" => $data['product_name'], // 商品名
  36. "product_type" => $data['product_type'], // 商品类型
  37. "attr_key_value_map" => $product_attrs,
  38. "out_id" => $data['product_id'], // 第三方id
  39. "out_url" => json_encode([
  40. "app_id" => sConf("wechat.mini_appid"),
  41. "params" => json_encode(['goods' => $data['product_id']]),
  42. "path" => "pages/goods/detail"
  43. ]), // 第三方跳转链接,小程序商品必填
  44. "pois" => [
  45. [
  46. "poi_id" => $store['poi_id'], // 门店POI
  47. ]
  48. ],
  49. "sold_end_time" => strtotime($data['sold_start_times'][1]), // 售卖结束时间
  50. "sold_start_time" => strtotime($data['sold_start_times'][0]), // 售卖开始时间
  51. "spu_id" => (string)$data['spu_id'], // spuid
  52. "account_id" => $store['store_id'], // 商家id
  53. ]
  54. ];
  55. if (empty($sku)) { // 单sku
  56. $param['sku'] = [
  57. "attr_key_value_map" => $sku_attrs,
  58. "actual_amount" => $data['price'], // 售价 实际支付价格
  59. "sku_name" => $data['product_name'], // sku名
  60. "origin_amount" => $data['line_price'],
  61. "status" => 1,
  62. "stock" => [
  63. "limit_type" => $data['limit_use_rule'], // 库存上限类型,为2时stock_qty和avail_qty字段无意义 1 有限库存 2 无限库存
  64. "avail_qty" => $data['use_num_per_consume']??0, // 可用库存,limit_type=2时无意义,始终保证stock_qty=avail_qty+frozen_qty+sold_qty
  65. ]
  66. ];
  67. } else { // 多sku
  68. }
  69. print_r($param);
  70. return $this->curlPostApi("goodlife/v1/goods/product/save/",$param);
  71. }
  72. /**
  73. * 参数处理
  74. * @param string $key
  75. * @param array $data
  76. */
  77. protected function getProductAttrs(string $key = "",array $data = [])
  78. {
  79. switch ($key)
  80. {
  81. case "EntryType": // 入口类型 1:H5 2:小程序 3:抖音 4:lynx
  82. $return = "2";
  83. break;
  84. case "market_price": // 划线价格
  85. $return = (string)$data['line_price'];
  86. break;
  87. case "can_no_use_date": // 不可使用日期
  88. if ($data['can_no_use_date'] == 1) {
  89. $return = json_encode(["enable" => false]);
  90. } else {
  91. $return = json_encode(["enable" => false]);
  92. }
  93. break;
  94. case "image_list": // 封面图 图片比例:375:280
  95. $image_list = json_decode($data['image_list'],true);
  96. $return = json_encode([
  97. [
  98. "url" => $image_list[0]['url']
  99. ]
  100. ]);
  101. break;
  102. case "limit_use_rule": // 限制使用规则
  103. if ($data['rec_person_type']==1) {
  104. $return = json_encode(["is_limit_use" => false]);
  105. } else {
  106. $return = json_encode(['is_limit_use' => true, 'use_num_per_consume' => $data['rec_person_num_max']??0]);
  107. }
  108. break;
  109. case "show_channel":
  110. $return = (string) $data['show_channel'];
  111. break;
  112. case "use_date": // 使用日期 券码的可以核销日期,履约核销强依赖
  113. if ($data['use_date_type'] == 1) { // 指定天数
  114. $return = json_encode([
  115. "use_date_type" => 2,
  116. "day_duration" => $data['day_duration']
  117. ]);
  118. } else { // 指定日期
  119. $return = json_encode([
  120. "use_date_type" => 1,
  121. "use_start_date" => $data['use_times'][0],
  122. "use_end_date" => $data['use_times'][0]
  123. ]);
  124. }
  125. break;
  126. case "use_time": // 使用时间 用户可以消费的时间
  127. $return = json_encode([
  128. "use_time_type" => 1
  129. ]);
  130. break;
  131. case "Notification": // 使用规则
  132. $return = json_encode([
  133. [
  134. "title" => "使用规则",
  135. "content" => "到店出示券码核销"
  136. ]
  137. ]);
  138. break;
  139. case "RefundPolicy": // 退款政策 1-允许退款 2-不可退款 3-有条件退
  140. $return = "1";
  141. break;
  142. case "refund_need_merchant_confirm": // 退款是否需商家审核
  143. $return = "true";
  144. break;
  145. case "code_source_type": // 券码生成方式 "1-抖音码 2-三方码 3-预导码
  146. $return = (string)$data['code_source_type'];
  147. break;
  148. case "settle_type": // 收款方式 1-总店结算 2-分店结算
  149. $return = (string)$data['code_source_type'];
  150. break;
  151. case "limit_rule": // 限制购买
  152. if ($data['limit_rule_type'] == 2) {
  153. $return = json_encode(['is_limit' => true,"total_buy_num" => $data['limit_rule']]);
  154. } else {
  155. $return = json_encode(['is_limit' => false]);
  156. }
  157. break;
  158. default:
  159. $return = "";
  160. break;
  161. }
  162. return $return;
  163. }
  164. /**
  165. * 获取来客绑定的所有门店
  166. * 一页最多50条
  167. */
  168. public function getStoreData(string $account,int $page = 1,int $size = 50): array
  169. {
  170. $data = [
  171. "account_id" => $account,
  172. "page" => $page,
  173. "size" => $size
  174. ];
  175. return $this->curlGetApi("goodlife/v1/shop/poi/query/",$data);
  176. }
  177. /**
  178. * 获取来客绑定的所有分类
  179. */
  180. public function getStoreCategoryData(string $account): array
  181. {
  182. $data = [
  183. "account_id" => $account,
  184. "query_category_type" => 1
  185. ];
  186. return $this->curlGetApi("goodlife/v1/goods/category/get/",$data);
  187. }
  188. /**
  189. * 查下商品模板
  190. */
  191. public function getStoreCategoryTemplate(string $category_id,int $product_type = 1): array
  192. {
  193. $data = compact("category_id","product_type");
  194. return $this->curlGetApi("goodlife/v1/goods/template/get/",$data);
  195. }
  196. }