zoukankan      html  css  js  c++  java
  • PHP(TP5)获取微信小程序unionId

      最近做一个项目,微信小程序、Android、IOS同步进行开发,小程序从微信内部直接登录,Android、IOS也需要用微信登陆,为了确定同一用户的身份,需要使用到微信的unionId。

      将小程序、APP都绑定到同一微信公众平台后,Android、IOS能直接获取到unionId,但在小程序上获取unionId需要用到后端解密。

      网上有一些获取unionId的方法试过一些,有点复杂,所以我总结出一个比较简单的。

      网上下载微信官方提供的PHP的demo,会有3个文件:

      其实在demo里已经有用法了,代码很简单明了:写入appid、sessionKey、encryptedData、iv四个参数即可。除了appid是固定的外,其他都由前端传过来。

      这个demo只是返回解密unionId成功,即code为0或是其他错误code,真正的unionId值,是wxBizDataCrypt.php里的$data的值,可以改为返回该值

      TP5实现代码:

        //获取微信小程序unionId
        public function getUnionId()
        {
            $sessionKey = Request::instance()->param("sessionKey", '', 'htmlspecialchars');
            $encryptedData = Request::instance()->param("encryptedData", '', 'htmlspecialchars');
            $iv = Request::instance()->param("iv", '', 'htmlspecialchars');
            $appid = 'wxxxxxxxxxxxxxx';
            //引入文件
            vendor('wxunionid.wxBizDataCrypt');
            $pc = new WXBizDataCrypt($appid, $sessionKey);
            $unionId = $pc->decryptData($encryptedData, $iv, $data);
            return $unionId;
        }

      由于小程序上一个用户对一个小程序的openid是相同的,unionId也相同,我们每次解析unionId后可以将openid和unionId保存在数据库,用unionId作为用户唯一表示,小程序登陆的时候先使用openid查找数据库是否有openid对应的unionId值,有则直接返回用户数据进行登陆(目前openid可以直接获取,但是unionId需要用户手动授权,这样用户只需一次授权以后即可“无痕登陆”)

  • 相关阅读:
    linux中shell变量$#,$@,$0,$1,$2的含义解释
    oracle数据库教程从入门到精通
    ORA01078: failure in processing system parameters 启动oracle数据库时报错
    Linux中文显示乱码问题以及中文输入法安装问题
    .tar.xz文件的解压
    两个rpm文件包存在互相依赖关系时,需要同时安装,解决办法如下
    #include sys/xxx.h头文件说明
    Linux下DIR_dirent_stat等结构体详解
    创建共享无线网
    Linux 磁盘“Block Size”研究
  • 原文地址:https://www.cnblogs.com/bk233/p/9529751.html
Copyright © 2011-2022 走看看