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

原文地址:https://www.cnblogs.com/bk233/p/9529751.html