PHP7微信小程序获取openid和用户信息

 public function actionGetToken(){
        $request_body = file_get_contents('php://input');
        $data = json_decode($request_body, true);
        $code = $data['code'] ;
        $encryptedData = $data['encryptedData'] ;
        $iv = $data['iv'] ;

        //首先要知道微信方使用的是AES-128-CBC加密的:

        BaseToolService::info($data,"get-token-data") ;

        $appid = "XXXXXXXXXXX" ;
        $appsecert = "XXXXXXXXXXXXXXXXXXXXXX" ;
        $url = "https://api.weixin.qq.com/sns/jscode2session?" . "appid=%s&secret=%s&js_code=%s&grant_type=authorization_code" ;
        $url = sprintf($url, $appid, $appsecert, $code);
        $rs = HttpService::curlGet($url) ;

        $wxResult = json_decode($rs, true);
        BaseToolService::info($wxResult,"wxapp") ;
        if (empty($wxResult)) {
            return ["errcode"=>1,"msg"=>"获取session_key及openID时异常,微信内部错误"];
            // 为什么以empty判断是否错误,这是根据微信返回
            // 规则摸索出来的
            // 这种情况通常是由于传入不合法的code
        }
        else {
            // 建议用明确的变量来表示是否成功
            // 微信服务器并不会将错误标记为400,无论成功还是失败都标记成200
            // 这样非常不好判断,只能使用errcode是否存在来判断
            $loginFail = array_key_exists('errcode', $wxResult);
            if ($loginFail) {
                return ["errcode"=>$wxResult['errcode'],"msg"=>$wxResult['errmsg']];
            } else {
                $sessionKey = $wxResult['session_key'];
                $openid      = $wxResult['openid'];

                $aesKey = base64_decode($sessionKey);// 对称解密的秘钥 aeskey
                $aesIV = base64_decode($iv); // 对称解密算法初始向
                $aesCipher = base64_decode($encryptedData); // 对称解密的密文
                $decrypted = openssl_decrypt($aesCipher, 'AES-128-CBC', $aesKey, OPENSSL_RAW_DATA, $aesIV);

                BaseToolService::info($decrypted,"wxapp-decrypted") ;

                return ["errcode"=>0,"msg"=>"成功","data"=>$openid];
            }
        }
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值