dlhmaster/app/common/server/doudian/DouDianServer.php

247 lines
12 KiB
PHP
Raw Normal View History

2024-06-13 11:33:24 +08:00
<?php
/**
* @package CipherSYS IM
* @author Xiaowei Wang <wangxiaowei@ciphersys.com>
* @copyright Copyright (c) 2022 - 2024, CipherSYS Co.,Ltd. (https://www.ciphersys.com/)
* @license CipherSYS Commercial License
* @link https://www.ciphersys.com
*/
namespace app\common\server\doudian;
use app\common\model\goods\GoodsSpec;
use app\shop\logic\goods\GoodsLogic;
use \think\facade\Cache;
use DOMDocument;
require "../vendor/doudian/src/autoload.php";
include "../vendor/doudian/src/open/api/materialgw/BinaryMaterialUploadAddressAuthParam.php";
include "../vendor/doudian/src/open/api/materialgw/BinaryMaterialUploadAddressAuthRequest.php";
include "../vendor/doudian/src/open/api/materialgw/BinaryMaterialUploadParam.php";
// ACCESS_TOKEN_CODE 工具型应用
const ACCESS_TOKEN_CODE = 1;
// ACCESS_TOKEN_SHOP_ID 自用型应用
const ACCESS_TOKEN_SHOP_ID = 2;
class DouDianServer
{
private static $cacheName = 'doudian@access_token';
private static $appKey = '7377352986936280614';
private static $appSecret = 'a4180703-743d-4dc0-a695-de213ee0d7b3';
private static $shopId = 4463798;
private static $specName = array(
'颜色' => '颜色分类',
'尺寸' => '尺码大小'
);
private $access_token = '';
public function __construct()
{
\GlobalConfig::getGlobalConfig()->appKey = self::$appKey;
\GlobalConfig::getGlobalConfig()->appSecret = self::$appSecret;
if (Cache::get(self::$cacheName)) {
$this->access_token = Cache::get(self::$cacheName);
} else {
$result = \AccessTokenBuilder::build(self::$shopId, ACCESS_TOKEN_SHOP_ID);
if ($result->isSuccess()) {
Cache::set(self::$cacheName, $result, 30 * 60);
$this->access_token = $result;
} else {
throw new \think\Exception('抖店token获取错误', $result->getCode());
}
}
}
/**
* @note 发布商品
*/
public function productAdd($goods_id = 0)
{
$goods = GoodsLogic::info($goods_id);
$request = new \ProductAddV2Request();
$param = new \ProductAddV2Param();
$request->setParam($param);
if (isset($goods['base']['code'])) {
// 商品编码
$param->outer_product_id = $goods['base']['code'];
}
// 0-普通,3-虚拟,6玉石闪购,7云闪购
$param->product_type = $goods['base']['type'] == 0 ? 0 : 3;
// 叶子类目ID通过/shop/getShopCategory接口获取
$param->category_leaf_id = 20219;
// 商品名称
$param->name = $goods['base']['name'];
dump($param->name);
// 商家推荐语
if (isset($goods['recommend_remark'])) {
$param->recommend_remark = $goods['base']['remark'];
}
// 商品轮播图
// $domain = input('server.REQUEST_SCHEME') . '://' . input('server.SERVER_NAME');
$domain = 'https://dlh.hainings.com';
$banner = '';
$img = [];
foreach ($goods['base']['goods_image'] as $v) {
$img['id'] = $v['id'];
$img['uri'] = $v['uri'];
$banner .= $domain . '/' . $v['uri'] . "|";
}
$param->pic = substr($banner, 0, -1);
// $param->pic = "https://p3-aio.ecombdimg.com/obj/ecom-shop-material/v1_ALSUvYM_70630259408755264040798_16991a88a61d1a1f4ab8bc526fcb7762_sx_388998_www800-800|https://p3-aio.ecombdimg.com/obj/ecom-shop-material/ALSUvYM_m_1ca7af9ff5adb5687879c18484d72777_sx_190683_www800-800|https://p3-aio.ecombdimg.com/obj/ecom-shop-material/v1_ALSUvYM_70526582776577067660798_51d5ff356da0f3664980f84a9029bedb_sx_24925_www800-800";
$this->batchUploadImage($img);
die;
// 商品描述,目前只支持图片
$doc = new DOMDocument();
$doc->loadHTML($goods['base']['content']);
$images = $doc->getElementsByTagName('img');
$src = '';
foreach ($images as $image) {
$src .= $image->getAttribute('src') . '|';
}
$src = str_replace('http://admin.dlh.com/', 'https://dlh.hainings.com/', $src);
$param->description = "https://p3-aio.ecombdimg.com/obj/ecom-shop-material/v1_ALSUvYM_70526582776577067660798_51d5ff356da0f3664980f84a9029bedb_sx_24925_www800-800";
// 支付方式,0货到付款 1在线支付,2,货到付款+在线支付
$param->pay_type = 1;
// 减库存类型:1-拍下减库存 2-付款减库存
$param->reduce_type = 1;
// 运费模板id,传0表示包邮,通过/freightTemplate/list接口获取
$param->freight_id = 0;
// 承诺发货时间,具体规则用/product/getProductUpdateRule获取
$param->delivery_delay_day = 2;
// 发货模式,0-现货发货,1-预售发货,2-阶梯发货,默认0
$param->presell_type = 0;
$param->after_sale_service = "{\"supply_day_return_selector\":\"7-1\"}";
// 客服号码
$param->mobile = "400123456";
$param->commit = true; #false仅保存草稿,true保存+提审
$param->product_format_new = "{\"241\":[{\"diy_type\":1,\"name\":\"常规款\",\"value\":17314}],\"631\":[{\"diy_type\":1,\"name\":\"东西南北风\",\"value\":0}],\"785\":[{\"measure_info\":{\"values\":[{\"module_id\":582,\"value\":\"亚麻\",\"unit_id\":0},{\"module_id\":583,\"unit_name\":\"%\",\"unit_id\":15,\"value\":\"100\"}],\"template_id\":252,\"value_name\":\"亚麻100%\"},\"diy_type\":1,\"name\":\"亚麻100%\",\"value\":0}],\"813\":[{\"diy_type\":1,\"name\":\"X型\",\"value\":8017}],\"981\":[{\"diy_type\":1,\"name\":\"蛋糕裙\",\"value\":22253}],\"1467\":[{\"diy_type\":0,\"name\":\"59%-69%(含)\",\"value\":168368}],\"1551\":[{\"diy_type\":1,\"name\":\"超短裙\",\"value\":22064}],\"1687\":[{\"diy_type\":0,\"name\":\"\",\"value\":0}],\"1878\":[{\"diy_type\":1,\"name\":\"高腰\",\"value\":16521}],\"2592\":[{\"diy_type\":1,\"name\":\"甜美风\",\"value\":192481}]}";
$param->standard_brand_id = 596120136; #品牌
# $param->presell_config_level = 2
//$param->size_info_template_id = 7119681499770667267; #尺码模板id https://op.jinritemai.com/docs/guide-docs/242/2094
$spec = [];
foreach ($goods['spec'] as $k => $v) {
$spec_text = self::$specName[$v['name']];
$spec['spec_values'][$k]['property_name'] = $spec_text;
$spec['spec_values'][$k]['property_id'] = 0;
foreach ($v['values'] as $k2 => $v2) {
$spec['spec_values'][$k]['values'][$k2] = array(
'value_name' => str_replace('英寸', '码', $v2['value']),
'value_id' => 0
);
}
}
$param->spec_info = json_encode($spec, JSON_UNESCAPED_UNICODE);
$spec_list = [];
foreach ($goods['item'] as $k => $v) {
$spec_value_str = explode(',', $v['spec_value_str']);
foreach ($spec_value_str as $k2 => $v2) {
$res = GoodsSpec::where(['goods_id' => 733])->select();
$spec_list[$k]['sell_properties'][$k2]['value_name'] = str_replace('英寸', '码', $v2);
$spec_list[$k]['sell_properties'][$k2]['property_name'] = self::$specName[$res[$k2]['name']];
$spec_list[$k]['stock_num'] = $v['stock'];
$spec_list[$k]['price'] = floatval($v['price']);
}
}
$param->spec_prices_v2 = json_encode($spec_list, JSON_UNESCAPED_UNICODE);
// dump($param->spec_prices_v2);
// $this->getShopCategory();
// $param->spec_prices_v2 = '[{"sell_properties":[{"value_name":"白色","property_name":"颜色分类"},{"value_name":"M","property_name":"尺码大小"}],"stock_num":11,"price":1,"code":"这个就是抖店后台的sku商家编码"}]';
// dump($param->spec_prices_v2);
$response = $request->execute($this->access_token);
dump($response);
}
/**
* @note 批量上传图片
*/
public function batchUploadImage($data) {
dump($data);
$img = array();
foreach ($data as $k => $v) {
$img[$k]['request_id'] = $v['id'];
$img[$k]['folder_id'] = 0;
$img[$k]['name'] = '';
}
die;
$request = new \MaterialBatchUploadImageSyncRequest();
$param = new \MaterialBatchUploadImageSyncParam();
$request->setParam($param);
$param->materials = $data;
$param->need_distinct = false;
$response = $request->execute($this->access_token);
}
private function getShopCategory()
{
$request = new \ShopGetShopCategoryRequest();
$param = new \ShopGetShopCategoryParam();
$request->setParam($param);
$param->cid = 0;
$response = $request->execute($this->access_token);
dump($response);
}
private function getCateProperty()
{
}
public function testProductAdd()
{
$request = new \ProductAddV2Request();
$param = new \ProductAddV2Param();
$request->setParam($param);
$param->product_type = 0; #0-普通,3-虚拟
$param->category_leaf_id = 20219;
$param->name = "半身裙夏季时尚裙-标准sku-大田";
$param->pic = "https://p3-aio.ecombdimg.com/obj/ecom-shop-material/v1_ALSUvYM_70630259408755264040798_16991a88a61d1a1f4ab8bc526fcb7762_sx_388998_www800-800|https://p3-aio.ecombdimg.com/obj/ecom-shop-material/ALSUvYM_m_1ca7af9ff5adb5687879c18484d72777_sx_190683_www800-800|https://p3-aio.ecombdimg.com/obj/ecom-shop-material/v1_ALSUvYM_70526582776577067660798_51d5ff356da0f3664980f84a9029bedb_sx_24925_www800-800";
$param->description = "https://p3-aio.ecombdimg.com/obj/ecom-shop-material/v1_ALSUvYM_70526582776577067660798_51d5ff356da0f3664980f84a9029bedb_sx_24925_www800-800";
$param->pay_type = 1; #1在线支付
$param->reduce_type = 1;#减库存类型:1-拍下减库存 2-付款减库存
$param->freight_id = 0; #运费模板 通过/freightTemplate/list接口获取
$param->delivery_delay_day = 2; # 承诺发货时间,具体规则用/product/getProductUpdateRule获取
$param->presell_type = 0; #发货模式,0-现货发货,1-预售发货,2-阶梯发货,默认0
$param->after_sale_service = "{\"supply_day_return_selector\":\"7-1\"}";
$param->mobile = "400123456"; #抖店后台不展示,后续会考虑下线
$param->commit = "true"; #false仅保存草稿,true保存+提审
$param->product_format_new = "{\"241\":[{\"diy_type\":1,\"name\":\"常规款\",\"value\":17314}],\"631\":[{\"diy_type\":1,\"name\":\"东西南北风\",\"value\":0}],\"785\":[{\"measure_info\":{\"values\":[{\"module_id\":582,\"value\":\"亚麻\",\"unit_id\":0},{\"module_id\":583,\"unit_name\":\"%\",\"unit_id\":15,\"value\":\"100\"}],\"template_id\":252,\"value_name\":\"亚麻100%\"},\"diy_type\":1,\"name\":\"亚麻100%\",\"value\":0}],\"813\":[{\"diy_type\":1,\"name\":\"X型\",\"value\":8017}],\"981\":[{\"diy_type\":1,\"name\":\"蛋糕裙\",\"value\":22253}],\"1467\":[{\"diy_type\":0,\"name\":\"59%-69%(含)\",\"value\":168368}],\"1551\":[{\"diy_type\":1,\"name\":\"超短裙\",\"value\":22064}],\"1687\":[{\"diy_type\":0,\"name\":\"\",\"value\":0}],\"1878\":[{\"diy_type\":1,\"name\":\"高腰\",\"value\":16521}],\"2592\":[{\"diy_type\":1,\"name\":\"甜美风\",\"value\":192481}]}";
$param->standard_brand_id = 596120136; #品牌
# $param->presell_config_level = 2
$param->size_info_template_id = 7119681499770667267; #尺码模板id https://op.jinritemai.com/docs/guide-docs/242/2094
$param->spec_info = '{"spec_values":[{"property_name":"颜色分类","property_id":2752,"values":[{"value_name":"白色","value_id":35497}]},{"property_name":"尺码大小","property_id":4704,"values":[{"value_name":"M","value_id":0}]}]}';
$param->spec_prices_v2 ="[{\"sell_properties\":[{\"value_name\":\"白色\",\"property_name\":\"颜色分类\"},{\"value_name\":\"M\",\"property_name\":\"尺码大小\"}],\"stock_num\":11,\"price\":1,\"code\":\"这个就是抖店后台的sku商家编码\"}]";
// $response = $request->execute($this->access_token);
dump($param->spec_info);
dump($param->spec_prices_v2);
}
/**
* @note 获取抖店access_token
*/
public function getToken()
{
return \AccessTokenBuilder::build(self::$shopId, ACCESS_TOKEN_SHOP_ID);
}
/**
* @note 刷新抖店access_token
*/
public function refreshToken($token) {
return \AccessTokenBuilder::refresh($token);
}
}