| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615 |
- <?php
- /**
- * 重庆赤晓店信息科技有限公司
- * https://www.chixiaodian.com
- * Copyright (c) 2023 赤店商城 All rights reserved.
- */
- namespace app\modules\common\controllers;
- use app\constants\OptionSetting;
- use app\models\Goods;
- use app\models\PurchaseOrder;
- use app\models\Supplier;
- use app\modules\admin\models\PlatformForm;
- use app\modules\admin\models\SupplierForm;
- use app\modules\alliance\models\purchase\order\OrderForm;
- use yii\web\Controller;
- class StbzCallbackController extends Controller
- {
- // 验证签名
- public function checkSign($data)
- {
- }
- public function actionHandle()
- {
- $this->checkSign([]);
- \debug_log(\post_params());
- $post_data = \post_params();
- if ($post_data) {
- if (is_string($post_data)) {
- $post_data = json_decode($post_data, true);
- }
- $data = $post_data['data'];
- $type = 0;
- if ($post_data['type'] === 'order.delivery') { //订单发货
- $type = 1;
- $orderNoHead = substr($data['orderSn'], 0, 2);
- $result = [
- 'code' => 1,
- 'msg' => '状态错误'
- ];
- switch ($orderNoHead) {
- case 'PO':
- $result = $this->PurchaseOrderHandle($type, $data);
- break;
- case 'OR':
- $result = $this->OrderHandle($type, $data);
- break;
- }
- } elseif ($post_data['type'] === 'goods.undercarriage'
- || $post_data['type'] === 'goods.storage.delete'
- || $post_data['type'] === 'goods.storage.remove'
- || $post_data['type'] === 'goods.alter'
- || $post_data['type'] === 'goods.price.alter'
- ) {
- $order_url = "/user/setGoods";
- $order_data['params_data'] = [
- 'stbz_goods_id' => $post_data['data']['goodsIds'],
- 'status' => 2
- ];
- //如果下架或者删除商品就直接删除云仓商品
- //如果更改商品信息就下架
- if ($post_data['type'] === 'goods.alter'
- || $post_data['type'] === 'goods.price.alter') {
- //商品下架
- foreach ($post_data['data']['goodsIds'] as $item) {
- $goods = $this->actionGetGoodsItem($item);
- if ($goods['code'] == 1) {
- return json_encode($goods);
- }
- $attr = $this->handleAttr($goods['data']['specs'], $goods['data']['cover']);
- $data = [
- 'name' => $goods['data']['title'],
- 'goods_no' => (string)$item,
- 'g_s_pic_url' => $goods['data']['cover'],
- 'desc' => $goods['data']['description'],
- 'g_price' => sprintf('%.2f', $goods['data']['cost_price'] * 0.01),
- 'g_wholesale_price' => sprintf('%.2f', $goods['data']['sale_price'] * 0.01),
- 'g_wholesale_ladder_rebate' => '[]',
- 'g_wholesale_rebate_switch' => '0',
- 'weight' => '',
- 'g_original_price' => sprintf('%.2f', $goods['data']['sale_price'] * 0.01),
- 'g_unit' => $goods['data']['unit'],
- 'g_shop_count' => 1,
- 'num' => $goods['data']['total_stock'],
- 'use_attr' => '1',
- 'g_pic_list' => $goods['data']['covers'],
- 'g_send_type' => '0',
- 'attrs' => $attr,
- 'is_change' => 1,
- 'stbz_goods_id' => $item,
- 'market_price' => sprintf('%.2f', $goods['data']['market_price'] * 0.01)
- ];
- $result = $this->commonHandle($data, $item);
- if (intval($result['code']) !== 0) {
- return json_encode($result);
- }
-
-
-
- $order_data['params_data'] = json_encode([
- 'stbz_goods_id' => [$item],
- 'status' => $goods['data']['status'] == 1 ? 0 : 2,
- ]);
- $domain = (new OptionSetting)->getCloudDomainName();
- $orderInfo = cloud_post($domain. $order_url, $order_data);
- $orderInfo = json_decode($orderInfo,true);
- debug_log('胜天半子更改商品状态' . $goods['data']['status'] . json_encode($orderInfo));
- }
- return ;
- // $order_data['params_data']['status'] = 0;
- }
- $order_data['params_data'] = json_encode($order_data['params_data']);
- $domain = (new OptionSetting)->getCloudDomainName();
- $orderInfo = cloud_post($domain. $order_url,
- $order_data);
- $orderInfo = json_decode($orderInfo, true);
- if (intval($orderInfo['code']) === 0) {
- $cloud_goods_ids = array_column($orderInfo['data'], 'id');
- if ($post_data['type'] === 'goods.undercarriage') {
- Goods::updateAll(['status' => 0], ['cloud_goods_id' => $cloud_goods_ids, 'is_wholesale' => 0]);
- }
- }
- debug_log('胜天半子更改商品状态' . json_encode($orderInfo));
- } elseif ($post_data['type'] === 'order.cancel') { //订单取消
- } elseif ($post_data['type'] === 'afterSale.refuse') { //售后拒绝
- $this->PurchaseOrderHandle(2, $data, 1);
- } elseif ($post_data['type'] === 'afterSale.agree') { //售后同意
- $this->PurchaseOrderHandle(2, $data, 2);
- } elseif ($post_data['type'] === 'afterSale.success') { //退款到账
- $this->PurchaseOrderHandle(2, $data, 3);
- }
- return json_encode([
- 'code' => 1
- ]);
- }
- }
- public function commonHandle($data, $id = 0) {
- $supplier = Supplier::findOne(['is_stbz' => 1, 'is_delete' => 0]);
- if (!$supplier) {
- return [
- 'code' => 1,
- 'msg' => '供货商未找到',
- ];
- }
- $params = [
- 'goods_ids' => $id
- ];
- $stbz_result = \stbz_client()->getApiResponse('get', '/v2/GoodsStorage/Add', $params);
- $returnData = \json_decode($stbz_result, true);
- if ($returnData['code'] != 1 && $returnData['code'] != 0) {
- return [
- 'code' => 1,
- 'msg' => $returnData['msg'],
- ];
- }
- $supplierForm = new SupplierForm();
- $supplierForm->attributes = $data;
- $supplierForm->token_supplier_id = $supplier->cloud_supplier_id;
- $setGoods = $supplierForm->setGoods();
- if ($setGoods['code'] == 1) {
- return $setGoods;
- }
- // 提交审核
- $supplierForm = new SupplierForm();
- $supplierForm->attributes = ['goods_id' => $setGoods['data']['goods_id']];
- $supplierForm->token_supplier_id = $supplier->cloud_supplier_id;
- $submitAudit = $supplierForm->auditSubmit();
- if ($submitAudit['code'] == 1) {
- return $submitAudit;
- }
- // 审核商品
- $form = new PlatformForm();
- $form->attributes = [
- 'id' => $submitAudit['data']['goods_id'],
- 'status' => 1,
- ];
- return $form->auditHandle();
- }
- public function handleAttr($specs, $image) {
- $attr = [];
- foreach ($specs['options'] as $i) {
- $attr_list = [];
- $value_ids = explode('_', $i['spec_value_ids']);
- foreach ($value_ids as $ii) {
- foreach ($specs['values'] as $iii) {
- if ($ii == $iii['id']) {
- foreach ($specs['names'] as $iiii) {
- if ($iiii['id'] == $iii['spec_name_id']) {
- $attr_list = array_merge($attr_list, [
- [
- 'attr_group_name' => ($iiii['name'] === '默认' ? '规格' : $iiii['name']),
- 'attr_name' => $iii['name']
- ]
- ]);
- }
- }
- }
- }
- }
- $attr = array_merge($attr, [
- [
- 'attr_list' => $attr_list,
- 'num' => $i['stock'],
- 'price' => sprintf('%.2f', $i['cost_price'] * 0.01),
- 'wholesale_price' => sprintf('%.2f', $i['sale_price'] * 0.01),
- 'no' => $i['id'],
- 'pic' => $i['image'] == '' ? $image : $i['image'],
- 'share_commission_first' => '',
- 'share_commission_second' => '',
- 'share_commission_third' => '',
- ]
- ]);
- }
- return $attr;
- }
- private function PurchaseOrderHandle($type = 0, $data = null, $refund_status = 0) {
- try {
- $domain = (new OptionSetting)->getCloudDomainName();
- if ($type === 1) { //订单发货
- //获取订单信息
- $order_url = "/user/getOrder";
- $order_data['order_no'] = $data['orderSn'];
- $order_data['status'] = 1;
-
- $orderInfo = cloud_post($domain. $order_url,
- $order_data);
- $orderInfo = json_decode($orderInfo,true);
- if($orderInfo['code'] != 0){
- throw new \Exception($orderInfo['msg']);
- }else{
- $logistic = \stbz_client()->getApiResponse('get', '/v2/logistic', [
- 'orderSn' => $data['orderSn'],
- 'sku' => $data['sku'],
- ]);
- \debug_log($logistic);
- // $logistic = '{"id":"51OO7sen5LIgT4c7S9FX","code":1,"msg":"操作成功","data":{"list":null,"info":{"name":"皇家物流","no":"hj413132163413","remark":""}}}';
- $returnData = \json_decode($logistic, true);
- if ($returnData['code'] != 1) {
- throw new \Exception($returnData['msg']);
- }
- if(empty($returnData['data']['info']) || empty($returnData['data']['info']['no'])){
- throw new \Exception('物流单号是空的');
- }
- $name = $returnData['data']['info']['name'];
- $no = $returnData['data']['info']['no'];
- $orderInfo = $orderInfo['data'];
- $cloud_supplier_id = $orderInfo['supplier_id'];
- $supplier = new SupplierForm();
- $supplier->send_type = 1;
- $supplier->express_name = $name;
- $supplier->express_no = $no;
- $supplier->order_id = $orderInfo['id'];
- $result = $supplier->supplierPurchaseSend($cloud_supplier_id);
- if ((int)$result['code'] === 1) {
- throw new \Exception($result['msg']);
- }
- }
- } elseif ($type === 2) {//订单售后
- //获取订单信息
- $order_data['order_no'] = $data['orderSn'];
- $orderNoHead = substr($data['orderSn'], 0, 2);
- // $order_url = "/user/getOrder";
- $order_data['order_no'] = $data['orderSn'];
- $order_data['stbz_refund_id'] = $data['afterSaleId'];
- if ($orderNoHead === 'OR') {
- $order_data['status'] = 1;
- } else {
- $order_data['status'] = 0;
- }
- // if ($refund_status !== 3) {
- $order_url = "/user/getRefundOrder";
- // }
- $orderInfo = cloud_post($domain. $order_url,
- $order_data);
- $orderInfo = json_decode($orderInfo,true);
- if($orderInfo['code'] != 0){
- throw new \Exception($orderInfo['msg']);
- }else{
- $orderInfo = $orderInfo['data'];
- if ($refund_status === 3) {
- $orderTransit = \app\models\OrderTransit::findOne(['cloud_order_no' => $data['orderSn']]);
- $order = \app\models\Order::findone($orderTransit['order_id']);
- if($order){
- $order->stbz_refund_ok = 1;
- $order->save();
- }
- $result = [
- 'code' => 1,
- 'msg' => '状态错误'
- ];
- if ($orderNoHead === 'OR') {
- $order = PurchaseOrder::findOne(['cloud_order_id' => $orderInfo['id'], 'is_delete' => 0]);
- if ((int)$order['trade_status'] === 0) { //未发货时取消订单打款到账
- $form = new OrderForm();
- $form->delete_pass = 1;
- $result = $form->revokeApply($order);
- if ($result['code'] === 0) {
- return json_encode([
- 'code' => 1
- ]);
- } else {
- debug_log('打款失败');
- return;
- }
- }
- }
- $form = new SupplierForm();
- $form->status = 1;
- $form->is_agree = 1;
- $form->order_id = $orderInfo['id'];
- $res = $form->supplierApplyHandle($orderInfo['supplier_id']);
- } else {
- $form = new SupplierForm();
- $form->order_id = $orderInfo['id'];
- if ($refund_status === 1) {
- $form->is_agree = 2;
- $form->reason = "拒绝退货";
- $res = $form->supplierApplyHandle($orderInfo['supplier_id']);
- } else {
- $form->order_id = $orderInfo['order_id'];
- if ($orderNoHead === 'PO') {
- $res = $form->supplierPurchaseOrderList($orderInfo['supplier_id']);
- } else {
- $res = $form->supplierOrderList($orderInfo['supplier_id']);
- }
- if ($res['code'] !== 0) {
- debug_log('supplier_id' . $orderInfo['supplier_id']);
- debug_log($res['msg']);die;
- } else {
- debug_log('111');
- debug_log('order' . json_encode($orderInfo));
- debug_log('res' . json_encode($res));
- $stbz_refund_id = $res['data']['list'][0]['stbz_refund_id'];
- $goods_list = $res['data']['list'][0]['goods_list'];
- debug_log('goods_list' . json_encode($goods_list));
- if (!empty($goods_list)) {
- foreach ($goods_list as $item) {
- if ($item['stbz_goods_id'] && $item['goods_no']) {
- $goods_result = $this->actionGetAfterSaleItem($stbz_refund_id);
- if ($goods_result['code'] === 1) {
- return false;
- }
- $goods = $goods_result['data'];
- $form->is_agree = 1;
- $form->mobile = $goods['sellerInfo']['phone'];
- $form->name = $goods['sellerInfo']['realName'];
- $form->detail = $goods['sellerInfo']['address'];
- $form->zipcode = '1';
- $form->order_id = $orderInfo['id'];
- debug_log('115');
- $res = $form->supplierApplyHandle($orderInfo['supplier_id']);
- debug_log(json_encode($res));
- if ($res['code'] !== 0) {
- debug_log($res['msg']);die;
- }
- }
- }
- return json_encode([
- 'code' => 1
- ]);
- }
- }
- }
- }
- if ((int)$res['code'] === 0) {
- return json_encode([
- 'code' => 1
- ]);
- }
- }
- }
- } catch (\Exception $e) {
- debug_log('订单发货' . $e->getMessage() . $e->getFile() . $e->getLine());
- return [
- 'code' => 1,
- 'msg' => $e->getMessage()
- ];
- }
- }
- private function OrderHandle($type = 0, $data = null) {
- try {
- if ($type === 1) { //订单发货
- //获取订单信息
- $order_url = "/user/getOrder";
- $order_data['order_no'] = $data['orderSn'];
- $order_data['status'] = 2;
- $domain = (new OptionSetting)->getCloudDomainName();
- $orderInfo = cloud_post($domain. $order_url,
- $order_data);
- $orderInfo = json_decode($orderInfo,true);
- if($orderInfo['code'] != 0){
- throw new \Exception($orderInfo['msg']);
- }else{
- debug_log('order_info' . json_encode($orderInfo));
- $orderInfo = $orderInfo['data'];
- $cloud_supplier_id = $orderInfo['supplier_id'];
- debug_log('cloud_supplier_id' . $cloud_supplier_id);
- $supplier = new SupplierForm();
- $supplier->send_type = 2;
- $supplier->order_id = $orderInfo['id'];
- $result = $supplier->supplierOrderSend($cloud_supplier_id);
- if ((int)$result['code'] === 1) {
- throw new \Exception($result['msg']);
- }
- }
- }
- } catch (\Exception $e) {
- debug_log('订单发货' . $e->getMessage() . $e->getLine() . $e->getFile());
- return [
- 'code' => 1,
- 'msg' => $e->getMessage()
- ];
- }
- }
- /**
- * 获取商品详情
- * @author Syan mzsongyan@gmail.com
- * @date 2022-09-16
- */
- public function actionGetGoodsItem($goodsId = null)
- {
- $id = $goodsId;
- $params = [
- 'id' => $id,
- ];
- $key = md5(json_encode(\array_merge($params, ['type' => 'stbz_get_goods_item'])));
- if (0 && \Yii::$app->cache->exists($key)) {
- $data = \Yii::$app->cache->get($key);
- $returnData = \json_decode($data, true);
- } else {
- $data = \stbz_client()->getApiResponse('get', '/v2/Goods/Detail', $params);
- $returnData = \json_decode($data, true);
- if ($returnData['code'] != 1) {
- return [
- 'code' => 1,
- 'msg' => $returnData['msg'],
- ];
- }
- \Yii::$app->cache->set($key, $data, 600);
- }
- return [
- 'code' => 0,
- 'msg' => 'success',
- 'data' => $returnData['data'],
- ];
- }
- public function actionGetAfterSaleItem($id = null)
- {
- $data = \stbz_client()->getApiResponse('get', '/v2/afterSale/' . $id);
- $returnData = \json_decode($data, true);
- if ($returnData['code'] != 1) {
- return [
- 'code' => 1,
- 'msg' => $returnData['msg'],
- ];
- }
- return [
- 'code' => 0,
- 'msg' => 'success',
- 'data' => $returnData['data'],
- ];
- }
- public function setGoods($stbz_goods) {
- if ($stbz_goods['code'] === 1) {
- return false;
- }
- $goods = $stbz_goods['data'];
- $price = sprintf("%.2f", ($goods['agreement_price'] * 0.01));
- $original_price = sprintf("%.2f", ($goods['guide_price'] * 0.01));
- $attr = $this->setAttr($goods['specs'], $goods['cover']);
- if ($attr['code'] === 0) {
- $attr = $attr['data'];
- } else {
- debug_log($attr['msg']);
- }
- $data = [
- 'cat_id' => '0',
- 'name' => $goods['title'],
- 'goods_no' => (string)$goods['id'],
- 'g_s_pic_url' => $goods['cover'],
- 'desc' => $goods['description'],
- 'g_price' => $price,
- 'g_wholesale_price' => $price,
- 'g_wholesale_ladder_rebate' => '[]',
- 'g_wholesale_rebate_switch' => '0',
- 'weight' => '',
- 'g_original_price' => $original_price,
- 'g_unit' => $goods['unit'],
- 'g_shop_count' => 1,
- 'num' => $goods['total_stock'],
- 'use_attr' => '1',
- 'g_pic_list' => $goods['covers'],
- 'g_send_type' => '0',
- 'attrs' => $attr,
- 'is_change' => 1,
- 'stbz_goods_id' => $goods['id'],
- ];
- $supplier = Supplier::findOne(['is_stbz' => 1, 'is_delete' => 0]);
- if (!$supplier) {
- return [
- 'code' => 1,
- 'msg' => '供货商未找到',
- ];
- }
- $supplierForm = new SupplierForm();
- $supplierForm->attributes = $data;
- $supplierForm->token_supplier_id = $supplier->cloud_supplier_id;
- $setGoods = $supplierForm->setGoods();
- if ($setGoods['code'] == 1) {
- return $setGoods;
- }
- // 提交审核
- $supplierForm = new SupplierForm();
- $supplierForm->attributes = ['goods_id' => $setGoods['data']['goods_id']];
- $supplierForm->token_supplier_id = $supplier->cloud_supplier_id;
- $submitAudit = $supplierForm->auditSubmit();
- debug_log('审核' . json_encode($submitAudit));
- if ($submitAudit['code'] == 1) {
- return $submitAudit;
- }
- // 审核商品
- $form = new PlatformForm();
- $form->attributes = [
- 'id' => $submitAudit['data']['goods_id'],
- 'status' => 1,
- ];
- $res = $form->auditHandle();
- debug_log('审核' . json_encode($submitAudit));
- if ($res['code'] == 1) {
- return $submitAudit;
- }
- }
- public function setAttr($specs, $cover) {
- try {
- $attr = [];
- foreach ($specs['options'] as $option) {
- $attr_list = [];
- $value_ids = explode('_', $option['spec_value_ids']);
- foreach ($value_ids as $value_id) {
- foreach ($specs['values'] as $value) {
- if ($value_id === $value['id']) {
- foreach ($specs['names'] as $name) {
- if ($name['id'] === $value['spec_name_id']) {
- array_push($attr_list, [
- 'attr_group_name' => $name['name'] === '默认' ? '规格' : $name['name'],
- 'attr_name' => $value['name']
- ]);
- }
- }
- }
- }
- }
- array_push($attr, [
- 'attr_list' => $attr_list,
- 'num' => $option['stock'],
- 'price' => sprintf("%.2f", ($option['agreement_price'] * 0.01)),
- 'wholesale_price' => sprintf("%.2f", ($option['agreement_price'] * 0.01)),
- 'no' => $option['id'],
- 'pic' => $option['image'] ?: $cover,
- 'share_commission_first' => '',
- 'share_commission_second' => '',
- 'share_commission_third' => '',
- 'weight' => $option['weight']
- ]);
- }
- return [
- 'code' => 0,
- 'msg' => 'success',
- 'data' => $attr
- ];
- } catch (\Exception $e) {
- return [
- 'code' => 1,
- 'msg' => $e->getMessage()
- ];
- }
- }
- }
|