fastadmin添加活动二维码图片,扫码可以直接跳转到该活动
一,在controll重写add方法
/** * 添加 */ public function add() { if ($this->request->isPost()) { $params = $this->request->post("row/a"); if ($params) { $params = $this->preExcludeFields($params); if ($this->dataLimit && $this->dataLimitFieldAutoFill) { $params[$this->dataLimitField] = $this->auth->id; } $result = false; Db::startTrans(); try { //是否采用模型验证 if ($this->modelValidate) { $name = str_replace("\\model\\", "\\validate\\", get_class($this->model)); $validate = is_bool($this->modelValidate) ? ($this->modelSceneValidate ? $name . '.add' : $name) : $this->modelValidate; $this->model->validateFailException(true)->validate($validate); } $result = $this->model->allowField(true)->save($params); Db::commit(); //添加方法 if($result){ //通过save后获取自增的ID,传进获取二维码方法,生成跳转指定小程序页面的二维码,保存到数据表中 $this->getEwm($this->model->getData('id')); } } catch (ValidateException $e) { Db::rollback(); $this->error($e->getMessage()); } catch (PDOException $e) { Db::rollback(); $this->error($e->getMessage()); } catch (Exception $e) { Db::rollback(); $this->error($e->getMessage()); } if ($result !== false) { $this->success(); } else { $this->error(__('No rows were inserted')); } } $this->error(__('Parameter %s can not be empty', '')); } return $this->view->fetch(); }
2、自定义getEwm方法
public function getEwm($id){
$access_token = $this->getWxAccessToken();
// p($access_token);die;
//构建请求二维码参数
//path是扫描二维码跳转的小程序路径,可以带参数?id=xxx
//width是二维码宽度
$qcode ="https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=".$access_token;
$data = array();
$data['scene'] = 'type=qrcode';
$data['path'] = "pages/actDetails/actDetails?id=".$id;
$data = json_encode($data);
// $data = json_encode(array("path"=>"pages/index/index?aOpenid=".$openid,"width"=> 150));
$jpg = $this->get_http_array($qcode,$data);
$imgDir = 'uploads/zshd/';
// $filename="ewm.jpg";///要生成的图片名字
$filename = 'zshdact'.$id.'.jpg';
$file = fopen("./".$imgDir.$filename,"w");//打开文件准备写入
fwrite($file,$jpg);//写入
fclose($file);//关闭
$imgUrl = constant("URL").'/uploads/zshd/'.$filename;
//更新二维码图片到活动表中
ZshdActivityModel::where('id',$id)->update(['ewmImage'=>$imgUrl]);
// return json($imgUrl);
}
public function get_http_array($url,$post_data) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //没有这个会自动输出,不用print_r();也会在后面多个1
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
$output = curl_exec($ch);
return $output;
}
/**
* 获取小程序access_token
*/
public function getWxAccessToken(){
$appId = constant('appidZshd');
$appSecret = constant('secretZshd');
$access_token = Cache::get('wx_access_token:'.$appId);
if($access_token){
return $access_token;
}else{
//1.请求url地址
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appId."&secret=".$appSecret;
$res = $this->curl($url);
if(isset($res['errcode']) && $res['errcode']!=0){
return ('获取access_token出错');
}
$access_token = $res['access_token'];
Cache::set('wx_access_token:'.$appId,$access_token,5400);
return $access_token;
}
}
public function curl($url,$data = null){
// p($data);die;
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 500);
// 为保证第三方服务器与微信服务器之间数据传输的安全性,所有微信接口采用https方式调用,必须使用下面2行代码打开ssl安全校验。
// 如果在部署过程中代码在此处验证失败,请到 http://curl.haxx.se/ca/cacert.pem 下载新的证书判别文件。
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_URL, $url);
if (!empty($data)){
curl_setopt($curl, CURLOPT_POST, 1);
// curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
}
$res = curl_exec($curl);
curl_close($curl);
$json_obj = json_decode($res,true);
// p($json_obj);die;
return $json_obj;
}