PHP前端开发

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

百变鹏仔 6天前 #前端问答
文章标签 手机号

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

1、直接上代码php

namespace HomeController;use ThinkController;class ApiController extends Controller {    /** * error code 说明. * 
 */    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')  {          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>//这是官方的组件点击会弹出授权页面</button>

在js里写下面的函数

立即学习“PHP免费学习笔记(深入)”;

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&amp;c=api&amp;a=getPhoneNumber&amp;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'          })        }      })         }  },

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