• 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需要用户手动授权,这样用户只需一次授权以后即可“无痕登陆”)

  • 相关阅读:
    Whidbey 开发
    构建软件数字安全带系列课程
    微软产品生命周期模型系列课程
    Windows Mobile 2nd 开发黄金周
    微软高性能运算系列课程
    _tmain()和main()区别
    简单工厂模式&工厂方法模式
    单例模式
    java中去除字符串(String)中的换行字符(\r \n \t)
    阿里巴巴 Java开发手册1.4.0
  • 原文地址:https://www.cnblogs.com/bk233/p/9529751.html
Copyright © 2020-2023  润新知