EasyWeChat微信开发平台第三方接入(Laravel5+,EasyWeChat3.0)

时间:2024-04-08 10:05:52

一、准备微信开发平台账号(需要认证¥300)

二、看代码

<?php
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use EasyWeChat\Foundation\Application;

class OpenWeixinController extends Controller
{
    protected $options = [
                'open_platform' => [
                    'app_id'   => 'xx',
                    'secret'   => 'xx',
                    'token'    => 'xxx',
                    'aes_key'  => 'xxx'
                    ],
                ];

    public function index(Request $request) {

        $this->request = $request;

        try{
            $app = new Application($this->options);
            $openPlatform = $app->open_platform; 
            
            return $openPlatform->server->serve();
 
        }catch(\Exception $e){
            if(env('APP_DEBUG')){
                echo $e->getMessage();
            } else {
                 abort(404);
            }
        }


    }


     public function auth(Request $request) {
            
            $app = new Application($this->options);
            $openPlatform = $app->open_platform;

            $response = $openPlatform->pre_auth->redirect('http://xxx//index');
            
            //return $response;
            // 获取跳转的链接
            $url = $response->getTargetUrl();
            echo '<a href="'.$url.'">点击第三方授权</a>';
     }


}

调用auth函数进行第三方授权

三、问题

1、在授权URL测试的时候,如果报AesException: 签名验证错误,可能是代码你参数填写有错。一定要注意是填写第三方平台的信息,不是公众号的信息。

2、在授权URL测试的时候,如果报Illegal key size,那么就是指**长度是受限制的,java运行时环境读到的是受限的policy文件。去掉这种限制需要下载Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files(https://yunpan.cn/cSrtk3Fk6WgAs  访问密码 244a)。替换${java_home}/jre/lib/security/ 下面的local_policy.jar和US_export_policy.jar(jdk,jre最好都替换。)。注意一定要重启TOMCAT才能生效。

3、component ticket is exprie ticket过期,每10分钟会微信服务器会推送到授权事件的URL中。这里可以不用处理设置过期时间(因为这里的ticket是无接口调用权限的,而且是微信服务器自己推送的)

4、注意公众号消息处理的URL必须加上$APPID$

EasyWeChat微信开发平台第三方接入(Laravel5+,EasyWeChat3.0)

5、component_access_token过期时间为2个小时,和公众号的Token一样(我处理的是存储过期时间,超过就请求。而不是定时刷新)

6、可以选择你自己需要第三方托管的权限集,比如你其他消息只走微信公众号,只有客服消息走第三方平台。

7、异常:请确认授权入口页所在域名,与授权后回调页所在域名相同,并且,此两者都必须与申请第三方平台时填写的授权发起页域名相同。授权入口页所在域名:空

EasyWeChat微信开发平台第三方接入(Laravel5+,EasyWeChat3.0)

EasyWeChat微信开发平台第三方接入(Laravel5+,EasyWeChat3.0)

(改地址不能直接方法,需要<a href="授权地址"></a>标签进行跳转)

8、有可能会出现你每次启动项目的时候,由于每10分钟才会验证一次Ticket,那么直接调用接口,如果服务器还没推送,会出现ticket失效(不过在正式环境还好)(就算全网通过后也会推送component_verify_ticket协议)。

9、每次授权后,想要获取最新的权限必须重新扫码授权。否则无法获取最新的消息。

10、获取令牌的官网接口

EasyWeChat微信开发平台第三方接入(Laravel5+,EasyWeChat3.0)

11、第三方中的授权的URL一级接收公众号消息的URL都只能在同一个一级域名下

12、如果是并发量大,做集群的话,一定要把所有服务器的ip都加到白名单中EasyWeChat微信开发平台第三方接入(Laravel5+,EasyWeChat3.0)