123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- <?php
- namespace app\common\service\wechat\wow;
- use app\common\model\Wxapp as WxappModel;
- use app\common\model\wow\Shoping as ShopingModel;
- use app\common\model\wow\Setting as SettingModel;
- use app\common\library\wechat\wow\Shoping as WowShoping;
- use app\common\library\helper;
- /**
- * 好物圈-商品收藏 服务类
- * Class Shoping
- * @package app\common\service\wechat\wow
- */
- class Shoping
- {
- /* @var int $wxapp_id 小程序商城id */
- private $wxappId;
- /* @var WowShoping $ApiDriver 微信api驱动 */
- private $ApiDriver;
- protected $error;
- /**
- * 构造方法
- * Shoping constructor.
- * @param $wxappId
- * @throws \app\common\exception\BaseException
- * @throws \think\exception\DbException
- */
- public function __construct($wxappId)
- {
- $this->wxappId = $wxappId;
- $this->initApiDriver();
- }
- /**
- * 添加好物圈商品收藏
- * @param \think\Collection $user 用户信息
- * @param array $goodsList 商品列表
- * @return bool
- * @throws \app\common\exception\BaseException
- * @throws \think\exception\DbException
- * @throws \Exception
- */
- public function add($user, $goodsList)
- {
- // 判断是否开启同步设置
- $setting = SettingModel::getItem('basic', $this->wxappId);
- if ($setting['is_shopping'] == false) {
- return false;
- }
- // 整理商品列表
- $productList = $this->getProductListToAdd($goodsList);
- // 执行api请求
- $status = $this->ApiDriver->addList($user['open_id'], $productList);
- if ($status == false) {
- $this->error = $this->ApiDriver->getError();
- return $status;
- }
- // 写入商品收藏记录
- $goodsIds = helper::getArrayColumn($goodsList, 'goods_id');
- $this->model()->add($user['user_id'], $goodsIds);
- return $status;
- }
- /**
- * 删除好物圈商品收藏
- * @param $id
- * @return bool
- * @throws \app\common\exception\BaseException
- * @throws \think\exception\DbException
- */
- public function delete($id)
- {
- // 实例化模型
- $model = $this->model($id, ['user']);
- // 执行api请求
- $status = $this->ApiDriver->delete($model['user']['open_id'], [[
- 'item_code' => $model['goods_id'],
- 'sku_id' => $model['goods_id'],
- ]]);
- if ($status == false) {
- $this->error = $this->ApiDriver->getError();
- }
- // 删除商品收藏记录
- $model->setDelete();
- return true;
- }
- /**
- * 返回错误信息
- * @return mixed
- */
- public function getError()
- {
- return $this->error;
- }
- /**
- * 实例化微信api驱动
- * @throws \app\common\exception\BaseException
- * @throws \think\exception\DbException
- */
- private function initApiDriver()
- {
- $config = WxappModel::getWxappCache($this->wxappId);
- $this->ApiDriver = new WowShoping($config['app_id'], $config['app_secret']);
- }
- /**
- * 获取好物圈订单记录模型
- * @param int|null $id
- * @param array $with
- * @return ShopingModel|null
- * @throws \think\exception\DbException
- */
- private function model($id = null, $with = ['user'])
- {
- static $model;
- if (!$model instanceof ShopingModel) {
- $model = $id > 0 ? ShopingModel::detail($id, $with) : (new ShopingModel);
- }
- return $model;
- }
- /**
- * 整理商品列表 (用于添加收藏接口)
- * @param $goodsList
- * @return array
- */
- private function getProductListToAdd(&$goodsList)
- {
- // 整理api参数
- $productList = [];
- foreach ($goodsList as $goods) {
- $imageList = []; // 商品图片
- foreach ($goods['image'] as $image) {
- $imageList[] = $image['file_path'];
- }
- // sku信息
- $skuInfo = &$goods['sku'][0];
- $productList[] = [
- 'item_code' => $goods['goods_id'],
- 'title' => $goods['goods_name'],
- 'category_list' => [$goods['category']['name']],
- 'image_list' => $imageList,
- 'src_wxapp_path' => "/pages/goods/index?goods_id={$goods['goods_id']}", // 商品页面路径
- 'sku_info' => [ // 商品sku
- // 'sku_id' => "{$goods['goods_id']}_{$skuInfo['spec_sku_id']}",
- 'sku_id' => $goods['goods_id'],
- 'price' => $skuInfo['goods_price'] * 100,
- 'original_price' => $skuInfo['line_price'] * 100, // 划线价
- 'status' => 1,
- ],
- ];
- }
- return $productList;
- }
- }
|