1. 程式人生 > >Laravel5.6結合EasyWechat實現微信選單管理

Laravel5.6結合EasyWechat實現微信選單管理

關於微信公眾號開發,網上的教程也有很多,但是針對於功能模組的開發,沒有具體的操作步驟,很難理解別人寫的是什麼,所以我根據自己的經驗來總結一下針對微信選單管理的具體實現步驟。微信原生實現我就不說了,看看微信官方文件,基本是看不懂的。我們這裡以微信測試號為例,使用的是Laravel + EasyWechat 去實現此功能。注:本次開發,專案無需上線,本地即可。

一、在後臺模組中增加微信選單管理,先把頁面做出來。
1、配置微信選單管理相關路由,直接上程式碼:

Route::prefix('menu')->group(function () {
        $this->get('edit', '
[email protected]
')->name('menu.edit'); $this->put('update', '[email protected]')->name('menu.update'); $this->delete('destroy', '[email protected]')->name('menu.destroy'); });

2、建立對應的控制器和方法,並載入模板。本次模板使用的是amazeui前端框架,由於模板程式碼較為複雜,此處省去模板程式碼,需要參考模板程式碼的朋友可以到我的碼雲上下載即可。

https://gitee.com/canonforever/canon4ever

二、安裝EasyWechat第三方包,配置微信所需資訊
1、頁面做好後,開啟 EasyWechat官網,找到Laravel安裝包,終端進入專案,執行命令:composer require “overtrue/laravel-wechat:~4.0”,建立配置檔案: php artisan vendor:publish --provider=“Overtrue\LaravelWeChat\ServiceProvider”
2、開啟微信公眾平臺測試號,https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login,用自己的微信掃碼登入即可。


3、在.env檔案中配置微信公眾號APPID和祕鑰,程式碼如下:

 WECHAT_DEBUG=true
 WECHAT_OFFICIAL_ACCOUNT_APPID=wxe846b6db8a21a631
 WECHAT_OFFICIAL_ACCOUNT_SECRET=6cc667bfd763d2cf9e19bd6de65a519a

三、實現微信選單編輯操作
1、在控制器中呼叫EasyWechat的SDK獲取例項,程式碼如下:

private $menu;
public function __construct()
{
   //$app = EasyWeChat::officialAccount(); // 公眾號
   $app = app('wechat.official_account');
   $this->menu = $app->menu;
 }

2、編輯微信選單。由於微信選單設定後,一般無需經常更新,所以我這裡使用了laravel自帶的快取處理,提高讀取速度。程式碼如下:

 function edit()
 {
      //嘗試去獲取當前微信裡面的選單,如果選單存在,那麼就呼叫SDK裡面的list方法獲取到,然後返回給前端顯示,如果沒有選單,那麼就返回一個空陣列。
      $buttons = Cache::rememberForever('wechat_config_menus', function () {
         $list = $this->menu->list(); //獲取所有選單
         if (isset($list['menu'])) {
             return $list['menu']['button'];
         }
         return [];
      });
      return view('admin.wechat.menu.edit', compact('buttons'));
   }

3、自定義函式。由於微信表單提交後不允許有空值,所以我們要自定義輔助函式刪除空陣列。在輔助函式中新增程式碼如下:

/**
    * 微信選單, 刪除空陣列
    * @param $buttons
    * break 用來跳出目前執行的迴圈,並不再繼續執行迴圈了。
    * continue 立即停止目前執行迴圈,並回到迴圈的條件判斷處,繼續下一個迴圈。
    */
function wechat_menus($request_buttons)
{
    $buttons = [];
    foreach ($request_buttons as $key => $value) {
        if ($value['name'] == "") {
               continue;//終止本次迴圈而進入到下一次迴圈中,
        }

        $buttons["$key"] = wechat_key_url($value);

        foreach ($value["sub_button"] as $k => $v) {
             if ($v['name'] == "") {
                   continue;
             }
             $buttons["$key"]["sub_button"][] = wechat_key_url($v);
         }
     }
    return $buttons;
}
   /**
    * 根據型別,返回url或者key
    * @param $value
    * @return array
    */
function wechat_key_url($value)
{
    $result = [];
    $result['type'] = $value['type'];
    $result['name'] = $value['name'];
    if ($value['type'] == "click") {
        $result['key'] = $value['value'];
    } else {
        $result['url'] = $value['value'];
    }
    return $result;
}

4、執行更新。獲取前端傳過來的所有選單,呼叫自定義函式去處理空陣列得到我們想要的值,然後再呼叫EasyWechat裡面的create方法執行更新即可。程式碼如下:

function update(Request $request)
{
    $buttons = wechat_menus($request->buttons);
    $this->menu->create($buttons);
    Cache::forget('wechat_config_menus');
    return back()->with('success', '您已成功設定選單,請取消關注後,再重新關注~');
}
四、實現微信選單刪除操作
刪除選單。直接呼叫EasyWechat裡面的delete方法即可刪除。程式碼如下:

function destroy()
{
    $this->menu->delete();
    Cache::forget('wechat_config_menus');
    return back()->with('success', '您已成功刪除選單,請取消關注後,再重新關注~');
}

注意:如果選單修改提交超時,或者提示curl等錯誤,在view型別下,後面對應的值一定要帶有http://開頭,否則提交失敗!
至此,微信自定義選單功能完成。當然還有其他細節功能可以查閱 EasyWechat 文件。