微信小程序获取用户手机号

前端通过微信接口获取这三个参数

$code = input(‘post.code‘);
$encryptedData = urldecode(input(‘post.encryptedData‘));
$iv = input(‘post.iv‘);

首先  我们拿code去curl获取到用户的信息 (openID,session_key)

然后  通过session_key,appid,encrypteData,iv 这几个参数 通过官方demo 的解密方式 获取到信息

最后  电话号入库就结束了!

整合了下demo

    public function wxtel()
    {

        $code = input(‘post.code‘);
        $encryptedData = urldecode(input(‘post.encryptedData‘));
        $iv = input(‘post.iv‘);

        /**
         * 获取用户的openID和session_key
         */
        $appid=‘wx3bde8f37288981f3‘;
        $secret=‘4dc2c819e4c84594535e9f880eed9386‘;
        $url = "https://api.weixin.qq.com/sns/jscode2session?appid=$appid&secret=$secret&js_code=$code&grant_type=authorization_code";
        $ch = curl_init();
        $timeout = 5;
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
        $contents = curl_exec($ch);
        curl_close($ch);
        $info = json_decode($contents,true);

        /**
         * 获取加密电话数据
         */
        $openid = $info[‘openid‘];
        $sessionKey = $info[‘session_key‘];

        $errCode = $this->decryptData($appid,$sessionKey,$encryptedData, $iv, $data );

        if ($errCode == 0) {
            $datas[‘tel‘] = $data->phoneNumber;
            $datas[‘openid‘] = $openid;
            $datas[‘add_time‘] = date(‘Y-m-d H:i:s‘);
            $TelModel = new TelModel();
            $status = $TelModel->insertRow($datas);
            $return[‘code‘] = $status ? 200:300;
            $return[‘data‘] = $status;
        } else {
            $return[‘code‘] = 301;
            $return[‘data‘] = $errCode;
        }

        return json_encode($return);

    }

    /**
     * 检验数据的真实性,并且获取解密后的明文.
     * @param $encryptedData string 加密的用户数据
     * @param $iv string 与用户数据一同返回的初始向量
     * @param $data string 解密后的原文
     *
     * @return int 成功0,失败返回对应的错误码
     */
    private 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 -41004;
        }
        $data = $dataObj;
        return 0;
    }

这里遇到个坑

encrypteData 这个值 在前端传给后端的时候 会发生变化 导致解密结果为空 报错-41003  解决方法:后端接收的时候urldecode一下即可

有时候会报-41001 解决办法:PHP的json字符串有时候加上反斜杠”\”来转义,PHP处理时需要先去掉反斜杠,然后再json_decode

  $str = stripslashes($json); 
  $arr = json_decode($str,true);

使用stripslashes()函数,问题解决!

原文地址:https://www.cnblogs.com/zmdComeOn/p/11857266.html

时间: 2024-08-28 20:02:09

微信小程序获取用户手机号的相关文章

微信小程序获取用户手机号详解

最近在做一款微信小程序,需要获取用户手机号,具体步骤如下: 流程图: 1.首先,客户端调用wx.login,回调数据了包含jscode,用于获取openid(用户唯一标识)和sessionkey(会话密钥). 2.拿到jscode后,将其发送给服务端,服务端拿它与微信服务端做交互获取openid和sessionkey.具体获取方法如下: (1)需要写一个HttpUrlConnection工具类: <span style="font-size:18px;">public cl

微信小程序获取用户手机号 记录 (PHP)

1. 用户登录时需要获取 openid ,同时可以获取 session_key, 二者同时返回, 此时我们要将二者存储在服务端. 2. 小程序端 button 按钮拉起授权, 向api 传递 iv 和 encryptedData . 3. api 接口 引入 下载的 类文件后, 通过以下两行代码(其中 $sessionKey 是 之前我们在用户登录时存储在服务端的 session_key) $pc = new \WXBizDataCrypt($APPID, $sessionKey); $errC

微信小程序-获取用户信息和openid,session_key,

1:微信小程序获取用户信息:比如常用的 avatarUrl (用户头像),nickName (用户名称) 等等, (1):获取用户信息调用 wx.getUserInfo 代码如下: 直接请求接口就可以了,随后把数据存放到storage中,下次直接取 就不用再请求接口,, 2:获取 openid (1):请求wx.login 接口,代码如下: url:是微信提供的 appid:是小程序的appid secret:是小程序开发设置的 AppSecret 只要获取到这两项,用户信息可以用于页面,ope

微信小程序获取登录手机号

小程序获取登录用户手机号. 因为需要用户主动触发才能发起获取手机号接口,所以该功能不由 API 来调用,需用 <button> 组件的点击来触发. 首先,放置一个 button 按钮,将 button 的 open-type 的属性值设为 getPhoneNumber . 当用户点击并通过之后,通过绑定的事件获取微信服务器返回过来的加密数据,再根据 session_key 和 app_id 通过后台解密就可以获取手机号啦. 说到这,就上码吧!!! 1 <!--index.wxml--&g

微信小程序 获取用户信息 encryptData解密 C#版本

最近学习小程序开发,需要对encryptData解密,获取用户信息,官方源码没有C#版本,网上的资料比较杂,有的使用还有问题,下面贴一下自己亲试可以使用的一个源码 1.code 换取 session_key 前端先调 wx.login 得到code传输到后端,后端通过接口 https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authoriza

微信小程序 获取用户openid

1,可以在小程序app.js入口文件中放入登录代码 wx.login({ success: res => { // 登录注册接口 if (res.code) { // 调用服务端登录接口,发送 res.code 到服务器端换取 openId, sessionKey, unionId并存入数据库中 } else { console.log('登录失败!' + res.errMsg) } } }); 2,服务端PHP,小程序获取openid接口 // 获取openid function getOpe

微信小程序获取用户信息及手机号 进行微信登录

一.wxml页面 <view wx:if="{{config.tipsshow1}}" class='dialog-container'> <view class='dialog-mask'></view> <view class='dialog-info'> <view class='dialog-title'>login prompt</view> <view class='dialog-content'

微信小程序获取用户信息流程

获取用户信息与其他授权不太一样,其他授权会自动弹出对话框,请求获取用户授权,但获取用户信息不回,需要引导用户点击授权按钮同意授权获取用户基本信息 1.前端页面要有授权登录按钮 <button wx:if="{{canIUse}}" open-type="getUserInfo" bindgetuserinfo="bindGetUserInfo" > 授权登录 </button> <view wx:else>请升

微信小程序 - 获取用户信息的几种方式

1. 老接口(上线使用-测试用button先获取用户信息) 1 // 登录 2 wx.login({ 3 success: res => { 4 // 发送 res.code 到后台换取 openId, sessionKey, unionId 5 // 也就是发送到后端,后端通过接口发送到前端,前端接收用户信息等.... 6 wx.setStorageSync('code', res.code); 7 console.log(wx.getStorageSync('code')) 8 9 // 获