微信开发第三天,利用Laravel做一个小项目----微分销
三级分佣,无限裂变,利用社交媒体的巨大流量做产品分销,分裂出成千上万个分销商,扩大销售规模,这是微信三级分销的核心价值之所在。 微信三级分销
平台,去掉了传统之间,为生产商带来分销商, 使得生产商与消费者直接沟通,不仅降低生产商交易成本,而且为商家带来更多精准用户。 同时,三级分销还
为消费者提供成为分销商的机会,为消费者带来额外收入,间接提高消费者与生产商之间的粘度
本项目通过第三方扩展进行开发 overtrue/wechat,官方网站https://www.easywechat.com/
一,部署项目
1.1composer创建项目composer create-project laravel/laravel=5.5 fx
;
1.2安装Wechat扩展
Laravel < 5.8composer require "overtrue/laravel-wechat:~4.0"
Laravel >= 5.8composer require "overtrue/laravel-wechat:~5.0"
开发文档:https://www.easywechat.com/docs
环境需求
- PHP >= 7.0
- PHP cURL 扩展
- PHP OpenSSL 扩展
- PHP SimpleXML 扩展
- PHP fileinfo 拓展
二,接入微信
2.1配置虚拟主机
<VirtualHost *:80>
DocumentRoot "D:\wamp64\www\public\Fx"
ServerName 590c1c9e.nat123.cc
</VirtualHost>
2.2添加路由并绑定控制器
Route::get('wx','WxController@server');//get路由用于微信服务器验证
Route::post('wx','WxController@server')//post路由用于与微信服务器交互
2.3生成wechat
类配置文件php artisan vendor:publish --provider=Overtrue\LaravelWeChat\ServiceProvider
2.4编写配置文件(config/wechat),设置api_key,api_secret
'official_account' => [
'default' => [
'app_id' => env('WECHAT_OFFICIAL_ACCOUNT_APPID', '你的api_id'), // AppID
'secret' => env('WECHAT_OFFICIAL_ACCOUNT_SECRET', '你的api_secret'), // AppSecret
'token' => env('WECHAT_OFFICIAL_ACCOUNT_TOKEN', 'your-token'), // Token
'aes_key' => env('WECHAT_OFFICIAL_ACCOUNT_AES_KEY', ''),
],
],
编写控制器
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class WxController extends Controller
{
public function server(){
//通过app方法读取配置文件的信息并生成
//Factory::officialAccount实例
$app = app('wechat.official_account');
$app->server->push(function($message){
//这里的message是微信服务器返回的xml数据
//不过通过配置文件设置,这里直接转换为数组
return "欢迎关注 overtrue!";
});
return $app->server->serve();
//相对于返回微信GET过来的echostr
}
}
为了使微信服务器与我们的服务器验证
我们还要设置app\Http\Middleware\VerifyCsrfToKen
设置except
数组 移除关于微信的Token验证
protected $except = [
'wx'
];
这样我们就可以在微信公众平台,配置信息
如果这里出现了”配置失败“,检查你的路由,以及是否没有移除关于微信的Token验证
完成上述操作后我们就可以开发了
1.测试关注事件
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use EasyWeChat\Factory;
class WxController extends Controller
{
public function server(){
$app = app('wechat.official_account');
$app->server->push(function($message){
if($message['Event'] == 'subscribe'){
//用户关注事件
return "欢迎关注我的公众号";
}
});
return $app->server->serve();
}
}
消息
消息分为以下几种:文本
、图片
、视频
、声音
、链接
、坐标
、图文
、文章
和一种特殊的 原始消息。
另外还有一种特殊的消息类型:素材消息,用于群发或者客服时发送已有素材用。
注意:回复消息与客服消息里的图文类型为:图文,群发与素材中的图文为文章
这里以图文消息为例,引入“素材管理库”
在微信里的图片,音乐,视频等等都需要先上传到微信服务器作为素材才可以在消息中使用。
通过$app->material->uploadImage(path);
上传图片,该方法会返回图片的media_id
及url
我们拿到media_id
就可以使用素材管理库的图片了
`
获取用户信息
在微信里面昵称是可以相同的,所以我们要找到一个唯一标识用户的东西在关注者与公众号产生消息交互后,公众号可获得关注者的OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的。)
通过以下方式获取
获取单个用户信息app->user-get(openid)
获取多个用户信息app->user->select(openid1,openid2)
返回数组类型
如下案例;
public function event($message){
$openId = $message['FromUserName'];//获取OpenID
$user = $this->app->user->get($openId);//根据openId获取用户信息
if($message['Event'] == 'subscribe'){
$sel = User::where('openId',$openId)->first();//根据openid查询是否已经有此用户
if($sel){
//如果有此用户 ,则恢复”软删除“
User::where("openId",$openId)->update(['status'=>1]);
return "欢迎关注";
}else{
//没有此用户则将用户存进数据库
User::create(['name'=>$user['nickname'],'openId'=>$openId]);
return "欢迎关注";
}
}elseif($message['Event'] == 'unsubscribe'){
//如果用户取消关注 软删除用户
User::where("openId",$openId)->update(['status',0]);
}
}
生成带参数的二维码
由于我们这个系统是微信分销,就涉及到代理的问题,代理一共三级,如何绑定代理与上级代理的关系变得非常重要,这里就可以通过带参数的二维码的形式,用户点击‘代理推广’生成二维码,不过这个二维码是以该用户的openid
生成的,这样当其他用户扫码成为二级/三级代理后,我们就能轻易的知道一/二/三级代理的关系了
目前有 2 种类型的二维码:
临时二维码,是有过期时间的,最长可以设置为在二维码生成后的
30天后过期,但能够生成较多数量。临时二维码主要用于帐号绑定等不要求二维码永久保存的业务场景
永久二维码,是无过期时间的,但数量较少(目前为最多10万个)。永久二维码主要用于适用于帐号绑定、用户来源统计等场景
生成二维码步骤(微信官方文档—“账号管理”—生成带参数的二维码)
先创建二维码ticket
,然后凭借ticket
到指定URL换取二维码
在easywechat
中为我们提供了更方便的方法
创建临时二维码$result = $app->qrcode->temporary('foo', 6 * 24 * 3600);
第一个参数为:二维码参数
第二个参数为:过期时间
返回