知識(shí)
不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價(jià)值,我們?cè)谧非笃湟曈X表現(xiàn)的同時(shí),更側(cè)重于功能的便捷,營(yíng)銷的便利,運(yùn)營(yíng)的高效,讓網(wǎng)站成為營(yíng)銷工具,讓軟件能切實(shí)提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序?yàn)楹笃谏?jí)提供便捷的支持!
您當(dāng)前位置>首頁(yè) » 新聞資訊 » 公眾號(hào)相關(guān) >
laravel中使用easywechat配置公眾號(hào)
發(fā)表時(shí)間:2020-10-19
發(fā)布人:葵宇科技
瀏覽次數(shù):190
安裝插件
# Laravel < 5.8
composer require "overtrue/laravel-wechat:~4.0"
# Laravel >= 5.8
composer require "overtrue/laravel-wechat:~5.0"
push配置
php artisan vendor:publish --provider="Overtrue\LaravelWeChat\ServiceProvider"
增加.env配置公眾號(hào)設(shè)置
WECHAT_OFFICIAL_ACCOUNT_APPID=wx78ae5bb2XXXX
WECHAT_OFFICIAL_ACCOUNT_SECRET=214f1ce332XXXX
WECHAT_OFFICIAL_ACCOUNT_TOKEN=yishXXX
WECHAT_OFFICIAL_ACCOUNT_AES_KEY=6lwDoXXXXXFDFEEEEEEEEE
過濾CSRF
比如你的配置訪問地址是
http://www.heibaiketang.com/api/weixin/server
那么就需要配置VerifyCsrfToken.php文件如下
api/weixin/*
定義路由
一定要定義get,post,因?yàn)樗麄凃?yàn)證get,post消息
Route::any('api/weixin/server', 'WeiXinController@server')->name('server');
簡(jiǎn)單例子
<?php
namespace App\Http\Controllers\Api;
use App\Services\weixin\ImageMessageHandler;
use App\Services\weixin\TextMessageHandler;
use EasyWeChat\Kernel\Messages\Message;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Log;
use EasyWeChat\Factory;
class WeiXinController extends BaseController
{
//微信接口服務(wù)
//https://www.yishanseo.com/api/h5/weixin/server?echostr=1410480958785089387&nonce=134704537&signature=7e6f50565319edc86585d06df0fb8539df46f305×tamp=1557556841
public function server()
{
Log::info('request arrived.'); # 注意:Log 為 Laravel 組件,所以它記的日志去 Laravel 日志看,而不是 EasyWeChat 日志
$config = config('wechat.official_account.default');
$app = Factory::officialAccount($config);
$app->server->push(function ($message) {
// $message['FromUserName'] // 用戶的 openid
// $message['MsgType'] // 消息類型:event, text....
switch ($message['MsgType']) {
case 'event':
return '收到事件消息';
break;
case 'text':
return '收到文字消息';
break;
case 'image':
return '收到圖片消息';
break;
case 'voice':
return '收到語音消息';
break;
case 'video':
return '收到視頻消息';
break;
case 'location':
return '收到坐標(biāo)消息';
break;
case 'link':
return '收到鏈接消息';
break;
case 'file':
return '收到文件消息';
// ... 其它消息
default:
return '收到其它消息';
break;
}
});
$response = $app->server->serve();
return $response;
}
}
上面為SDK寫法,laravel寫法還可以這樣
public function serve()
{
Log::info('request arrived.'); # 注意:Log 為 Laravel 組件,所以它記的日志去 Laravel 日志看,而不是 EasyWeChat 日志
$app = app('wechat.official_account');
$app->server->push(function($message){
return "歡迎關(guān)注 overtrue!";
});
return $app->server->serve();
}
這樣就搞定了。
其他寫法
$officialAccount = EasyWeChat::officialAccount(); // 公眾號(hào)
$work = EasyWeChat::work(); // 企業(yè)微信
$payment = EasyWeChat::payment(); // 微信支付
$openPlatform = EasyWeChat::openPlatform(); // 開放平臺(tái)
$miniProgram = EasyWeChat::miniProgram(); // 小程序
// 均支持傳入配置賬號(hào)名稱
EasyWeChat::officialAccount('foo'); // `foo` 為配置文件中的名稱,默認(rèn)為 `default`
//...
如果你有多個(gè)公眾號(hào),需要單獨(dú)分開。那么修改下剛才那個(gè)配置引入
第一種是$config修改就可以切換不同的公眾號(hào)
第二種就設(shè)置officialAccount(配置名字)
把用戶發(fā)過來消息服務(wù)單獨(dú)文件出來
比如我現(xiàn)在要單獨(dú)文本和圖片
public function server()
{
Log::info('request arrived.'); # 注意:Log 為 Laravel 組件,所以它記的日志去 Laravel 日志看,而不是 EasyWeChat 日志
$config = config('wechat.official_account.default');
$app = Factory::officialAccount($config);
$app->server->push(ImageMessageHandler::class, Message::IMAGE); // 圖片消息
$app->server->push(TextMessageHandler::class, Message::TEXT); // 文本消息
$response = $app->server->serve();
return $response;
}
文本
<?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2019/5/11
* Time: 14:56
*/
namespace App\Services\weixin;
use \EasyWeChat\Kernel\Contracts\EventHandlerInterface;
class TextMessageHandler implements EventHandlerInterface
{
public $message;
public function handle($payload = null)
{
$this->message=$payload;
// TODO: Implement handle() method.
return $this->message['Content'].'TXT消息';
}
}
以上所有的單獨(dú)文件需要繼承 \EasyWeChat\Kernel\Contracts\EventHandlerInterface;這個(gè)接口。
實(shí)現(xiàn)方法handle(payload),payload表示傳遞過來的對(duì)象消息。。
每個(gè)消息必須返回的消息有
ToUserName 接收方帳號(hào)(該公眾號(hào) ID)
FromUserName 發(fā)送方帳號(hào)(OpenID, 代表用戶的唯一標(biāo)識(shí))
CreateTime 消息創(chuàng)建時(shí)間(時(shí)間戳)
MsgId 消息 ID(64位整型)
微信公眾號(hào)的菜單設(shè)置:
/** * 添加菜單 */ // public function menu_add(){ // $app = app('wechat'); // $menu = $app->menu; // $buttons = [ // [ // "type"=>"view", // "name"=>"進(jìn)入課堂", // "url"=>BASE_URL."/wx_student#/main" // ], // ]; // $menu->add($buttons); // }
/** * 刪除菜單 */ // public function menu_destroy(){ // $app = app('wechat'); // $menu = $app->menu; // $menu->destroy(); // }
/** * 查看微信公眾號(hào)當(dāng)前的菜單 */ public function menu_current(){ $app = app('wechat'); $menu = $app->menu; $menus = $menu->all(); var_dump($menus); }
這個(gè)具體文檔上面都有,將這些方法加到一個(gè)控制器中,注冊(cè)路由,上傳到云服務(wù)器上,然后使用瀏覽器訪問一下這些方法,就會(huì)出相應(yīng)的結(jié)果 微信網(wǎng)頁(yè)授權(quán): 注:使用微信網(wǎng)頁(yè)授權(quán)之前,一定要檢查一下你所使用的微信公眾號(hào)是否有網(wǎng)頁(yè)授權(quán)接口的權(quán)限 在laravel版的easywechat中自帶一個(gè)微信授權(quán)的中間件,使用非常簡(jiǎn)單 只需要在配置文件將有關(guān)授權(quán)的配置填寫完整,然后在laravel
中注冊(cè)一下
然后在 路由中使用該中間件(注:使用web中間件是為了防止出現(xiàn)session不共享的情況)
例:
就可以在session中獲取授權(quán)用戶的信息
例:這是一個(gè)關(guān)于檢測(cè)登錄的中間件
public function handle($request,Closure $next, $guard = null) { if (empty(session("id"))){ $user = session('wechat.oauth_user'); $openid = $user['id']; //檢測(cè)數(shù)據(jù)庫(kù)中用戶賬號(hào)和微信號(hào)是否綁定 $result = WxStudent::check_boundwechat($openid); if ($result=='200'){ return $next($request); }else{ return response("請(qǐng)登錄", 403)->header("X-CSRF-TOKEN", csrf_token()); } } else if(!empty(session("id"))) { return $next($request); } } 注:如果報(bào)redirect_uri錯(cuò)誤,這時(shí)候極有可能是網(wǎng)頁(yè)授權(quán)的鏈接沒有更改成現(xiàn)在需要授權(quán)的網(wǎng)址,這時(shí)候只需要去公眾號(hào)后臺(tái)改一下要授權(quán)的網(wǎng)址即可 例:
這樣授權(quán)部分的就介紹完了,下面來說一下微信公眾號(hào)向已關(guān)注的用戶推送模板消息 模板消息 ps:要先看一下微信公眾號(hào)是否支持模板消息接口,然后要先把該模板消息的摸板添加到你的微信公眾號(hào)上(通過公眾號(hào)后臺(tái)),然后要知道你要使用模板消息的模板id 如:$template_id = 'XQ3uJilYd5elz-TUHzkvKF4-nfB6Yu3WBm0B45dRtbY';
示例:
$app = app('wechat'); $notice = $app->notice;
$template_id = 'XQ3uJilYd5elz-TUHzkvKF4-nfB6Yu3WBm0B45dRtbY'; //消息模板的id $url = BASE_URL.'/wx_student#/bulletininfo/'.$course_id.'/'.$bu_id; //點(diǎn)擊模板消息的跳轉(zhuǎn)的地址
//循環(huán)給多個(gè)用戶發(fā)送消息 // foreach ($users as $user){ // if ($user['openid']!=""&&$user['openid']!='0'&&!empty($user['openid'])){ // $open_id = $user['openid']; // 注:不同的模板,$data的內(nèi)容可能不太一樣,具體要看你微信公眾號(hào)后臺(tái)所使用的模板,上面都有示例的 // $data = array( // "first"=>$user['name']."同學(xué)你好,你的".$course_nam.'課教師'.$create_name.'發(fā)布了一個(gè)新的班級(jí)公告', // "keyword1"=>'', // "keyword2"=>'', // "remark"=>'請(qǐng)及時(shí)查看班級(jí)公告', // ); // $notice->uses($template_id)->withUrl($url)->andData($data)->andReceiver($open_id)->send(); // } // }
模板消息如果發(fā)不出去的話,你要檢查一下微信公眾號(hào)是否有該接口的權(quán)限,這個(gè)接口的調(diào)用次數(shù)好像是有限制 下面來說一下調(diào)用微信的掃碼接口 這個(gè)是微信的jssdk 后臺(tái)jssdk的域名不要填寫http:// 直接寫就行。如ydjx.gm365.cc 要不然可能jssdk就無法調(diào) 1.先在html里面引入
<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js" type="text/javascript" charset="utf-8"></script> <script type="text/javascript" charset="utf-8"> wx.config(<?php echo app('wechat')->js->config(array('scanQRCode'), false) ?>); </script>
然后在js中加上這個(gè)方法
scan_code(){ wx.scanQRCode({ needResult: 1, // 默認(rèn)為0,掃描結(jié)果由微信處理,1則直接返回掃描結(jié)果, success: function (res) { var result = res.resultStr; // 當(dāng)needResult 為 1 時(shí),掃碼返回的結(jié)果 } }); }
其他查看官方文檔文檔
https://www.easywechat.com/docs/4.1/official-account/server
相關(guān)案例查看更多
相關(guān)閱讀
- 云南網(wǎng)站優(yōu)化公司
- 云南網(wǎng)站建設(shè)服務(wù)
- 云南網(wǎng)站建設(shè)
- 微信小程序
- 軟件定制
- 網(wǎng)站建設(shè)方案 doc
- 昆明軟件定制
- 百度自然排名
- 昆明小程序公司
- 正規(guī)網(wǎng)站建設(shè)公司
- 網(wǎng)站優(yōu)化公司
- 汽車報(bào)廢拆解管理系統(tǒng)
- SEO
- 小程序的開發(fā)公司
- 百度排名
- 網(wǎng)站建設(shè)服務(wù)
- 網(wǎng)站建設(shè)快速優(yōu)化
- 跳轉(zhuǎn)小程序
- 云南網(wǎng)絡(luò)營(yíng)銷
- 汽車報(bào)廢回收管理軟件
- 云南小程序開發(fā)哪家好
- 云南小程序設(shè)計(jì)
- 模版信息
- 云南網(wǎng)絡(luò)推廣
- 云南小程序商城
- 智慧農(nóng)貿(mào)市場(chǎng)
- 小程序設(shè)計(jì)
- 云南網(wǎng)站建設(shè)價(jià)格
- 昆明小程序哪家好
- 百度快速排名