资讯专栏INFORMATION COLUMN

thinkphp5.1 easywechat4 微信第三方开放平台

tomlingtm / 2045人阅读

摘要:需求描述当前商城标识授权第三方开发平台网页授权成功后跳转到另一个商城项目链接并带上当前微信用户信息和微信初始化验证签名第三方平台授权安装引用创建一个跳转到微信扫二维码授权页面开发平台授权跳转跳转方法为什么我不写到上一个方法呢因为微信

需求描述

当前商城(uid标识)授权第三方开发平台.

网页授权成功后跳转到另一个商城项目链接并带上当前微信用户信息和微信初始化验证签名.

第三方平台授权
安装easywechat4
$ composer require overtrue/wechat:~4.0 -vvv
引用
use EasyWeChatFactory;
创建一个跳转到微信扫二维码授权页面
/**
 * 开发平台授权跳转
 *
 * @return void
 */
public function accessView(){
    // 
    $uid = Request()->route("uid" , 0);
    $url = "http://qgcloud.capsui.com/public/index/wxopen/config?uid=" . $uid;
    $this->assign("url" , $url);
    return $this->fetch();
}
跳转方法(为什么我不写到上一个方法呢 因为微信要求同一个地址)
/**
 * 开发平台跳转授权扫码页
 *
 * @return void
 */
public function config(){
    $uid = Request()->get("uid" , 0);
    $config = [
        "app_id"   => "开放平台第三方平台 APPID",
        "secret"   => "开放平台第三方平台 Secret",
        "token"    => "开放平台第三方平台 Token",
        "aes_key"  => "开放平台第三方平台 AES Key"
    ];
    $openPlatform = Factory::openPlatform($config);
    
    $url = $openPlatform->getPreAuthorizationUrl("http://qgcloud.capsui.com/public/index/wxopen/wxcallback?uid=" . $uid);

    $this->redirect($url);
}
授权回调(注意:扫码确认授权后他第一次回调不会带uid参数,)
引入 
use EasyWeChatOpenPlatformServerGuard;
/**
 * 开发平台授权回调
 *
 * @return void
 */
public function wxcallback(){
    // 这个表是记录授权成功的
    //$Wxpublic   = new Wxpublic;
    // 这个表是记录授权成功后传过来所属uid商城绑定appid
    //$ShopConfig = new ShopConfig;

    $get = Request()->param();
    
    $config = [
        "app_id"   => "开放平台第三方平台 APPID",
        "secret"   => "开放平台第三方平台 Secret",
        "token"    => "开放平台第三方平台 Token",
        "aes_key"  => "开放平台第三方平台 AES Key"
    ];
    $openPlatform = Factory::openPlatform($config);
    $server       = $openPlatform->server;

    
    // 处理授权成功事件-第一次回调
    // 闭包方法!里面调用外面的方法请在use里面填写
    $server->push(function ($message) use ($openPlatform /*, $Wxpublic*/) {
        
        $authCode = $message["AuthorizationCode"];
        $res      = $openPlatform->handleAuthorize($authCode);

        if($res["authorization_info"]["authorizer_refresh_token"]){
            //授权成功记录到数据库
            //$Wxpublic->insert(["appid" => $res["authorization_info"]["authorizer_appid"] , "createtime" => time()]);
        }

    }, Guard::EVENT_AUTHORIZED);

    // 处理授权取消事件-第一次回调
    // 闭包方法!里面调用外面的方法请在use里面填写
    $server->push(function ($message) use(/*$Wxpublic , $ShopConfig*/) {
        //处理数据库逻辑
        //$Wxpublic::appid($message["AppId"])->delete();
        //$ShopConfig::appid($message["AppId"])->update(["token" => ""]);
    }, Guard::EVENT_UNAUTHORIZED);
    
    // 第二次回调会带一个授权code和自定义参数商城id(uid)
    if(isset($get["auth_code"]) && isset($get["uid"])){
        
        $res      = $openPlatform->handleAuthorize($get["auth_code"]);
        $appid    = $res["authorization_info"]["authorizer_appid"];
        //数据库逻辑
        //$isConfig = $Wxpublic::appid($appid)->count();
        
        //if($isConfig){
        //$add = $ShopConfig->where("uid" , $get["uid"])->update(["token" => $appid]);
        //}
    }

    return $server->serve();
}
第三方平台 网页授权&微信JSSDK初始化签名生成
/**
 * 网页授权调起
 *
 * @return void
 */
public function htmlAccess(){
    $appid = Request()->get("appid" , 0);
    
    $config = [
        "app_id"   => "开放平台第三方平台 APPID",
        "secret"   => "开放平台第三方平台 Secret",
        "token"    => "开放平台第三方平台 Token",
        "aes_key"  => "开放平台第三方平台 AES Key"
    ];
    $openPlatform = Factory::openPlatform($config);
    $data         = $openPlatform->getAuthorizer($appid);
    $appid        = $data["authorization_info"]["authorizer_appid"];
    $refreshToken = $data["authorization_info"]["authorizer_refresh_token"];

    $officialAccount = $openPlatform->officialAccount($appid , $refreshToken);
    $oauth           = $officialAccount->oauth;
    
    // 回调授权地址
    $url      = "http://qgcloud.capsui.com/public/index/wxopen/callbackOpenid";
    $response = $officialAccount->oauth->scopes(["snsapi_userinfo"])->redirect($url)->send();

}
网页授权回调方法
/**
 * 网页授权回调
 *
 * @return void
 */
public function callbackOpenid(){
    $appid = Request()->get("appid" , null);
    
    $config = [
        "app_id"   => "开放平台第三方平台 APPID",
        "secret"   => "开放平台第三方平台 Secret",
        "token"    => "开放平台第三方平台 Token",
        "aes_key"  => "开放平台第三方平台 AES Key"
    ];
    $openPlatform = Factory::openPlatform($config);
    $data         = $openPlatform->getAuthorizer($appid);
    
    $appid        = $data["authorization_info"]["authorizer_appid"];
    $refreshToken = $data["authorization_info"]["authorizer_refresh_token"];
    
    // 获取微信用户信息 如openid nickname等信息
    $officialAccount = $openPlatform->officialAccount($appid , $refreshToken);
    $oauth           = $officialAccount->oauth;
    $user            = $oauth->user();
    
    // 处理wxconfig初始化JSSDK
    $officialAccount->jssdk->setUrl("http://quguoshop.capsui.com/");
    $wxconfig = $officialAccount->jssdk->buildConfig(["chooseWXPay"], $debug = true, $beta = false, $json = true);

    $ShopConfig = new ShopConfig;
    $shopInfo   = $ShopConfig::appid($appid)->find();
    
    // 注意 这里我是带参数跳转到其他TP5项目里面再用缓存处理一下
    $url = "http://quguoshop.capsui.com/public/wxoauthCallback?data=" . json_encode($user->toArray()) . "&token=" . $shopInfo["id"] . "&wxconfig=" . $wxconfig;
    $this->redirect($url);
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/28747.html

相关文章

  • 微信三方登录(PC网站、APP、移动网页)

    摘要:最近搞微信第三方登录,搞蒙圈了。当你把服务号绑定到开放平台之后,网页授权返回的数据会多一个,同一个微信账号在同一个开放平台账号下的是一致的。 最近搞微信第三方登录,搞蒙圈了。 我们的业务有两个场景需要使用微信第三方登录:1、APP 第三方登录2、H5网页第三方登录,具体流程:用户微信端收到一个二维码--->扫码后同意微信授权-->绑定手机号码 一开始纠结着是不是需要申请公众号,找了个专...

    RobinQu 评论0 收藏0
  • python实现微信三方网站扫码登录(Django)

    摘要:写在前面本周刚在项目中实现了微信第三方网站扫码登录。准备与注意事项微信公众平台跟微信开放平台是两个不同的平台,别搞混了。参数在微信开放平台中查看。 写在前面 本周刚在项目中实现了微信第三方网站扫码登录。因为第一次写相关项目,所以遇到了很多坑。所以写这篇文章是希望像我之前那样的小白也能从容的开发,不要浪费无谓的时间,这篇文章尽量写的详细简单。准备与注意事项 微信公众平台跟微信开放平台是...

    lemanli 评论0 收藏0
  • 说说微信扫码登录

    摘要:详情接口我们这里主要讲的是网站应用,网站应用微信登录是基于协议标准构建的微信授权登录系统即上面的协议。在微信客户端授权登录获取用户信息的可以查看。微信授权登录目前支持模式,适用于拥有端的应用授权。 一、OAuth2.0 OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。 ...

    Jokcy 评论0 收藏0
  • 基于oauth 2.0 实现三方开放平台

    摘要:本文单纯从简单的技术实现来讲,不涉及开放平台的多维度的运营理念。它的特点就是通过客户端的后台服务器,与服务提供商的认证服务器进行互动能够满足绝大多数开放平台认证授权的需求。 本文单纯从简单的技术实现来讲,不涉及开放平台的多维度的运营理念。 什么是开放平台 通过开放自己平台产品服务的各种API接口,让其他第三方开发者在开发应用时根据需求直接调用,例如微信登录、QQ登录、微信支付、微博登录...

    Simon 评论0 收藏0
  • 基于oauth 2.0 实现三方开放平台

    摘要:本文单纯从简单的技术实现来讲,不涉及开放平台的多维度的运营理念。它的特点就是通过客户端的后台服务器,与服务提供商的认证服务器进行互动能够满足绝大多数开放平台认证授权的需求。 本文单纯从简单的技术实现来讲,不涉及开放平台的多维度的运营理念。 什么是开放平台 通过开放自己平台产品服务的各种API接口,让其他第三方开发者在开发应用时根据需求直接调用,例如微信登录、QQ登录、微信支付、微博登录...

    xiaodao 评论0 收藏0

发表评论

0条评论

tomlingtm

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<