erp/app/Services/Business/KuaiTuanTuan/KuaiTuanTuan.php

136 lines
4.7 KiB
PHP
Raw Normal View History

<?php
namespace App\Services\Business\KuaiTuanTuan;
2022-08-08 10:43:59 +08:00
use App\Listeners\BindBusinessGoods;
use App\Models\BusinessGoodsSku;
use App\Models\GoodsSku;
use App\Services\Business\BusinessClient;
use App\Models\Log;
class KuaiTuanTuan extends BusinessClient
{
// 所有的请求和响应数据编码皆为utf-8格式url里的所有参数值请做urlencode编码。
// 如果请求的content-type是 application/x-www-form-urlencoded所有参数值也做urlencode编码
// 如果是multipart/form-data格式每个表单字段的参数值无需编码但每个表单字段的charset需要指定为utf-8
// 如果指定接口返回数据格式为JSON请指明header头content-type: application/json
protected $clientId = '8d7ca13bc27247b6a04e08404b51dfd8';
protected $clientSecret = '4478bc82dc1e1f68fe06c9f2bc683f1dcb3e6d83';
protected $publicParams = [
'type' => '',
'client_id' => '',
'access_token' => '', // 非必填,通过code获取的access_token
'timestamp' => '',
'data_type' => '', // 非必填,响应格式即返回数据的格式JSON或者XML二选一默认JSON注意是大写
'version' => '', // 非必填, API协议版本号默认为V1可不填
'sign' => ''
];
public function auth()
{
$accessToken = $this->getAccessTokenWithCode();
$accessToken['pop_auth_token_create_response'] = json_encode($accessToken, 256);
$this->shop->update($accessToken);
return $this->shop;
}
2022-08-06 16:38:04 +08:00
public function downloadGoods($page = 1)
{
[$type, $appendParams] = Goods::downloadGoods($this->shop->owner_name, $page);
$res = $this->formDataPostRequest($type, $appendParams);
$goods = $res['ktt_goods_query_list_response']['goods_list'];
2022-08-06 16:38:04 +08:00
$this->bindGoods($goods);
$pageNum = ceil($res['total'] / $appendParams['size']);
if ($pageNum > $page && 10 >= $page) {
2022-08-06 16:38:04 +08:00
$this->downloadGoods($page + 1);
}
}
2022-08-06 16:38:04 +08:00
public function bindGoods($goods)
{
Goods::bindGoods($goods, $this->shop->id);
}
public function incrQuantity($skuId)
{
$goodsSku = GoodsSku::query()->find($skuId);
$business = BusinessGoodsSku::query()->where('shop_id', $this->shop->id)->where('self_sku_id', $skuId)->first(['goods_id', 'sku_id']);
[$type, $appendParams] = Goods::incrQuantity($business->goodsId, $goodsSku->stock, $business->sku_id);
$this->formDataPostRequest($type, $appendParams);
$log = new Log();
$log->module = 'plat';
$log->action = 'POST';
$log->target_type = 'kuaituantuan';
$log->target_id = 0;
$log->target_field = $type;
$log->user_id = 1;
$log->message = 'success';
$log->save();
}
public function downloadOrders($beginTime, $endTime, $activityNo, $downloadType = 'default')
{
if ('increment' === $downloadType) {
[$type, $appendParams] = Order::downloadIncrementOrders($beginTime, $endTime, $activityNo);
} else {
[$type, $appendParams] = Order::downloadOrders($beginTime, $endTime, $activityNo);
}
$res = $this->formDataPostRequest($type, $appendParams);
return $res['ktt_order_list_response']['order_list'];
}
2022-08-06 16:38:04 +08:00
public function saveOrders($orders)
{
Order::saveOrders($orders, $this->shop->id);
}
protected function getAccessTokenWithCode()
{
$type = 'pdd.pop.auth.token.create';
$res = $this->doRequest($type, ['code' => $this->code]);
return $res['pop_auth_token_create_response'];
}
protected function getSign($params)
{
$params = ksort($params);
$str = '';
foreach ($params as $key => $val) {
$str .= $key . $val;
}
$str = $this->clientSecret . $str . $this->clientSecret;
return strtoupper(md5($str));
}
public function doRequest($type, $appendParams = [], $url = 'http://gw-api.pinduoduo.com/api/router')
{
$publicParams = [
'type' => $type,
'client_id' => $this->clientId,
'timestamp' => time()
];
if ('pdd.pop.auth.token.create' !== $type) {
$publicParams['access_token'] = $this->getAccessToken();
}
$publicParams = array_merge($publicParams, $appendParams);
$publicParams['sign'] = $this->getSign($publicParams);
return $this->formDataPostRequest($url, $publicParams);
}
public function getAuthUrl($shopId, $platId)
{
2022-08-06 16:38:04 +08:00
$state = $shopId . '_' . $platId;
return "https://oauth.pinduoduo.com/authorize/ktt?client_id={$this->clientId}&redirect_uri={$this->redirectUri}&state={$state}";
}
}