easywechat php例子,laravel使用easywechat手把手

安装插件

# 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配置公众号设置

WECHAT_OFFICIAL_ACCOUNT_APPID=wx78ae5bb2XXXX

WECHAT_OFFICIAL_ACCOUNT_SECRET=214f1ce332XXXX

WECHAT_OFFICIAL_ACCOUNT_TOKEN=yishXXX

WECHAT_OFFICIAL_ACCOUNT_AES_KEY=6lwDoXXXXXFDFEEEEEEEEE

过滤CSRF

api/weixin/*

定义路由

一定要定义get,post,因为他们验证get,post消息

Route::any('api/weixin/server', 'WeiXinController@server')->name('server');

简单例子

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

{

//微信接口服务

//https://www.yishanseo.com/api/h5/weixin/server?echostr=1410480958785089387&nonce=134704537&signature=7e6f50565319edc86585d06df0fb8539df46f305&timestamp=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 '收到坐标消息';

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 "欢迎关注 overtrue!";

});

return $app->server->serve();

}

这样就搞定了。

其他写法

$officialAccount = EasyWeChat::officialAccount(); // 公众号

$work = EasyWeChat::work(); // 企业微信

$payment = EasyWeChat::payment(); // 微信支付

$openPlatform = EasyWeChat::openPlatform(); // 开放平台

$miniProgram = EasyWeChat::miniProgram(); // 小程序

// 均支持传入配置账号名称

EasyWeChat::officialAccount('foo'); // `foo` 为配置文件中的名称,默认为 `default`

//...

如果你有多个公众号,需要单独分开。那么修改下刚才那个配置引入

第一种是$config修改就可以切换不同的公众号

第二种就设置officialAccount(配置名字)

把用户发过来消息服务单独文件出来

比如我现在要单独文本和图片

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;

}

文本

/**

* 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消息';

}

}

以上所有的单独文件需要继承 \EasyWeChat\Kernel\Contracts\EventHandlerInterface;这个接口。

实现方法handle(

math?formula=payload)%2Cpayload表示传递过来的对象消息。

每个消息必须返回的消息有

ToUserName 接收方帐号(该公众号 ID)

FromUserName 发送方帐号(OpenID, 代表用户的唯一标识)

CreateTime 消息创建时间(时间戳)

MsgId 消息 ID(64位整型)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值