253 lines
7.9 KiB
PHP
253 lines
7.9 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @author Any
|
|
* @description KISS
|
|
* @date 2020-11-5
|
|
* @version 1.0.0
|
|
*
|
|
* _____LOG_____
|
|
*
|
|
*/
|
|
|
|
namespace app\modules\store\models\dev;
|
|
|
|
use app\components\FlashStorage;
|
|
use app\components\SiteHelper;
|
|
use app\components\ZipFile;
|
|
use app\models\auth\RoleUser;
|
|
use app\models\BallCart;
|
|
use app\models\Coach;
|
|
use app\models\Dev;
|
|
use app\models\District;
|
|
use app\models\Model;
|
|
use app\models\Store;
|
|
use app\models\StoreUser;
|
|
use app\models\User;
|
|
use app\models\Admin;
|
|
use app\models\wechat\WechatApp;
|
|
use app\modules\api\controllers\Controller;
|
|
use app\modules\store\models\AdminModel;
|
|
use app\models\common\CommonUserEditForm;
|
|
use app\modules\api\components\Mqtt;
|
|
use app\modules\api\models\StoreCityForm;
|
|
use PHPQRCode\QRcode;
|
|
use Wechat\Wechat;
|
|
|
|
class DevActionForm extends AdminModel
|
|
{
|
|
public $ids;
|
|
|
|
|
|
private $url = 'https://app.3dxh.h5.dev.1nww.com/#/White';
|
|
|
|
public $wechat_mp;
|
|
|
|
|
|
public function rules()
|
|
{
|
|
return [
|
|
[['ids'], 'required'],
|
|
[['ids'], 'safe'],
|
|
];
|
|
}
|
|
|
|
public function attributeLabels()
|
|
{
|
|
return [
|
|
'ids' => '选择项',
|
|
];
|
|
}
|
|
|
|
|
|
public function getBallQrcode()
|
|
{
|
|
$ball = Dev::findOne($this->ids);
|
|
if ($ball == null) {
|
|
return ['code' => 1, 'msg' => '该设备不存在'];
|
|
}
|
|
$store = Store::findOne($ball->store_id);
|
|
if ($store == null) {
|
|
return ['code' => 1, 'msg' => '该设备所在门店不存在'];
|
|
}
|
|
|
|
return $this->getQrcode($store, $ball);
|
|
}
|
|
|
|
|
|
//设备二维码
|
|
public function actionQrWechatcode($id = 0)
|
|
{
|
|
$ball = Dev::findOne($this->ids);
|
|
if ($ball == null) {
|
|
return ['code' => 1, 'msg' => '该设备不存在'];
|
|
}
|
|
$store = Store::findOne($ball->store_id);
|
|
if ($store == null) {
|
|
return ['code' => 1, 'msg' => '该设备所在门店不存在'];
|
|
}
|
|
$path = 'qrcode/';
|
|
if (!is_dir($path)) {
|
|
mkdir($path, 0777, true);
|
|
}
|
|
|
|
$hostname = $this->url;
|
|
$filename = 'qrcode/' . md5($ball->dev_number."wechat_01") . '.png';
|
|
if(is_dir($filename)){
|
|
return ['code' => 0, 'msg' => 'ok', 'data' => \Yii::$app->request->getHostInfo() . '/' . $filename];
|
|
}
|
|
//微信小程序
|
|
$wechat_app = WechatApp::findOne([
|
|
'cx_mch_id' => 0,
|
|
'is_delete' => 0
|
|
]);
|
|
if($wechat_app){
|
|
if (!is_dir(\Yii::$app->runtimePath . '/pem')) {
|
|
mkdir(\Yii::$app->runtimePath . '/pem');
|
|
file_put_contents(\Yii::$app->runtimePath . '/pem/index.html', '');
|
|
}
|
|
$cert_pem_file = null;
|
|
if ($wechat_app->cert_pem) {
|
|
$cert_pem_file = \Yii::$app->runtimePath . '/pem/' . md5($wechat_app->cert_pem);
|
|
if (!file_exists($cert_pem_file))
|
|
file_put_contents($cert_pem_file, $wechat_app->cert_pem);
|
|
}
|
|
$key_pem_file = null;
|
|
if ($wechat_app->key_pem) {
|
|
$key_pem_file = \Yii::$app->runtimePath . '/pem/' . md5($wechat_app->key_pem);
|
|
if (!file_exists($key_pem_file))
|
|
file_put_contents($key_pem_file, $wechat_app->key_pem);
|
|
}
|
|
$this->wechat_mp = new Wechat([
|
|
'appId' => $wechat_app->app_id,
|
|
'appSecret' => $wechat_app->app_secret,
|
|
'mchId' => $wechat_app->mch_id,
|
|
'apiKey' => $wechat_app->key,
|
|
'certPem' => $cert_pem_file,
|
|
'keyPem' => $key_pem_file,
|
|
]);
|
|
}
|
|
$url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=".$this->wechat_mp->getAccessToken();
|
|
$arr = [
|
|
'action_name' => 'QR_LIMIT_SCENE',
|
|
'action_info' => [
|
|
'scene' => [
|
|
'scene_id' => $ball->id,
|
|
],
|
|
],
|
|
];
|
|
$res = $this->wechat_mp->curl->post($url,json_encode($arr));
|
|
$res = json_decode($res->response,true);
|
|
$url = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=".urlencode($res['ticket']);
|
|
$res = $this->wechat_mp->curl->get($url);
|
|
file_put_contents($filename,$res->response);
|
|
return ['code' => 0, 'msg' => 'ok', 'data' => \Yii::$app->request->getHostInfo() . '/' . $filename];
|
|
}
|
|
|
|
|
|
/**
|
|
* @param $store
|
|
* @param $ball
|
|
* @return array
|
|
*/
|
|
public function getQrcode($store, $ball)
|
|
{
|
|
|
|
$path = 'qrcode/';
|
|
if (!is_dir($path)) {
|
|
mkdir($path, 0777, true);
|
|
}
|
|
|
|
$hostname = $this->url;
|
|
$filename = 'qrcode/' . $ball->dev_number . '.png';
|
|
|
|
|
|
if (!file_exists($filename)) {
|
|
|
|
|
|
$qr_data = $hostname . "?dev_id={$ball->id}&store_id={$ball->store_id}&time={$ball->created_at}&path=basicsInfo";
|
|
$errorCorrectionLevel = 'L'; //容错级别
|
|
$matrixPointSize = 5; //生成图片大小
|
|
|
|
|
|
|
|
QRcode::png($qr_data, $filename, $errorCorrectionLevel, $matrixPointSize, 2, true);
|
|
|
|
$url = \Yii::$app->request->getHostInfo() . '/' . $filename;
|
|
if (!file_exists($filename)) {
|
|
return ['code' => 1, 'msg' => '生成二维码失败'];
|
|
} else {
|
|
return ['code' => 0, 'msg' => 'ok', 'data' => $url];
|
|
}
|
|
// if (!file_exists($filename)) {
|
|
// return [
|
|
// 'code' => 1,
|
|
// 'msg' => 'Failed to generate QR code.'
|
|
// ];
|
|
// } else {
|
|
|
|
|
|
// $url = $hostname . '/' . $filename;
|
|
|
|
// $file = fopen($filename, "w");//打开文件准备写入
|
|
// fwrite($file, $url);//写入,$res为图片二进制内容
|
|
// fclose($file);//关闭
|
|
|
|
|
|
// //图片是否存在
|
|
// if (!file_exists($filename)) {
|
|
// return ['code' => 1, 'msg' => '生成二维码失败'];
|
|
// } else {
|
|
// return ['code' => 0, 'msg' => 'ok', 'data' => $url];
|
|
// }
|
|
// }
|
|
} else {
|
|
return ['code' => 0, 'msg' => 'ok', 'data' => \Yii::$app->request->getHostInfo() . '/' . $filename];
|
|
}
|
|
}
|
|
|
|
//获取小程序二维码
|
|
public function wxmpQrcode($body)
|
|
{
|
|
$plugin = new \app\models\common\PluginService();
|
|
$wxmpService = $plugin->getWxmpService(0);
|
|
$accessToken = $wxmpService->getAccessToken();
|
|
if (empty($accessToken)) {
|
|
$accessToken = $wxmpService->getAccessToken(true);
|
|
}
|
|
$body = json_encode($body);
|
|
return $wxmpService->Qrcode->getWxappQrcode($accessToken, $body);
|
|
}
|
|
|
|
public function BatchQrcode()
|
|
{
|
|
$ball = Dev::find()->select('id,store_id,name,dev_number,created_at')->where(['is_delete' => 0])->all();
|
|
if ($ball == null) {
|
|
return ['code' => 1, 'msg' => '该设备不存在'];
|
|
}
|
|
|
|
$path = 'qrcode/dev_qrcode_zip';
|
|
if (!is_dir($path)) {
|
|
mkdir($path, 0777, true);
|
|
}
|
|
$paths = [];
|
|
foreach ($ball as $value) {
|
|
$store = Store::findOne($value->store_id);
|
|
if ($store == null) {
|
|
return $value->dev_number . '编号设备所在门店不存在';
|
|
}
|
|
$r = $this->getQrcode($store, $value);
|
|
if ($r['code'] != 0) {
|
|
return $r['msg'];
|
|
}
|
|
$name = $store->name . '_' . $value->dev_number . '.png';
|
|
array_push($paths, ['name' => $name, 'path' => $r['data']]);
|
|
}
|
|
if (empty($paths)) {
|
|
return '无下载数据';
|
|
}
|
|
$zipName = '设备二维码_' . date('Y年m月d日') . '下载' . '.zip'; // 压缩包文件名
|
|
return (new ZipFile())->downloadZipImg($zipName, $path, $paths);
|
|
}
|
|
|
|
} |