框架要求:
Laravel/Lumen >= 5.1
安装
# Laravel < 5.8
composer require "overtrue/laravel-wechat:~4.0" -vvv
# Laravel >= 5.8
composer require "overtrue/laravel-wechat:~5.0" -vvv
配置
Laravel 应用
1,在 config/app.php 注册 ServiceProvider 和 Facade (Laravel 5.5 + 无需手动注册)
'providers' => [
// ...
Overtrue\LaravelWeChat\ServiceProvider::class,
],
'aliases' => [
// ...
'EasyWeChat' => Overtrue\LaravelWeChat\Facade::class,
],
2,创建配置文件:
php artisan vendor:publish --provider="Overtrue\LaravelWeChat\ServiceProvider"
3,修改应用根目录下的 config/wechat.php 中对应的参数即可。
4,每个模块基本都支持多账号,默认为 default。
Lumen 应用
1,在 bootstrap/app.php 中 82 行左右:
$app->register(Overtrue\LaravelWeChat\ServiceProvider::class);
2,如果你习惯使用 config/wechat.php 来配置的话,将 vendor/overtrue/laravel-wechat/src/config.php 拷贝到项目根目录/config目录下,并将文件名改成wechat.php。
使用
在中间件 App\Http\Middleware\VerifyCsrfToken 排除微信相关的路由,如:
protected $except = [
// ...
'wechat',
];
3,下面以接收普通消息为例写一个例子:
假设您的域名为 overtrue.me 那么请登录微信公众平台 “开发者中心” 修改 “URL(服务器配置)” 为: http://overtrue.me/wechat
路由:
Route::any('/wechat', 'WeChatController@serve');
注意:一定是 Route::any, 因为微信服务端认证的时候是 GET, 接收用户消息时是 POST !
然后创建控制器 WeChatController:
use App\Http\Controllers\Controller;
use EasyWeChat\Factory;
class WeChatController extends Controller
{
public $config = [
// 必要配置
'app_id' => 'wx83fe7cb1d07ab2ab',
'mch_id' => '1234455',
'key' => 'd3ca059485f1c88441a80a0a30f9bfd3', // API 密钥
// 如需使用敏感接口(如退款、发送红包等)需要配置 API 证书路径(登录商户平台下载 API 证书)
'cert_path' => './wechat_pay/apiclient_cert.pem', // XXX: 绝对路径!!!!
'key_path' => './wechat_pay/apiclient_key.pem', // XXX: 绝对路径!!!!
'notify_url' => '默认的订单回调地址', // 你也可以在下单时单独设置来想覆盖它
];
public function pay()
{
$app = $payment = Factory::payment($this->config);
$result = $app->transfer->toBalance([
'partner_trade_no' => '1233455', // 商户订单号,需保持唯一性(只能是字母或者数字,不能包含有符号)
'openid' => 'oxTWIuGaIt6gTKsQRLau2M0yL16E',
'check_name' => 'FORCE_CHECK', // NO_CHECK:不校验真实姓名, FORCE_CHECK:强校验真实姓名
're_user_name' => '王小帅', // 如果 check_name 设置为FORCE_CHECK,则必填用户真实姓名
'amount' => 10000, // 企业付款金额,单位为分
'desc' => '理赔', // 企业付款操作说明信息。必填
]);
print_r($result);
}
}