【亲测有效】微信公众号设置菜单栏显示,未开启自定义菜单,微信公众平台自定义菜单接口开发
<?php
namespace app\api\controller;
use think\Cache;
class WeChatJutuiguanjia
{
protected $appid;
protected $secret;
protected $accessToken;
/***
* 设置微信公众号appid及secret
**/
function __construct()
{
$this->appid = "";
$this->secret = "";
$this->accessToken = $this->getAccessToken();
}
/***
* 获取access_token
* token的有效时间为2小时,这里可以做下处理,提高效率不用每次都去获取,
* 将token存储到缓存中,每2小时更新一下,然后从缓存取即可
* @return
**/
private function getAccessToken()
{
$access_token = Cache::get('access_token');
if(empty($uid)){
$url = "/cgi-bin/token?grant_type=client_credential&apptoken operator">. $this->appid . "&secret=" . $this->secret;
$res = json_decode($this->httpRequest($url), true);
Cache::set('access_token', $res['access_token'],60*59);
$access_token = $res['access_token'];
}
return $access_token;
}
/***
* POST或GET请求
* @url 请求url
* @data POST数据
* @return
**/
private function httpRequest($url, $data = "")
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
if (!empty($data)) { //判断是否为POST请求
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
}
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($curl);
curl_close($curl);
return $output;
}
/***
* 获取openID和unionId
* @code 微信授权登录返回的code
* @return
**/
public function getOpenIdOrUnionId($code)
{
$url = "/sns/oauth2/access_token?apptoken operator">. $this->appid . "&secret=" . $this->secret . "&code=" . $code . "&grant_type=authorization_code";
$data = $this->httpRequest($url);
return $data;
}
/***
* 通过openId获取用户信息
* @openId
* @return
**/
public function getUserInfo($openId)
{
$url = "/cgi-bin/user/info?access_token=" . $this->accessToken . "&opentoken operator">. $openId . "&lang=zh_CN";
$data = $this->httpRequest($url);
return $data;
}
/***
* 发送模板短信
* @data 请求数据
* @return
**/
public function sendTemplateMessage($data = "")
{
$url = "/cgi-bin/message/template/send?access_token=" . $this->accessToken;
$result = $this->httpRequest($url, $data);
return $result;
}
/***
* 生成带参数的二维码
* @scene_id 自定义参数(整型)
* @return
**/
public function getQrcode($scene_id)
{
$url = "/cgi-bin/qrcode/create?access_token=" . $this->accessToken;
$data = array(
"expire_seconds" => 3600, //二维码的有效时间(1小时)
"action_name" => "QR_SCENE",
"action_info" => array("scene" => array("scene_id" => $scene_id))
);
$result = $this->httpRequest($url, json_encode($data));
return $result;
}
/***
* 配置菜单栏
* @data 请求数据
* @return
**/
public function SetMenu($data = "")
{
$url = "/cgi-bin/menu/create?access_token=" . $this->accessToken;
$result = $this->httpRequest($url, $data);
return $result;
}
/***
* 生成带参数的二维码
* @scene_str 自定义参数(字符串)
* @return
**/
public function getQrcodeByStr($scene_str)
{
$url = "/cgi-bin/qrcode/create?access_token=" . $this->accessToken;
$data = array(
"expire_seconds" => 3600, //二维码的有效时间(1小时)
"action_name" => "QR_STR_SCENE",
"action_info" => array("scene" => array("scene_str" => $scene_str))
);
$result = $this->httpRequest($url, json_encode($data));
return $result;
}
/**
* 换取二维码
* @ticket
* @return
*/
public function generateQrcode($ticket)
{
return "/cgi-bin/showqrcode?ticket=" . $ticket;
}
/**
* 表情转换(进行编码)
* @param $nickname
* @return string
*/
public function emoji_encode($nickname){
$strEncode = '';
$length = mb_strlen($nickname,'utf-8');
for ($i=0; $i < $length; $i++) {
$_tmpStr = mb_substr($nickname,$i,1,'utf-8');
if(strlen($_tmpStr) >= 4){
$strEncode .= rawurlencode($_tmpStr);
}else{
$strEncode .= $_tmpStr;
}
}
return $strEncode;
}
}