Laravel 使用Easywechat 书写自定义模板消息丶广播消息频道

自己写的包才是最符合自己需求的,还是自己写一个用吧。

easywechat 官网:https://www.easywechat.com/

easywechat 官网文档:https://www.easywechat.com/docs/master/overview

eastwechat环境要求:

PHP >= 7.0

PHP cURL 扩展

PHP OpenSSL 扩展

PHP SimpleXML 扩展

PHP fileinfo 拓展

建议使用laradock


1.安装easywechat包:

composer require overtrue/laravel-wechat

2.发布配置文件

php artisan vendor:publish --provider="Overtrue\LaravelWeChat\ServiceProvider"

内容如下:

```php



/*

* This file is part of the overtrue/laravel-wechat.

*

* (c) overtrue

*

* This source file is subject to the MIT license that is bundled

* with this source code in the file LICENSE.

*/

return [

    /*

    * 默认配置,将会合并到各模块中*/

    'defaults' => [

        /*

        * 指定 API 调用返回结果的类型:array(default)/collection/object/raw/自定义类名*/

        'response_type' => 'array',

        /*

        * 使用 Laravel 的缓存系统*/

        'use_laravel_cache' => true,

        /*

        * 日志配置*

        * level: 日志级别,可选为:*                debug/info/notice/warning/error/critical/alert/emergency

        * file:日志文件位置(绝对路径!!!),要求可写权限*/

        'log' => [

            'level' => env('WECHAT_LOG_LEVEL', 'debug'),

            'file' => env('WECHAT_LOG_FILE', storage_path('logs/wechat.log')),

        ],

    ],

    /*

    * 路由配置*/

    'route' => [

        /*

        * 开放平台第三方平台路由配置*/

// 'open_platform' => [

//    'uri' => 'serve',

//    'action' => Overtrue\LaravelWeChat\Controllers\OpenPlatformController::class,

//    'attributes' => [

//        'prefix' => 'open-platform',

//        'middleware' => null,

//    ],

// ],

    ],

    /*

    * 公众号*/

    'official_account' => [

        'default' => [

            'app_id' => env('WECHAT_OFFICIAL_ACCOUNT_APPID', 'your-app-id'),        // AppID

            'secret' => env('WECHAT_OFFICIAL_ACCOUNT_SECRET', 'your-app-secret'),    // AppSecret

            'token' => env('WECHAT_OFFICIAL_ACCOUNT_TOKEN', 'your-token'),          // Token

            'aes_key' => env('WECHAT_OFFICIAL_ACCOUNT_AES_KEY', ''),                // EncodingAESKey

/*

            * OAuth 配置*

            * scopes:公众平台(snsapi_userinfo / snsapi_base),开放平台:snsapi_login

            * callback:OAuth授权完成后的回调页地址(如果使用中间件,则随便填写。。。)

*/

// 'oauth' => [

//    'scopes'  => array_map('trim', explode(',', env('WECHAT_OFFICIAL_ACCOUNT_OAUTH_SCOPES', 'snsapi_userinfo'))),

//    'callback' => env('WECHAT_OFFICIAL_ACCOUNT_OAUTH_CALLBACK', '/examples/oauth_callback.php'),

// ],

        ],

    ],

    /*

    * 开放平台第三方平台*/

// 'open_platform' => [

//    'default' => [

//        'app_id'  => env('WECHAT_OPEN_PLATFORM_APPID', ''),

//        'secret'  => env('WECHAT_OPEN_PLATFORM_SECRET', ''),

//        'token'  => env('WECHAT_OPEN_PLATFORM_TOKEN', ''),

//        'aes_key' => env('WECHAT_OPEN_PLATFORM_AES_KEY', ''),

//    ],

// ],

/*

    * 小程序*/

// 'mini_program' => [

//    'default' => [

//        'app_id'  => env('WECHAT_MINI_PROGRAM_APPID', ''),

//        'secret'  => env('WECHAT_MINI_PROGRAM_SECRET', ''),

//        'token'  => env('WECHAT_MINI_PROGRAM_TOKEN', ''),

//        'aes_key' => env('WECHAT_MINI_PROGRAM_AES_KEY', ''),

//    ],

// ],

/*

    * 微信支付*/

// 'payment' => [

//    'default' => [

//        'sandbox'            => env('WECHAT_PAYMENT_SANDBOX', false),

//        'app_id'            => env('WECHAT_PAYMENT_APPID', ''),

//        'mch_id'            => env('WECHAT_PAYMENT_MCH_ID', 'your-mch-id'),

//        'key'                => env('WECHAT_PAYMENT_KEY', 'key-for-signature'),

    //        'cert_path'          => env('WECHAT_PAYMENT_CERT_PATH', 'path/to/cert/apiclient_cert.pem'),    // XXX: 绝对路径!!!!

    //        'key_path'          => env('WECHAT_PAYMENT_KEY_PATH', 'path/to/cert/apiclient_key.pem'),      // XXX: 绝对路径!!!!

    //        'notify_url'        => 'http://example.com/payments/wechat-notify',                          // 默认支付结果通知地址

    //    ],

//    // ...

// ],

/*

    * 企业微信*/

// 'work' => [

//    'default' => [

//        'corp_id' => 'xxxxxxxxxxxxxxxxx',

//        'agent_id' => 100020,

//        'secret'  => env('WECHAT_WORK_AGENT_CONTACTS_SECRET', ''),

//          //...

//      ],

// ],

];

```

3.修改env文件

WECHAT_OFFICIAL_ACCOUNT_APPID=你的APPID

WECHAT_OFFICIAL_ACCOUNT_SECRET=你的SECRET

WECHAT_OFFICIAL_ACCOUNT_TOKEN=


如何拿到APPID和SECRET呢  你需要有个认证的服务号

4. 登陆微信公众号平台

官网地址:https://mp.weixin.qq.com/

配置如下图

配置APPID丶SECRET和IP白名单


配置齐活,开始写频道和通知啦!

5.创建频道驱动

WechatTemplateMessageChannel 位置:App\Channels\WechatTemplateMessageChannel

代码截图:


代码图片1


代码图片2


代码如下:

namespace App\Channels;

use EasyWeChat\Factory;

use GuzzleHttp\Client;

use Illuminate\Notifications\Notification;

use PhpParser\Node\Expr\Array_;

class WechatTemplateMessageChannel

{

    /**

* Send the given notification.

*

    * 1.广播消息:当仅返回 (消息内容)时 ,触发广播行为,给所有用户发送(消息内容)广播。

    * 2.指定用户:当完整返回openid,模板id,消息内容时,触发模板消息行为,使用模板id发送给指定openid用户以消息内容。

    *

    * 使用方法:

    * notification 可以使用 toWechatTemplateMessage方法

    *

    * toWechatTemplateMessage方法中返回一个数组:(  消息内容(数组格式), 模板ID(字符串格式)  )如:

    *

*      $allData=[$data,$template];

*      return $allData;

*

    * @param  mixed  $notifiable

    * @param  \Illuminate\Notifications\Notification  $notification

    * @return void

*/

    public function send($notifiable, Notification $notification)

{

        $app = app('wechat.official_account');

        $allData = $notification->toWechatTemplateMessage($notifiable);

        $data=$allData[0];

        $template=$allData[1];

        $openId=isset($notifiable->routes['WechatTemplateMessage'])?$notifiable->routes['WechatTemplateMessage']:null;

        $broad=false;

        if (!$openId) {

            $broad=true;

        }

        if ($openId) {

            $openId=is_array($openId)?$openId:array($openId);

        }

        if ($broad==false) {

            foreach ($openId as $keys) {

                $app->template_message->send(

[

                        'touser' => $keys,

                        'template_id' => $template,

                        "data"=>$data

                    ]

                );

            }

}

        // 没有指定用户,就广播

        if ($broad) {

            $app->broadcasting->sendText($data);

        }

}

}


6.书写notification


代码图片

代码如下:

namespace App\Notifications;

use Illuminate\Bus\Queueable;

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Notifications\Notification;

use App\Channels\WechatTemplateMessageChannel;

use EasyWeChat\Factory;

use EasyWeChat\Kernel\Messages\Text;

class WechatTemplateMessageNotification extends Notification

{

    use Queueable;

    public function __construct($data, $template = null)

{

        $this->data = $data;

        $this->template = $template;

    }

    public function via($notifiable)

{

        return [WechatTemplateMessageChannel::class];

    }

    public function toWechatTemplateMessage($notifiable)

{

        $data=$this->data;

        $template=$this->template;

        $allData=[$data,$template];

        return $allData;

    }

}

7.书写 控制器测试代码:


代码图片

namespace App\Http\Controllers;

use App\Notifications\WechatTemplateMessageNotification;

use App\Notifications\MailNotification;

use EasyWeChat\Factory;

use Illuminate\Http\Request;

use Illuminate\Support\Facades\Notification;

class CController extends Controller

{

    //广播

    public function a()

{

        $data='谢谢关注';

        Notification::route('WechatTemplateMessage', null)->notify(new WechatTemplateMessageNotification($data));

    }

    //指定用户,完整参数

    public function b()

{

        $ren=['odAYnxOVy7vS2YVipvmG4biBzGFQ','odAYnxEuuTCfR6LmpNWfov27cf4A'];

        $template="iA2V1K45vS8IgUEvE8Z3KJYrlwMOEH3R-V-DdLWpzAw";

        $data=[

            "order_id"=>[

                "value"=>"20200414234478934343",

                "color"=>"#173177"

            ],

            "package_id"=>[

                "value"=>"SF4345454534",

                "color"=>"#173177"

            ],

            "remark"=>[

                "value"=>'模板消息发送',

                "color"=>"#173177"

            ]

        ];

        Notification::route('WechatTemplateMessage', $ren)->notify(new WechatTemplateMessageNotification($data, $template));

    }

}


8.展示:


展示图片
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,198评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,663评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,985评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,673评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,994评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,399评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,717评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,407评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,112评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,371评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,891评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,255评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,881评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,010评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,764评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,412评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,299评论 2 260