| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225 |
- <?php
- /**
- * 重庆赤晓店信息科技有限公司
- * https://www.chixiaodian.com
- * Copyright (c) 2023 赤店商城 All rights reserved.
- */
- namespace app\modules\alliance\models;
- use app\models\Option;
- use app\models\SaasUser;
- use app\models\Store;
- use app\models\User;
- use app\models\WechatConfig;
- use EasyWeChat\Factory;
- use EasyWeChat\Kernel\BaseClient;
- use yii\helpers\Html;
- use Yii;
- use yii\base\Model;
- use yii\helpers\Json;
- class OrderCommentForm extends Model
- {
- public $store_id;
- public $user_id;
- public $saas_id;
- public $order_id;
- public $goods_list;
- public $type;
- public $is_virtual;
- public function rules()
- {
- return [
- [['goods_list', 'order_id'], 'required'],
- [['type'], 'string'],
- [['is_virtual', 'saas_id'], 'integer']
- ];
- }
- public function save()
- {
- if (!$this->validate()) {
- return ['code' => 1, 'msg' => $this->getErrorSummary(false)[0]];
- }
- $orderClass = 'app\models\Order';
- $commentClass = 'app\models\OrderComment';
- $detailClass = 'app\models\OrderDetail';
- $order = $orderClass::findOne([
- 'id' => $this->order_id,
- 'saas_id' => $this->saas_id,
- 'is_delete' => 0,
- ]);
- if (!$order) {
- return [
- 'code' => 1,
- 'msg' => '订单不存在或已删除',
- ];
- }
- $goods_list = Json::decode($this->goods_list);
- if (!$goods_list) {
- return [
- 'code' => 1,
- 'msg' => '商品信息不能为空',
- ];
- }
- Yii::error($goods_list);
- $t = \Yii::$app->db->beginTransaction();
- foreach ($goods_list as $goods) {
- $order_detail = $detailClass::findOne([
- 'id' => $goods['order_detail_id'],
- 'order_id' => $order->id,
- 'goods_id' => $goods['goods_id'],
- 'is_delete' => 0,
- ]);
- if (!$order_detail) {
- continue;
- }
- if (empty($goods['content'])) {
- return [
- 'code' => 1,
- 'msg' => '评论失败,请输入评价内容!',
- ];
- }
- if(is_wechat_platform()){
- if (!is_open_platform()) {
- $app = Yii::$app->controller->wechatMini;
- } else {
- if($order->store_id == -1){
- $storeInfo = [];
- }else{
- $storeInfo = Store::findOne($order->store_id);
- }
- $plugin = \Yii::$app->getAttr('plugin');
- $open = false;
- if (in_array('duli_store', $plugin['union'])) {
- $open = true;
- }
- $self_mini = Option::get('self_mini', $order->store_id,'store', 0)['value'];
- if (\Yii::$app->prod_is_dandianpu() && (!$self_mini || !$open)) {
- $app = $this->setSingleStoreWechat($order->is_platform);
- } else {
- if((isset($storeInfo->business_model) && $storeInfo->business_model != 1) || !$storeInfo || $order->is_platform){
- $app = $this->setBussinessWechat();
- }else{
- $app = $this->setWechat($order->store_id);
- }
- }
- }
- if ($app) {
- $res = $app->content_security->checkText($goods['content']);
- if ($res['errcode'] > 0) {
- return [
- 'code' => 1,
- 'msg' => '评论失败,内容违法!'.json_encode($res['errmsg']),
- ];
- }
- }
- }
- $user_id = 0;
- if ($order->store_id > 0) {
- $saasUser = SaasUser::findOne($this->saas_id);
- $user = User::findOne(['binding' => $saasUser->mobile, 'store_id' => $order->store_id]);
- $user_id = $user->id ?? 0;
- }
- $order_comment = new $commentClass();
- $order_comment->store_id = $this->store_id;
- $order_comment->order_detail_id = $order_detail->id;
- $order_comment->user_id = $user_id;
- $order_comment->saas_id = $this->saas_id;
- $order_comment->order_id = $this->order_id;
- $order_comment->goods_id = $order_detail->goods_id;
- $order_comment->score = $goods['score'];
- $order_comment->content = Html::encode($goods['content']);
- $order_comment->created_at = time();
- if ($this->is_virtual) {
- $order_comment->is_virtual = 1;
- $order_comment->virtual_user = '匿名用户';
- $order_comment->virtual_avatar = \Yii::$app->request->hostInfo . \Yii::$app->request->baseUrl . '/web/v1/statics/images/avatar.png';
- }
- if ($order->mch_id > 0) {
- $order_comment->mch_id = $order->mch_id;
- }
- $order_comment->content = preg_replace('/[\xf0-\xf7].{3}/', '', $order_comment->content);
- $pic_list = [];
- foreach ($goods['pic_list'] as $pic) {
- if ($pic['url']) {
- $pic_list[] = Html::encode($pic['url']);
- } else {
- $pic_list[] = Html::encode($pic);
- }
- }
- $order_comment->pic_list = Json::encode($pic_list);
- if (!$order_comment->save()) {
- $t->rollBack();
- return ['code' => 1, 'msg' => $order_comment->errors[0]];
- }
- }
- $order->is_comment = 1;
- if ($order->save()) {
- $t->commit();
- return [
- 'code' => 0,
- 'msg' => '提交成功',
- 'type' => $this->type,
- ];
- } else {
- $t->rollBack();
- return ['code' => 1, 'msg' => $order->errors[0]];
- }
- }
- // 单店铺
- public function setSingleStoreWechat($is_platform = false)
- {
- if($is_platform){
- // 证书
- if (!is_dir(\Yii::$app->runtimePath . '/pem_dandianpu')) {
- mkdir(\Yii::$app->runtimePath . '/pem_dandianpu');
- file_put_contents(\Yii::$app->runtimePath . '/pem_dandianpu/index.html', '');
- }
- $config = [
- 'app_id' => Option::get('platform_mch_appid', 0, 'saas', '')['value'],
- 'secret' => Option::get('platform_mch_key', 0, 'saas', '')['value'],
- 'response_type' => 'array'
- ];
- $wechatMini = Factory::miniProgram($config);
- return $wechatMini->app_code;
- }
- // 证书
- if (!is_dir(\Yii::$app->runtimePath . '/pem')) {
- mkdir(\Yii::$app->runtimePath . '/pem');
- file_put_contents(\Yii::$app->runtimePath . '/pem/index.html', '');
- }
- $config = [
- 'app_id' => Option::get('one_store_wechat_appid', 0, 'saas', '')['value'],
- 'secret' => Option::get('one_store_wechat_secret', 0, 'saas', '')['value'],
- 'response_type' => 'array'
- ];
- return Factory::miniProgram($config);
- }
- public function setBussinessWechat()
- {
- // 证书
- if (!is_dir(\Yii::$app->runtimePath . '/pem')) {
- mkdir(\Yii::$app->runtimePath . '/pem');
- file_put_contents(\Yii::$app->runtimePath . '/pem/index.html', '');
- }
- $config = [
- 'app_id' => Option::get('platform_appid', 0, 'saas')['value'],
- 'secret' => Option::get('platform_key', 0, 'saas')['value'],
- 'response_type' => 'array'
- ];
- return Factory::miniProgram($config);
- }
- }
|