微信开发笔记

开发环境

laravel 5.5.20框架

可以用artisan命令查看框架版本:

php artisan -V

composer组件easywechat

此处要注意版本,我用的是3.0,组件版本不确定会坑。

1
composer require "overtrue/laravel-wechat:~3.0"

在laravel中配置:

注册 ServiceProvider:

Overtrue\LaravelWechat\ServiceProvider::class,

创建配置文件:

php artisan vendor:publish –provider=”Overtrue\LaravelWechat\ServiceProvider”

请修改应用根目录下的 config/wechat.php 中对应的项即可;

(可选)添加外观到 config/app.php 中的 aliases 部分:

‘EasyWeChat’ => Overtrue\LaravelWechat\Facade::class,

参考:GitHub - overtrue/laravel-wechat at 3.1.10 配置OAuth 中间件部分。

微信公众平台测试账号申请

微信公众平测试号申请地址:微信公众平台

laravel以外的用法参考:

Thinkphp5和EasyWeChat进行网页授权登录 - ThinkPHP框架

开发

定义路由

1
2
3
4
5
6
7
8
9
10

<?php

Route::any('/wechat', 'WeChatController@serve');

Route::get('/users', 'WeChatController@users');

Route::get('/menu', 'WeChatController@menu');

Route::get('/addMenu', 'WeChatController@addMenu');

处理微信的请求消息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
<?php
/**
* User: maChuang
* blog: martist.cn
* Date: 2017/11/8
* Time: 下午5:42
*/

namespace App\Http\Controllers;



use EasyWeChat\Foundation\Application;

class WeChatController extends Controller
{
public $wechat;

public function __construct(Application $wechat)
{
$this->wechat = $wechat;
}

/**
* 处理微信的请求消息
*
* @return string
*/
public function serve()
{
$wechat = app('wechat');
// $wechat->server->setMessageHandler(function($message){
// return "wocou!!!!";
// });
$userApi = $wechat->user;
$wechat->server->setMessageHandler(function ($message) use ($userApi) {
switch ($message->MsgType) {
case 'event':
return '收到事件消息';
break;
case 'text':
return $userApi->get($message->FromUserName)->headimgurl;
break;
case 'image':
return '收到图片消息';
break;
case 'voice':
return '收到语音消息';
break;
case 'video':
return '收到视频消息';
break;
case 'location':
return '收到坐标消息';
break;
case 'link':
return '收到链接消息';
break;
// ... 其它消息
default:
return '收到其它消息';
break;
}
});

return $wechat->server->serve();
}

/**
* User: maChuang
* @return \EasyWeChat\Support\Collection
* 当前公众号的关注者列表
*/
public function users()
{
return $this->wechat->user->lists();
}


/**
* User: maChuang
* 展示菜单
*/
public function menu()
{
$app = $this->wechat;
$menu = $app->menu;
$menus = $menu->all();
dd($menus);
}

/**
* User: maChuang
* @return \EasyWeChat\Support\Collection
* 添加菜单
*/
public function addMenu()
{
$app = $this->wechat;
$menu = $app->menu;
$buttons = [
[
"type" => "view",
"name" => "授权",
"url" => "http://c7971ad2.ngrok.io/scopes"
],
[
"name" => "二级菜单",
"sub_button" => [
[
"type" => "view",
"name" => "我的信息",
"url" => "http://c7971ad2.ngrok.io/userInfo",
],
[
"type" => "view",
"name" => "大大大",
"url" => "http://c7971ad2.ngrok.io/large",
],
[
"type" => "click",
"name" => "小小小",
"key" => "ASDZFE"
],
],
],
];
$res = $menu->add($buttons);
return $res;
}


}

此时,你可以在公众号发现添加自定义菜单,查看菜单,查看公众号关注者,回复信息等功能已经简单的实现了。

获取用户的openid和微信信息

1
2
3
4
5
6
7
8
9

Route::group(['middleware' => ['wechat.oauth']], function () {

Route::get('/userInfo', function () {
$user = session('wechat.oauth_user'); // 拿到授权用户资料
dd($user);
});

});

返回结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"subscribe": 1,
"openid": "oCf0jw4DhUXmv6ZhITtBRFn3yLM4",
"nickname": "🎗martist.cn马闯🎗",
"sex": 1,
"language": "zh_CN",
"city": "石家庄",
"province": "河北",
"country": "中国",
"headimgurl": "http://wx.qlogo.cn/mmopen/9VvH5ZWanZUKiaGbMrMsWeyl1E4yFWJCic5iblA5FSyVcYSPjkUElLsHO697rFgv81DibzNjeVicpTUEruEg3Nbfn7YTDWoquz78f/0",
"subscribe_time": 1510198660,
"remark": "",
"groupid": 0,
"tagid_list": []
}

总结

其他操作可以具体参见微信公众号官方文档,我在做微信开发和微信支付都是基于eastWeChat这个组件完成的,节省了很多时间。