微信小程序用户信息获取单文件版,开封即用

<?php
// encryptedData ,iv 前台传递过来需要url编码一下
namespace app\user\model;

use think\Model;

class Wxmp extends Model{

    public $appid = '';
    public $secret = '';

    /**
     * 小程序登录
     *
     * @param [type] $data
     * @return void
     * @author 617 <email:723875993@qq.com>
     */
    public function wechatMini($data) {
        $appid = $this->appid;
        $secret = $this->secret;
        $js_code = $data['code'];
        $url = "https://api.weixin.qq.com/sns/jscode2session?appid={$appid}&secret={$secret}&js_code={$js_code}&grant_type=authorization_code";
        $res = wx_send($url);
        $res = json_decode($res, true);
        if (isset($res['session_key']) && !empty($res['session_key'])) {
            $info = $this->decodeUserInfo($appid, $res['session_key'], $data);
            if($info){
                return $info;
            }
            return false;
        }
        $this->error = $res['errmsg'];
        return false;
    }

    /**
     * 解密用户信息
     *
     * @param [type] $data
     * @return void
     * @author 617 <email:723875993@qq.com>
     */
    public function decodeUserInfo($appid, $sessionKey, $data) {
        $errCode = $this->decryptData($appid, $sessionKey, urldecode($data['encryptedData']), urldecode($data['iv']), $decode);
        if ($errCode === 0) return json_decode($decode,true);
        $this->error = $errCode;
        return false;
    }
    public function decryptData($appid, $sessionKey, $encryptedData, $iv, &$data ) {
        if (strlen($sessionKey) != 24) {
            return -41001;
        }
        $aesKey=base64_decode($sessionKey);
        if (strlen($iv) != 24) {
            return -41002;
        }
        $aesIV=base64_decode($iv);
        $aesCipher=base64_decode($encryptedData);
        $result=openssl_decrypt( $aesCipher, "AES-128-CBC", $aesKey, 1, $aesIV);
        $dataObj=json_decode( $result );
        if( $dataObj  == NULL )
        {
            return -41003;
        }
        if( $dataObj->watermark->appid != $appid )
        {
            return -41003;
        }
        $data = $result;
        return 0;
    }
}