微信公眾號自定義選單欄的步驟
阿新 • • 發佈:2019-01-01
1、
//獲取token值存入檔案
$appid= '寫入自己的公眾號的appid'; $app_secret = '寫入自己的公眾號的appsecret'; $menu_url=__DIR__.'/menu.txt'; if(!file_exists($menu_url) || time() - filemtime( $menu_url ) > 7100){ //獲取token值 $token_url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$appid.'&secret='.$app_secret; $token_json=file_get_contents( $token_url ); $token_data=json_decode($token_json,true); if(!empty($token_data['access_token'])){ $a=file_put_contents($menu_url ,$token_data['access_token']); } $token = $token_data['access_token']; }else{ $token = file_get_contents($menu_url); }
2、
定義json串例如
$param_str='{ "button":[ { "type":"click", "name":"今日歌曲", "key":"V1001_TODAY_MUSIC" }, { "name":"樂檸教育", "sub_button":[ { "type":"view", "name":"百度一下,你就知道","url":"http://www.baidu.com/" }, { "type":"view", "name":"贊一下我們", "url":"http://132.232.17.237/" }] }] }';
3、用一個函式來對微信伺服器進行請求
function CurlPost($url, $param = [], $is_post = 1, $timeout = 5 ) { //初始化curl $curl = curl_init(); // 設定請求的路徑 curl_setopt($curl, CURLOPT_URL, $url); if( $is_post == 1 ){ //設定POST提交 curl_setopt($curl, CURLOPT_POST, 0 ); } //顯示輸出結果 1代表 把介面返回的結果當作一個字串處理 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 設定請求超時時間 curl_setopt($curl, CURLOPT_TIMEOUT, $timeout); curl_setopt( $curl ,CURLOPT_SSL_VERIFYHOST , false ); curl_setopt( $curl ,CURLOPT_SSL_VERIFYPEER , false ); if( $is_post == 1 ){ //提交資料 -- 設定post提交的資料 if (is_array($param)) { //http_build_query curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($param)); } else { curl_setopt($curl, CURLOPT_POSTFIELDS, $param); } } //執行請求 $data = $data_str = curl_exec($curl); //處理錯誤 if ($error = curl_error($curl)) { $log_data = array( 'url' => $url, 'param' => $param, 'error' => '<span style="color:red;font-weight: bold">' . $error . '</span>', ); var_dump($log_data); exit; } # 關閉CURL curl_close($curl); //json資料轉換為陣列 $data = json_decode($data, true); if (!is_array($data)) { $data = $data_str; } #呼叫玩介面之後寫一個日誌 $log = [ 'url' => $url , 'param' => $param , 'response' => $data_str ]; file_put_contents( __DIR__.'/wechat.log' , print_r( $log , true ) , 8 ); return $data;
}
4、呼叫的時候可能報錯因為json串的原因
$param_str= rtrim($param_str);去掉最右邊的多餘部分就行了