700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 微信小程序获取用户信息及手机号(后端TP5.0)

微信小程序获取用户信息及手机号(后端TP5.0)

时间:2021-12-10 09:08:33

相关推荐

微信小程序获取用户信息及手机号(后端TP5.0)

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'>To provide better service, click "allow" in the prompt box later!</view><view class='dialog-footer'><button class='dialog-btn' open-type="getUserInfo" bindgetuserinfo="getUserInfo">I see.</button></view></view></view><view wx:if="{{config.tipsshow2}}" class='dialog-container'><view class='dialog-mask'></view><view class='dialog-info'><view class='dialog-title'>login prompt</view><view class='dialog-content'>To provide better service, click "allow" in the prompt box later!</view><view class='dialog-footer'><button class='dialog-btn' open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber">To authorize.</button></view></view></view>

wxss页面

.dialog-mask{position: fixed;z-index: 1000;top: 0;right: 0;left: 0;bottom: 0;background: rgba(0, 0, 0, 0.3);}.dialog-info{position: fixed;z-index: 5000;width: 80%;max-width: 600rpx;top: 50%;left: 50%;-webkit-transform: translate(-50%, -50%);transform: translate(-50%, -50%);background-color: #FFFFFF;text-align: center;border-radius: 3px;overflow: hidden;}.dialog-title{font-size: 36rpx;padding: 30rpx 30rpx 10rpx;}.dialog-content{padding: 10rpx 30rpx 20rpx;min-height: 80rpx;font-size: 32rpx;line-height: 1.3;word-wrap: break-word;word-break: break-all;color: #999999;}.dialog-footer{display: flex;align-items: center;position: relative;line-height: 90rpx;font-size: 34rpx;}.dialog-btn{display: block;-webkit-flex: 1;flex: 1;position: relative;color: #3CC51F;}

js页面

data: {userName: '',pwd: '',getUserInfoFail: '',userInfo: [],hasUserInfo: '',phone: '',config: {tipsshow1: true,tipsshow2: false}},/*** 生命周期函数--监听页面加载*/onLoad: function(options) {var that = this;//用户是否授权过手机号wx.getStorage({key: 'phone',success: function (res) {that.setData({config: {tipsshow1: false,tipsshow2: false},})}})//是否授权过用户信息wx.getSetting({success: function(res) {if (res.authSetting['scope.userInfo']) {// 已经授权,可以直接调用 getUserInfo 获取头像昵称wx.getUserInfo({success: function(res) {that.setData({userInfo: res.userInfo,config: {tipsshow1: false,},})}})}}})},getPhoneNumber: function(e) {if (e.detail.errMsg == "getPhoneNumber:fail user deny") return;//用户允许授权wx.showLoading()var self = this//1. 调用登录接口获取临时登录codewx.login({success: res => {console.log(res, 555)if (res.code) {//2. 访问登录凭证校验接口获取session_key、openidwx.request({url: "xxxxxxx/index/author/login",data: {'js_code': res.code,},method: 'GET', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECTheader: {'content-type': 'application/json'}, // 设置请求的 headersuccess: function(data) {console.log(data, data)if (data.statusCode == 200) {//3. 解密wx.request({url: 'xxxxxx/index/author/number',data: {'appid': data.data.appid,'sessionKey': data.data.session_key,'encryptedData': e.detail.encryptedData,'iv': e.detail.iv,},method: 'GET', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECTheader: {'content-type': 'application/json'}, // 设置请求的 headersuccess: function(data2) {wx.hideLoading()console.log(data2.data.phoneNumber)if (data2.statusCode == 200 && data2.data.phoneNumber) {self.setData({phone: data2.data.phoneNumber,config: {tipsshow1: false,tipsshow2: false,},})wx.setStorageSync('phone', data2.data.phoneNumber);if (self.data.userInfo != '') {wx.request({url: 'xxxx/index/author/regist',data: {username: self.data.userInfo.nickName,sex: self.data.userInfo.gender,phone: self.data.phone,pwd: 123456,avatarimg: self.data.userInfo.avatarUrl},success: function(data) {console.log(data.data,56565)if (data.data != null) {wx.showToast({title: '登录中...',icon: 'loading',duration: 2000})wx.navigateTo({url: '../managementList/managementList'//管理页面})}}});}console.log(self.data, 526336)}},fail: function(err) {console.log(err);}})}},fail: function(err) {console.log(err);}})}}})},getUserInfo: function(e) {var that = this;console.log(e.detail.userInfo, "getuserinfo")if (e.detail.userInfo) {that.setData({userInfo: e.detail.userInfo,config: {tipsshow1: false,tipsshow2: true,},})console.log(that.data.userInfo);} else {console.log("获取信息失败")}},

PHP后端

<?phpnamespace app\index\controller;use think\Controller;use app\admin\model\UserRecharge;use think\Db;class Author extends Controller{/*** 发送HTTP请求方法* @param string $url 请求URL* @param array $params 请求参数* @param string $method 请求方法GET/POST* @return array $data 响应数据*/function httpCurl($url, $params, $method = 'POST', $header = array(), $multi = false){date_default_timezone_set('PRC');$opts = array(CURLOPT_TIMEOUT => 30,CURLOPT_RETURNTRANSFER => 1,CURLOPT_SSL_VERIFYPEER => false,CURLOPT_SSL_VERIFYHOST => false,CURLOPT_HTTPHEADER=> $header,CURLOPT_COOKIESESSION => true,CURLOPT_FOLLOWLOCATION => 1,CURLOPT_COOKIE =>session_name().'='.session_id(),);/* 根据请求类型设置特定参数 */switch(strtoupper($method)){case 'GET':// $opts[CURLOPT_URL] = $url . '?' . http_build_query($params);// 链接后拼接参数 & 非?$opts[CURLOPT_URL] = $url . '?' . http_build_query($params);break;case 'POST'://判断是否传输文件$params = $multi ? $params : http_build_query($params);$opts[CURLOPT_URL] = $url;$opts[CURLOPT_POST] = 1;$opts[CURLOPT_POSTFIELDS] = $params;break;default:throw new Exception('不支持的请求方式!');}/* 初始化并执行curl请求 */$ch = curl_init();curl_setopt_array($ch, $opts);$data = curl_exec($ch);$error = curl_error($ch);curl_close($ch);if($error) throw new Exception('请求发生错误:' . $error);return $data;}/*** 微信信息解密* @param string $appid 小程序id* @param string $sessionKey 小程序密钥* @param string $encryptedData 在小程序中获取的encryptedData* @param string $iv 在小程序中获取的iv* @return array 解密后的数组*/function decryptData( $appid , $sessionKey, $encryptedData, $iv ){$OK = 0;$IllegalAesKey = -41001;$IllegalIv = -41002;$IllegalBuffer = -41003;$DecodeBase64Error = -41004;if (strlen($sessionKey) != 24) {return $IllegalAesKey;}$aesKey=base64_decode($sessionKey);if (strlen($iv) != 24) {return $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 $IllegalBuffer;}if( $dataObj->watermark->appid != $appid ){return $DecodeBase64Error;}$data = json_decode($result,true);return $result;}/*** 请求过程中因为编码原因+号变成了空格* 需要用下面的方法转换回来*/function define_str_replace($data){return str_replace(' ','+',$data);}//获取手机号public function number($appid , $sessionKey, $encryptedData, $iv){include_once (ROOT_PATH."./public/author/wxBizDataCrypt.php"); //引入 wxBizDataCrypt.php 文件$appid = $appid;$sessionKey = $sessionKey;$encryptedData= $encryptedData;$iv = $iv;$data = '';$pc = new \WXBizDataCrypt($appid, $sessionKey); //注意使用\进行转义$errCode = $pc->decryptData($encryptedData, $iv, $data );if ($errCode == 0) {print($data . "\n");} else {print($errCode . "\n");}}//微信登录public function login(){$get = input('get.');$param['appid'] = 'xxxxxxxxxx'; //小程序id$param['secret'] = 'xxxxxxxxxx'; //小程序密钥$param['js_code'] = $this->define_str_replace($get['js_code']);$param['grant_type'] = 'authorization_code';$http_key = $this->httpCurl('https://api./sns/jscode2session', $param, 'GET');$session_key = json_decode($http_key,true);//获取openid和session_key//print_r(http_build_query($param));if (!empty($session_key['session_key'])) {$data['appid'] = $param['appid'];$data['session_key'] = $session_key['session_key'];return json($data);}else{echo '获取session_key失败!';}}//用户注册public function regist($username = "",$sex = "", $phone = "",$password = "",$avatarimg = ""){if ($phone){//判断该用户是否已经注册$userdata = Db::name('user')->where('phone',$phone)->find();if ($userdata){return json_encode(2);}//整合数组$salt = '1122';$password = Md5(Md5($password) . $salt);$data = ['name' => $username,'sex' => $sex,'phone' => $phone,'password' => $password,'avatarimg' => $avatarimg,'logtime' => date("Y-m-d H:i:s"),'addTime' => date("Y-m-d H:i:s")];//注册新用户$userid = db('user')->insertGetId($data);if ($userid){return json_decode(1);}else{return json_encode(0);}}}}

wxBizDataCrypt.php 文件下载地址:/s/1YwvXnrbQikRhmLPyV71WMw

提取码为yzhl

或者扫描下方二维码

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。