hsinlu / laravel-wechat by hsinlu

wechat sdk for laravel 5.1
14
3
4
Package Data
Maintainer Username: hsinlu
Maintainer Contact: hsinlu@live.com (hsinlu)
Package Create Date: 2015-11-12
Package Last Update: 2015-11-12
Home Page:
Language: PHP
License: Unknown
Last Refreshed: 2024-04-18 15:22:59
Package Statistics
Total Downloads: 14
Monthly Downloads: 0
Daily Downloads: 0
Total Stars: 3
Total Watchers: 4
Total Forks: 4
Total Open Issues: 0

wechat

wechat

基于 laravel5.1 开发的微信公众平台 SDK,支持管理多个微信应用,旨在于提供简洁优雅的开发体验。

暂不推荐于生产环境

功能

以下是所支持的功能列表,根据微信官方文档分类、命名,其中打勾的为已完成功能,其他为开发中状态。

  • [x] 微信接入
  • [x] 获取access_token
  • [x] 获取微信服务器IP地址
  • [x] 被动接收普通消息
  • [x] 被动接收事件消息
  • [x] 被动回复消息
  • [x] 客服消息(接口调用不成功)
  • [ ] 多客服功能(接口调用不成功)
  • [x] 群发消息
  • [x] 模板消息(未测试)
  • [x] 获取自动回复规则
  • [ ] 消息加解密
  • [x] 素材管理(添加永久素材,视频素材没实现)
  • [x] 用户管理
  • [x] 自定义菜单管理
  • [x] 二维码
  • [x] 长链接转短链接
  • [x] 数据统计
  • [x] 语义理解
  • [ ] JS-SDK
  • [ ] 微信小店
  • [ ] 微信卡券
  • [ ] 微信门店
  • [ ] 微信智能接口
  • [ ] 微信智能接口
  • [ ] 摇一摇周边
  • [ ] 微信连Wi-Fi

环境要求

PHP 版本 >=5.5.9

注意事项

  1. 所有发往微信的json数据,如果包含中文,在使用json_encode时,需要设置JSON_UNESCAPED_UNICODE

json_encode(['group' => [ 'id' => $groupid, 'name' => '我的家人' ],], JSON_UNESCAPED_UNICODE);

安装

使用composer安装
composer require "hsinlu/laravel-wechat"
配置laravel项目
  1. Hsin\Wechat\WechatServiceProvider 添加到laravel项目 config/app.php
'providers' => [
	// ...

	// wechat
	Hsin\Wechat\WechatServiceProvider::class,
],
  1. Hsin\Wechat\Http\Middleware\CheckWechatSignature 配置到laravel项目 app/Http/Kernel.php
/**
 * The application's route middleware.
 *
 * @var array
 */
protected $routeMiddleware = [
    // ...

    // wechat
    'wechat.signature' => \Hsin\Wechat\Http\Middleware\CheckWechatSignature::class,
];
  1. /wechat/* 请求路径加入到中间件 App\Http\Middleware\VerifyCsrfToken 排除列表
class VerifyCsrfToken extends BaseVerifier
{
    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */
    protected $except = [
        '/wechat/*'
    ];
}
  1. 最后执行 vendor:publish 将配置文件和其他资源文件拷贝到 laravel 项目对应的目录
php artisan vendor:publish

使用

配置

config/wechat.php 中配置微信应用的相关参数,如果有多个应用,复制 apps 数组第一个应用配置并更改相关的配置项。

<?php

return [
	// 应用的配置,支持多个应用
	'apps' => [
		// 应用的唯一标识 => 应用配置
		'应用的唯一标识' => [
		    // 应用ID
		    'AppID' => '应用 ID',
		    // 应用密钥
		    'AppSecret' => '应用密钥',
		   	// 令牌
		    'Token' => '令牌',
		    // 消息是否加密 
		    'Encrypt' => false,
		    // 消息加解密密钥
		    'EncodingAESKey' => '消息加解密密钥',
		],
	],
];

通过 wechat() 方法生成默认的微信应用(默认为配置中的第一个),通过 wechat('应用的唯一标识')生成其他微信应用。

微信接入

SDK中提供了 wechat/access 路由供应用接入使用,如果您的域名是 http://hsinlu.com,那么您在微信中配置的服务器地址则是 http://hsinlu.com/wechat/access

对于多个应用,配置的服务器地址则需要在 wechat/access 之上添加应用的唯一标识,如 http://hsinlu.com/wechat/access/wx1d3e8db24427e3a6,SDK 在收到微信推送的消息时,会根据应用的唯一标识,来判断是哪个应用。

被动接收消息

被动接收普通消息

被动接收消息处理策略写在 app/Wechat/strategy.php 文件。

被动接收普通消息只需要绑定对应消息类别的处理程序,其中普通消息类别对应为:文本消息(text)、图片消息(image)、语音消息(voice)、视频消息(video)、小视频消息(shortvideo)、地理位置消息(location)、链接消息(link),下面代码以文本消息(text)为例:

wechat()->on('text', function($message) {
	return 'Hello Wechat';
});

除了上面闭包形式的处理程序,您还可以设置单独的处理类,处理类需要包含 handle 方法。

<?php

namespace App\Wechat\Handlers;

class TextHandler
{
    /**
     * 处理微信发来的文本消息
     *
     * @param  SimpleXMLElement  $message
     * @return void
     */
    public function handle($message)
    {
    	// 处理逻辑
    }
}

被动接收事件消息

事件消息与普通消息的处理方式相同,唯一不同的是事件消息的处理程序的键值为消息类型+事件类型组成,其中事件消息的类型为event,事件类型包含以下几种:关注(subscribe)、取消关注(unsubscribe)、扫描带参数二维码事件(为关注时为subscribe,EventKey以qrscene_为前缀;已关注时为SCAN)、上报地理位置事件(LOCATION)、自定义菜单事件(CLICK)、点击菜单跳转链接时的事件(VIEW),下面以关注事件为例:

wechat()->on('event.subscribe', function($message) {
	return '您已关注。';
});

与普通消息一样,除了闭包形式的处理程序外,您仍可以设置单独类作为处理程序,与普通消息一致,这里不再示例。

回复消息的类型

回复消息的类型为微信预定义的几种消息格式,分别为:回复文本消息(text)、回复图片消息(image)、回复语音消息(voice)、回复视频消息(video)、回复音乐消息(music)、回复图文消息(news),当然,SDK中已经对此类的消息做了封装,无需手动生成响应的XML。

Hsin\Wechat\Results\TextResult  // 对应文本消息
Hsin\Wechat\Results\ImageResult // 对应图片消息
Hsin\Wechat\Results\VoiceResult // 对应语音消息
Hsin\Wechat\Results\VideoResult // 对应视频消息
Hsin\Wechat\Results\MusicResult // 对应音乐消息
Hsin\Wechat\Results\NewsResult  // 对应图文消息

所有的消息结果类都继承抽象类Result,您也可以根据需要扩展消息的类型

所有的消息结果类构造函数接收一个包含消息类所需要的数据数组,以下以回复文本消息为例:


wechat()->on('text', function ($message) {
     return wechat_result(TextResult::class, [
          'fromUserName' => trim($message->ToUserName),
          'toUserName' => trim($message->FromUserName),
          'content' => '这是一条文本消息。',
     ]);
});

SDK中提供了wechat_result方法来帮助构建消息结果类,您仍可以使用new TextResult([])形式构建。

调用微信接口

请参见hsinlu/wechat