微信开放平台开发 Tp5 + easyweichat3.X

需求

单位想完善微信公众号场景二维码的功能,又不想原微信公众平台设置的自动回复失效,只能曲线救国,利用微信第三方平台,实现微信公众号,事件接收。

总流程

整体流程,首先甲方爸爸,微信公众平台(公众号),需要授权给微信开放平台(第三方)。甲方爸爸:嗯。我的用户关注取关事件,你给我处理一下。第三方:好的。达成协议之后,第三方平台拿到公众号的相关权限和参数,就可以进行开发啦,微信也会将事件推送推送给第三方平台服务器。

授权

流程

1.公众号管理员登录我们的授权网站

第三方平台授权网站
没错。我的网站就是这么简陋

2. 进入微信官方授权网站

点击链接,进入微信官方授权网站。嗯。
在这里插入图片描述

3. 公众号管理员微信扫描二维码。

在这里插入图片描述
权限可以自行选择。具体可参照 第三方平台的权限说明

4.点击授权

微信就会变成酱紫。微信还会推送给第三方服务器,公众号的授权信息。
在这里插入图片描述
web页就会变成酱紫
在这里插入图片描述
嗯。还是一样简陋。

授权流程就走完啦。

开发

开发嘛。首先你需要有一个第三方平台的账号 申请网址。需要填写一些基本信息,还有几个容易蒙蒙的点。
在这里插入图片描述

  1. 登录授权的发起页域名 :就是那两个 简陋 的页面的域名;
  2. 授权测试公众号列表 :测试用的公众号,可以填在里面。主义是原始 ID喔;
  3. 授权事件接收url :就是当有甲方爸爸公众号 申请授权(取消授权/更新授权),微信通知你的url。微信每隔10分钟还会推送一次 component_verify_ticket
  4. 消息与事件接受url:公众号授权之后,第三方平台代为开发,这是微信推送给原公众号的消息,就会推送到第三方服务器上。为了开放平台区分各个消息的来源,url上需要鞋带公众号的appid,格式为 www.abc.com/aaa/APPID/bbb/cgi,需要用路由处理一下。

1.平台class

这次开发用的EasyWeChat SDK,不需要考虑微信繁琐的 开发流程。一定要看文档哦,这里就不再赘述了。

首先,创建平台。

 use EasyWeChat\Foundation\Application;

class Platform extends Controller{
	protected $openPlatform;
    public function __construct()
    {
        $options = ['open_platform' => config('open_platform')];//open_platform 微信开放平台配置 app_id、secret、token、aes_key
        $app = new Application($options);
        $this->openPlatform = $app->open_platform;
    }
    
}

2.登录授权的发起页

  //预授权页面 
    public function auth(){
        $openPlatform = $this->openPlatform;
        $response = $openPlatform->pre_auth->redirect(config('open_redirect'));//open_redirect 授权回调url 第二个丑丑的页面url
        $url = $response->getTargetUrl();//获得授权url 

        echo ' <meta name="referrer"    content="origin-when-cross-origin" >
        <a style="color: inherit" href="'.$url.'"><p>微信平台绑定</p></a>';
    }

直接用浏览器打开授权url无效喔,会报如下错误。一定要从授权页跳转才行
在这里插入图片描述

3.开放平台信息接收

接收授权通知以及component_verify_ticket 的接口了

方法

    //微信通知,主要是component_verify_ticket等信息 
    public function notify(){
    
        $openPlatform = $this->openPlatform;

        $openPlatform->server->setMessageHandler(function($event) use($openPlatform){
            switch ($event->InfoType) {
                case Guard::EVENT_AUTHORIZED: // 授权成功 
                    $res = $openPlatform->getAuthorizationInfo($event->AuthorizationCode);
                    //Save to DB
                    $appid = $res->authorization_info['authorizer_appid'];
                    $refresh_token = $res->authorization_info['authorizer_refresh_token'];
                    DB::table("weixin")->insert(['appid' => $appid,'refresh_token' => $refresh_token,'res'=>json_encode($res)]);
                    break;
                case Guard::EVENT_UPDATE_AUTHORIZED:    // 更新授权
                    //todo
                    break;
                case Guard::EVENT_UNAUTHORIZED: // 取消授权
                    //删除授权信息
                    Db::table('weixin')->where(['appid'=>$event['AuthorizerAppid']])->delete();
                    break;

            }
        });

        $response = $openPlatform->server->serve();
        $response->send();



    }

授权后的appidauthorizer_refresh_token 以后还需要用,保存起来

4.回调页面

第二个丑丑的页面

  public function callback(){

        $openPlatform = $this->openPlatform;
        try{
            return 'Success';
        }catch (Exception $ex){
            abort(404,$ex->getMessage());
        }
    }

以上,授权的相关代码,就写完啦,可根据自己需求完善。
在这里插入图片描述

功能开发

以用户关注取关公众号为例

首先,需要处理下url,加路由,让 APPID 以id参数 接收

Route::rule('weixin/Platform/openindex/:id','weixin/Platform/openindex');

然后就是代码啦

    //公众号消息验证
    public function openindex($id = 0){
        //验证是否有该appid 并取出
        $info = Db::table('weixin')->where(['appid'=>$id])->find();


        if(!$info){
            return false;
        }

        $openPlatform = $this->openPlatform;

        $authorizerAppId = $info['appid'];
        $authorizerRefreshToken = $info['refresh_token'];

        $app = $openPlatform->createAuthorizerApplication($authorizerAppId, $authorizerRefreshToken);
        $app->server->setMessageHandler(function($message) use($app){

            switch($message->ToUserName){
   				//根据不同的appid 写不同的逻辑
                case 'APPID1':
                    if ($message->MsgType == 'event') {//消息类型 为 事件
                        # code...
                        try{
                            switch ($message->Event) {
                                case 'subscribe'://订阅   带参数订阅  不带参数订阅
                                    //todo
                                    break;
                                case 'unsubscribe'://取关
                                    //todo
                                    break;
                                case 'SCAN'://扫描二维码 带参
                 					//todo
                                    break;
                            }
                        }catch (Exception $ex){
                            Log::debug('try:'.json_encode($ex->getMessage()));
                        }
                    }
                    break;
                case 'APPID2':
                   	//todo
                   	break;
            }

        });


        $response = $app->server->serve();

        $response->send(); // Laravel 里请使用:return $response;




    }

至此。就搞定啦!
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值