• 技术文章 >微信小程序 >小程序开发

    小程序如何获取手机号( thinkphp3.2.3框架)

    不言不言2018-08-14 17:12:50原创3686
    本篇文章给大家带来的内容是关于小程序如何获取手机号( thinkphp3.2.3框架),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

    1、直接上代码php

    namespace Home\Controller;
    use Think\Controller;
    class ApiController extends Controller {
        /**
     * error code 说明.
     * <ul>
    
     *    <li>-41001: encodingAesKey 非法</li>
     *    <li>-41003: aes 解密失败</li>
     *    <li>-41004: 解密后得到的buffer非法</li>
     *    <li>-41005: base64加密失败</li>
     *    <li>-41016: base64解密失败</li>
     * </ul>
     */
        public static $OK = 0;
        public static $IllegalAesKey = -41001;
        public static $IllegalIv = -41002;
        public static $IllegalBuffer = -41003;
        public static $DecodeBase64Error = -41004;
        // 小程序
        public static $appid = 'XXX';  //小程序appid
        public static $secret = 'XXX'; //小程序秘钥   
    
    public $sessionKey ='';
    
        // 获取openId session-key 等
        public function getopenId($value='')
        {   
    
            $code = I('post.code');
            $appid = self::$appid;
            $secret = self::$secret;
            $url = 'https://api.weixin.qq.com/sns/jscode2session?appid='. $appid.'&secret='.$secret.'&js_code='.$code.'&grant_type=authorization_code';
            $result = httpGet($url);
            $res = json_decode($result);
            // session(['sessionKey'=>$res,'expire'=>7200]);
            $this->ajaxReturn($res);
    
            
        }
    
        // 获取小程序手机号api 接口,对应下面小程序 js
        public function getPhoneNumber($value='')
        {   
    
           $encryptedData = I('get.encryptedData');
           $iv = I('get.iv');
           $this->sessionKey=I('get.session_key');
           $res = $this->decryptData($encryptedData, $iv);
           // $res = json_decode($res);
           if($res->phoneNumber){
                // $res->phoneNumbe 就是手机号可以 写入数据库或者做其他操作
           }
           
           $this->ajaxReturn(['msg'=>$res,'status'=>'1']); //把手机号返回
            
        }
    
        // 小程序解密
       public function decryptData($encryptedData, $iv)
        {
            if (strlen($this->sessionKey) != 24) {
                return self::$IllegalAesKey;
            }
            $aesKey=base64_decode($this->sessionKey);
    
            
            if (strlen($iv) != 24) {
                return self::$IllegalIv;
            }
            $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 self::$IllegalBuffer;
            }
            if( $dataObj->watermark->appid != self::$appid )
            {
                return self::$IllegalBuffer;
            }
    
            return  $dataObj;
            // return self::$OK;
        }
    
    
    function httpGet($url) {
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_TIMEOUT, 500);
        // 为保证第三方服务器与微信服务器之间数据传输的安全性,所有微信接口采用https方式调用,必须使用下面2行代码打开ssl安全校验。
        // 如果在部署过程中代码在此处验证失败,请到 http://curl.haxx.se/ca/cacert.pem 下载新的证书判别文件。
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($curl, CURLOPT_URL, $url);
    
        $res = curl_exec($curl);
        curl_close($curl);
    
        return $res;
    }
    
    
    }

    //2、小程序

    2.1在app.js 启动页面里先login

    // 登录
        // if (!wx.getStorageSync('session_key') || wx.getStorageSync('time') < Date.parse(new Date())){ // 判断session_key是不是存在获者过期
          wx.login({
            success: res => {
              console.log(res)
              // 发送 res.code 到后台换取 openId, sessionKey, unionId
              wx.request({
                url: 'https://www.zhixiaobing.com/index.php?m=&c=api&a=getopenId',
                header: { "Content-Type": "application/x-www-form-urlencoded" },
                method: 'post',
                data: { code: res.code },
                success: function (res) {
                  console.log(res.data);
                  wx.setStorageSync('openid', res.data.openid)
                  wx.setStorageSync('session_key', res.data.session_key)
                  wx.setStorageSync('time', parseInt(Date.parse(new Date())) + 7200)
                }
              })
              
            }
          })

    //2.2 在小程序模板里写组件

    <button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber" >//这是官方的组件点击会弹出授权页面

    在js里写下面的函数

    getPhoneNumber: function (e) {
        var that =this;
    
        var session_key = wx.getStorageSync('session_key')
        if (e.detail.errMsg == 'getPhoneNumber:fail user deny') {
          wx.showModal({
            title: '提示',
            showCancel: false,
            content: '未授权',
            success: function (res) { }
          })
        } else {//确认授权
          wx.request({
            url: 'https://www.showoow.com/index.php?m=mini&c=api&a=getPhoneNumber&openid=' + wx.getStorageSync('openid'), //openid是app.js 已经存的
            header: {"Content-Type": "application/x-www-form-urlencoded" },
            method: "get",
            data: {
              encryptedData: e.detail.encryptedData, iv: e.detail.iv, session_key:session_key
            },
            success:function(res){
              if (res.data.msg.phoneNumber){
                console.log(res);
                wx.showModal({
                  title: '提示',
                  showCancel: false,
                  content: '授权成功',
                  success: function () {
                    wx.setStorageSync('phoneNumber', res.data.msg.phoneNumber);
                    var time = Date.parse(new Date()) + 60 * 60 * 24 * 2
                    wx.setStorageSync('exp', time );
                  }
                })
                setTimeout(function(){
                  wx.navigateTo({
                    url: '/pages/form/form',
                  })
                },1500);
                that.setData({
                  show:'show',
                  hiden:''
                })
              }else{
                wx.showToast({
                  title: '授权失败',
                  icon:'loading'
                })
              }
            
            },
            fail:function(){
              wx.showToast({
                title: '授权失败',
                icon: 'loading'
              })
            }
          })
         
        }
      },

    到此小程序获取手机号完结,在公司写了个小程序,可以正常获取手机号

    相关推荐:

    微信小程序传递参数以及接收数据的方法

    小程序中页面兼容h5标签的解析

    以上就是小程序如何获取手机号( thinkphp3.2.3框架)的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:小程序
    上一篇:微信小程序中request请求封装的代码分析 下一篇:微信小程序支付的流程问题解析(代码解析)
    VIP课程(WEB全栈开发)

    相关文章推荐

    • 【腾讯云】年中优惠,「专享618元」优惠券!• 微信小程序之页面路由知识点总结• 微信小程序云服务配置详解• 微信小程序视图层详解• 浅析小程序中如何优雅地进行模块化处理?• 浅谈小程序确保每个页面都已登陆的方法
    1/1

    PHP中文网