Skip to content

Files

Latest commit

 

History

History
90 lines (72 loc) · 2.93 KB

WxApp.md

File metadata and controls

90 lines (72 loc) · 2.93 KB

外部网站微信扫码登录

使用说明

在使用前,请先参考微信开放平台扫码登录的开发文档,具体的接口说明,以微信的文档为准。

使用步骤

  • 先按文档的要求,在微信开放平台创建网页app,得到appid和appsecret
  • 在网站上,添加配置。

在yii2的web配置中,加入如下的配置,推荐放入至common的main-local.php中,如 common/config/main-local.php中。

return [
  'components' => [
      //其它配置
      //此处配置要注入的WxLogin实例,key可以随便写。建议写wxapp
      'wxapp' => [
          'class' => 'lspbupt\wechat\WxApp',
          'appid' => '开放网页app的appid',
          'appsecret' => '开放平台网页app的secret',
          // 可以不配,默认为系统使用的默认cache,如果想把access_token存入db之类的,可以配成dbcache或redisCache等,详见yii2的说明
          'cache' => 'cache',   
      ],
  ],
  //....
];
  • 在页面上放入微信的二维码

具体的配置参见开发文档,本widget与它保持一致。在页面加入如下代码即可,不用引js,也不用作额外的加解密等。

<div>
   <div id="login_container">
   </div>
</div>

<?=\lspbupt\wechat\widgets\JsWxappLogin::widget([
       //与前面的配置名保持一致
       'wxApp' => 'wxapp',
       // 该id很重要,会把微信扫码的二维码填充至该id对应的dom内。默认为login_container
       'id' => 'login_container',
       // 微信扫码成功后,页面的回跳地址,处理回跳逻辑
       'redirect_uri' => 'xxx',
       // scope,state等均见开发文档的说明,也可以不配置。
       'state' => 'xxx',
       'style' => 'black',
       'href' => '...',
]);
?>
  • 在controller内开始按微信登录的逻辑书写代码,如下为大致示意代码:
class xxController extends Controller
{
    public function actionWxlogin()
    {
        $code = Yii::$app->request->get("code", "");
        //如果没有带code参数,直接展示上文中的扫码登录页
        if(empty($code)) {
           //如果有state,设置state,并存储
            return $this->render("xxx");
        }
        //检查state,如果有的话,代码省略

        //根据code获取用户信息
        $data = Yii::$app->wxApp->getToken($code);
        if ($data['errcode']) {
            //...
        }
       $unionid = ArrayHelper::getValue($data, 'data.unionid', '');
       $openid = ArrayHelper::getValue($data, 'data.openid', '');
       //根据openid获取用户信息
       $data = Yii::$app->$wxApp->getUserInfo($openid);
       //余下省略,开发者可以根据用户的信息进行登录操作或者储存至数据库等操作。
    }

}