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

  • 相关阅读:
    231. Power of Two
    204. Count Primes
    205. Isomorphic Strings
    203. Remove Linked List Elements
    179. Largest Number
    922. Sort Array By Parity II
    350. Intersection of Two Arrays II
    242. Valid Anagram
    164. Maximum Gap
    147. Insertion Sort List
  • 原文地址:https://www.cnblogs.com/bk233/p/9529751.html
Copyright © 2011-2022 走看看