9 changed files with 347 additions and 0 deletions
-
24backend/modules/wx_public_account/Module.php
-
BINbackend/modules/wx_public_account/assets/img/wechat-top.png
-
65backend/modules/wx_public_account/assets/js/custom_menu.js
-
47backend/modules/wx_public_account/controllers/PublicAccountController.php
-
109backend/modules/wx_public_account/logic/PublicAccountManager.php
-
63backend/modules/wx_public_account/models/ars/WxPublicAccountConfig.php
-
17backend/modules/wx_public_account/views/public-account/custom_menu.php
-
22backend/modules/wx_public_account/web/WxPublicAccountAsset.php
-
BINbackend/modules/wx_public_account/web/img/wechat-top.png
@ -0,0 +1,24 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace backend\modules\wechat_public_account; |
||||
|
|
||||
|
/** |
||||
|
* shop module definition class |
||||
|
*/ |
||||
|
class Module extends \yii\base\Module |
||||
|
{ |
||||
|
/** |
||||
|
* {@inheritdoc} |
||||
|
*/ |
||||
|
public $controllerNamespace = 'backend\modules\wechat_public_account\controllers'; |
||||
|
|
||||
|
/** |
||||
|
* {@inheritdoc} |
||||
|
*/ |
||||
|
public function init() |
||||
|
{ |
||||
|
parent::init(); |
||||
|
|
||||
|
// custom initialization code goes here
|
||||
|
} |
||||
|
} |
After Width: 320 | Height: 64 | Size: 12 KiB |
65
backend/modules/wx_public_account/assets/js/custom_menu.js
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,47 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace backend\modules\wechat_public_account\controllers; |
||||
|
|
||||
|
use Yii; |
||||
|
use yii\web\Controller; |
||||
|
use yii\filters\VerbFilter; |
||||
|
use backend\modules\shop\models\ars\Config; |
||||
|
use backend\modules\wechat_public_account\logic\PublicAccountManager; |
||||
|
|
||||
|
/** |
||||
|
* PublicAccountController manage WeChat public account platform. |
||||
|
*/ |
||||
|
class PublicAccountController extends Controller |
||||
|
{ |
||||
|
/** |
||||
|
* {@inheritdoc} |
||||
|
*/ |
||||
|
public function behaviors() |
||||
|
{ |
||||
|
return [ |
||||
|
'verbs' => [ |
||||
|
'class' => VerbFilter::className(), |
||||
|
'actions' => [ |
||||
|
'delete' => ['POST'], |
||||
|
], |
||||
|
], |
||||
|
]; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Lists all AfterSale models. |
||||
|
* @return mixed |
||||
|
*/ |
||||
|
public function actionCustomMenu() |
||||
|
{ |
||||
|
$config = Config::find()->one(); |
||||
|
if (Yii::$app->request->isPost) { |
||||
|
Yii::$app->response->format = 'json'; |
||||
|
$data = Yii::$app->request->post('data'); |
||||
|
} |
||||
|
return $this->render('custom_menu', [ |
||||
|
'customPageList' => [], |
||||
|
'data' => $config->menu_setting ?: '[]' |
||||
|
]); |
||||
|
} |
||||
|
} |
@ -0,0 +1,109 @@ |
|||||
|
<?php |
||||
|
namespace backend\modules\wechat_public_account\logic; |
||||
|
|
||||
|
use backend\modules\shop\models\ars\Config; |
||||
|
use Yii; |
||||
|
use yii\base\Exception; |
||||
|
use yii\web\ServerErrorHttpException; |
||||
|
use EasyWeChat\Factory; |
||||
|
|
||||
|
class PublicAccountManager |
||||
|
{ |
||||
|
public $response_type = 'array'; |
||||
|
//自定义菜单类型
|
||||
|
const TYPE_VIEW = 'view';//跳转网页
|
||||
|
const TYPE_MINI_PROGRAM = 'miniprogram';//跳转小程序
|
||||
|
const TYPE_CUSTOM_PAGE = 'customPage';//自定义页面
|
||||
|
|
||||
|
private static function _getEasyApp() |
||||
|
{ |
||||
|
$configModel = Config::find()->one(); |
||||
|
if (!$configModel || !$configModel->) |
||||
|
$config = [ |
||||
|
'app_id' => |
||||
|
]; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* @param $data |
||||
|
* @param Config|$configModel |
||||
|
* @throws ServerErrorHttpException |
||||
|
*/ |
||||
|
public static function dealCustomMenuData($data, $configModel) |
||||
|
{ |
||||
|
$tra = Yii::$app->db->beginTransaction(); |
||||
|
try { |
||||
|
$configModel->menu_setting = json_encode($data); |
||||
|
if (!$configModel->save()) { |
||||
|
throw new Exception(self::dealSaveErrorsString($configModel->errors)); |
||||
|
} |
||||
|
$button = self |
||||
|
} catch (Exception $e) { |
||||
|
throw new ServerErrorHttpException($e->getMessage()); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public static function dealSaveErrorsString($arr): string |
||||
|
{ |
||||
|
$data = []; |
||||
|
foreach ($arr as $k => $v) { |
||||
|
$data[] = implode(' ', $v); |
||||
|
} |
||||
|
return implode(' ', $data); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* @param $data |
||||
|
* @param $ret |
||||
|
* @return mixed |
||||
|
* 处理前端数据,递归处理 |
||||
|
*/ |
||||
|
private static function dealData($data, $ret) |
||||
|
{ |
||||
|
foreach ($data as $k => $button) { |
||||
|
$name = $button['title']; |
||||
|
$type = $button['content']['type']; |
||||
|
$value = $button['content']['value']; |
||||
|
$children = $button['children'] ?? []; |
||||
|
$ret[$k] = self::spliceData($type, $value, $name); |
||||
|
if ($children) { |
||||
|
$ret[$k]['sub_button'] = []; |
||||
|
$ret[$k]['sub_button'] = self::dealData($children, $ret[$k]['sub_button']); |
||||
|
} |
||||
|
} |
||||
|
return $ret; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* @param $type |
||||
|
* @param $value |
||||
|
* @param $name |
||||
|
* @return mixed |
||||
|
* 拼接数据为微信菜单格式 |
||||
|
*/ |
||||
|
private static function spliceData($type, $value, $name) |
||||
|
{ |
||||
|
$ret['name'] = $name; |
||||
|
if ($type) { |
||||
|
$ret['type'] = $type; |
||||
|
if ($type == self::TYPE_VIEW) { |
||||
|
$ret['url'] = $value; |
||||
|
} elseif ($type == self::TYPE_MINI_PROGRAM) { |
||||
|
$ret['appid'] = $value['appId']; |
||||
|
$ret['pagepath'] = $value['url']; |
||||
|
$ret['url'] = $value['spareWebUrl']; |
||||
|
} elseif ($type == self::TYPE_CUSTOM_PAGE) { |
||||
|
// $ret['type'] = self::TYPE_MINI_PROGRAM;
|
||||
|
// $page = PageLayout::findOne($value);
|
||||
|
// $ret['appid'] = Yii::$app->config->getConfig()->mini_program_appId;
|
||||
|
// if ($page->is_home) {
|
||||
|
// $ret['pagepath'] = Yii::$app->params['pageIndex'];
|
||||
|
// } else {
|
||||
|
// $ret['pagepath'] = Yii::$app->params['pageOther'] . $value;
|
||||
|
// }
|
||||
|
// $ret['url'] = Yii::$app->config->getConfig()->wx_domain_name . '#/' . $ret['pagepath'];
|
||||
|
} |
||||
|
} |
||||
|
return $ret; |
||||
|
} |
||||
|
} |
@ -0,0 +1,63 @@ |
|||||
|
<?php |
||||
|
|
||||
|
|
||||
|
namespace backend\modules\wx_public_account\models\ars; |
||||
|
|
||||
|
use yii\behaviors\TimestampBehavior; |
||||
|
use yii\redis\ActiveRecord; |
||||
|
|
||||
|
/** |
||||
|
* Class WxPayConfig |
||||
|
* @package backend\modules\shop\models\ars |
||||
|
* @property int $id |
||||
|
* @property int $user_id 用户id |
||||
|
* @property int $mch_id 商户号 |
||||
|
* @property string $key 支付秘钥 |
||||
|
* @property string $cert_path cert文件路径 |
||||
|
* @property string $key_path key文件路径 |
||||
|
*/ |
||||
|
|
||||
|
class WxPayConfig extends ActiveRecord |
||||
|
{ |
||||
|
/** |
||||
|
* 主键 默认为 id |
||||
|
* |
||||
|
* @return array|string[] |
||||
|
*/ |
||||
|
public static function primaryKey() |
||||
|
{ |
||||
|
return ['id']; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 模型对应记录的属性列表 |
||||
|
* |
||||
|
* @return array |
||||
|
*/ |
||||
|
public function attributes() |
||||
|
{ |
||||
|
return ['id', 'user_id', 'mch_id', 'key', 'cert_path', 'key_path', 'created_at', 'updated_at']; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* @author linyao |
||||
|
* @email 602604991@qq.com |
||||
|
* @created Nov 8, 2019 |
||||
|
* |
||||
|
* 行为存储创建时间和更新时间 |
||||
|
*/ |
||||
|
public function behaviors() |
||||
|
{ |
||||
|
return [ |
||||
|
[ |
||||
|
'class' => TimestampBehavior::className(), |
||||
|
'createdAtAttribute' => 'created_at', |
||||
|
'updatedAtAttribute' => 'updated_at', |
||||
|
'value' => function () { |
||||
|
return time(); |
||||
|
}, |
||||
|
], |
||||
|
]; |
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,17 @@ |
|||||
|
<?php |
||||
|
|
||||
|
use backend\modules\wx_public_account\web\WxPublicAccountAsset; |
||||
|
|
||||
|
/* @var $this yii\web\View */ |
||||
|
/* @var $searchModel vendor\iron\coupon\src\models\searchs\ServicesDomainSearch */ |
||||
|
/* @var $dataProvider yii\data\ActiveDataProvider */ |
||||
|
|
||||
|
$this->title = '自定义菜单'; |
||||
|
$this->params['breadcrumbs'][] = $this->title; |
||||
|
WxPublicAccountAsset::register($this); |
||||
|
?>
|
||||
|
|
||||
|
<script> |
||||
|
var customPageList = <?= json_encode($customPageList) ?>;
|
||||
|
var data = <?= $data ?>;
|
||||
|
</script> |
@ -0,0 +1,22 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace backend\modules\goods\web; |
||||
|
|
||||
|
use yii\web\AssetBundle; |
||||
|
|
||||
|
/** |
||||
|
* Main backend application asset bundle. |
||||
|
*/ |
||||
|
class GoodsAttributeAsset extends AssetBundle |
||||
|
{ |
||||
|
public $sourcePath = "@backend/modules/goods/assets"; |
||||
|
public $css = [ |
||||
|
]; |
||||
|
public $js = [ |
||||
|
// 'custom/sku.49a56a9198d9c3ec233c.js'
|
||||
|
'custom/sku.52802ed907a316501cd7.js' |
||||
|
]; |
||||
|
public $depends = [ |
||||
|
'yii\web\YiiAsset', |
||||
|
]; |
||||
|
} |
After Width: 320 | Height: 64 | Size: 12 KiB |
Write
Preview
Loading…
Cancel
Save
Reference in new issue