微信公众号开发创建菜单
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;//文件存储
use \DB;
use App\Models\Code_log;
use Validator;
class WeixinController extends Controller
{
public function index(Request $request)
{
// 获取有效的 access_token(需确保此方法返回有效 token)
$accessToken = $this->access_token($request);
echo $accessToken;
if (!$accessToken) {
return response('获取 access_token 失败', 500);
}
// 构建微信菜单接口 URL(修复变量插值问题)
$url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token={$accessToken}";
// 正确的菜单数据结构
$menuData = [
"button" => [
[
"type" => "view",
"name" => "稻花香",
"url" => " http"
],
[
"type" => "view",
"name" => "自营小店",
"url" => "https://store.weixin.qq.com/shop"
],
[
"type" => "scancode_push",
"name" => "扫码防伪",
"key"=> "rselfmenu_0_1",
"sub_button"=> [ ]
]
]
];
// 初始化 cURL
$ch = curl_init();
// 设置 cURL 选项(关键修正点)
curl_setopt_array($ch, [
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($menuData, JSON_UNESCAPED_UNICODE), // 必须使用 JSON 编码
CURLOPT_HTTPHEADER => [
'Content-Type: application/json', // 修正 header 格式
],
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_TIMEOUT => 30
]);
// 执行请求
$response = curl_exec($ch);
// 处理 cURL 错误
if (curl_errno($ch)) {
$errorMsg = 'cURL 错误: ' . curl_error($ch);
curl_close($ch);
return response($errorMsg, 500);
}
// 获取 HTTP 状态码
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
// 解析微信响应
$result = json_decode($response, true);
if ($httpCode == 200 && isset($result['errcode']) && $result['errcode'] == 0) {
return response('菜单创建成功');
} else {
// 记录错误日志(建议添加)
// Log::error('微信菜单创建失败', ['response' => $result]);
return response('菜单创建失败: ' . ($result['errmsg'] ?? '未知错误'), 500);
}
}
// 微信服务器验证
protected function check(Request $request)
{
// 记录调试日志
Storage::put('微信开发2.txt', json_encode([
'signature' => $request->signature,
'timestamp' => $request->timestamp,
'nonce' => $request->nonce,
'echostr' => $request->echostr
]));
$weixin_signature = $request->signature;
$token = 'wuchangdamijiushiniu';
$timestamp = $request->timestamp;
$nonce = $request->nonce;
// 生成签名
$params = [$token, $timestamp, $nonce];
sort($params, SORT_STRING);
$my_signature = sha1(implode('', $params));
// 安全比较签名
if (hash_equals(strtolower($my_signature), strtolower($weixin_signature))) {
//return response($request->echostr)->header('Content-Type', 'text/plain'); // 注意参数名 `echostr`
return true;
} else {
return false;
// return response('签名验证失败', 403); // 返回 HTTP 403 错误
}
}
//获取token
protected function access_token(Request $request){
//微信公众号获取accessToken
Storage::put('微信开发.txt', $request);
$appid ='xxxxx';
$appSecret ='xxxxx';
$curl = curl_init();
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt_array($curl, array(
CURLOPT_URL => "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=xxx&secret=xxx",
CURLOPT_TIMEOUT => 30,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Accept: application/json'
),
));
$response = curl_exec($curl);
curl_close($curl);
//return $response;
$tokendata = json_decode($response, true);
return $tokendata['access_token'];
// 获取微信公众号获取accessToken结束
}
}
最近访问时间:2025-04-28 21:47:29