##内容

1.效果图
2.前端页面组件书写
3.JS内组件用法
4.接口文件内容

1.效果图:

2.小程序前端页面

<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber">点击登录</button>

使用小程序button按钮,按照官方文档写的,无需修改。官方文档:https://developers.weixin.qq.com/miniprogram/dev/component/button.html

3.  小程序js写法,此处代码直接复制即可,根据自己需求修改

var app = getApp();

Page({

/**

* 页面的初始数据

*/

data: {

},

/**

* 生命周期函数--监听页面加载

*/

onLoad: function (options) {

},

//通过绑定手机号登录

getPhoneNumber: function (e) {

var ivObj = e.detail.iv

var telObj = e.detail.encryptedData

var codeObj = "";

console.log(e);

var that = this;

//------执行Login

wx.login({

success: res => {1

wx.request({

url: that.globalData.API_URL + '/index/login/login', //接口地址

data: {

code: res.code,

encryptedData: telObj,

iv: ivObj

},

header: {

'content-type': 'application/json' // 默认值

},

success: function (res) {

phoneObj = res.data.phoneNumber;

openid = res.data.openid;

console.log("手机号=", phoneObj)

wx.setStorage({ //存储数据并准备发送给下一页使用

key: "phoneObj",

data: res.data.phoneNumber,

})

}

})

//-----------------是否授权,授权通过进入主页面,授权拒绝则停留在登陆界面

if (e.detail.errMsg == 'getPhoneNumber:fail user deny') { //用户点击拒绝

wx.navigateTo({

url: '../index/index',

})

} else { //授权通过执行跳转

wx.navigateTo({

url: './personal',

})

}

}

});

//---------登录有效期检查

wx.checkSession({

success: function () {

//session_key 未过期,并且在本生命周期一直有效

},

fail: function () {

// session_key 已经失效,需要重新执行登录流程

wx.login() //重新登录

}

});

},

globalData: {

API_URL: '你的后端请求地址'

}

})

4.后端接口代码,此处为php开发,只放核心代码

public $appid;
public $secret;
public $access_token;
public function _initialize()
{$this->appid = 'wx*********';$this->secret = '44a***********';
}
public function index(){}
/** 登录获取微信用户的手机号* 微信请求:get* 参数:code、iv、encryptedData* 返回信息:phoneNumber等* curl方法:自定义* appid、secret等需要填写你自己的* */
public function login(){//接收微信传过来的参数$code = input('code/s');$iv = input('iv/s');$encryptedData = input('encryptedData/s');//检测参数是否存在if (empty($code) || empty($iv) || empty($encryptedData)){return json_encode(['code'=>2,'msg'=>'code参数未传','data'=>[]],JSON_UNESCAPED_UNICODE);}//1.先通过code获取session_key,保证key可用$uri = 'https://api.weixin.qq.com/sns/jscode2session?appid='.$this->appid.'&secret='.$this->secret.'&js_code='.$code.'&grant_type=authorization_code';$info = Curl::get($uri);$info = json_decode($info,true,JSON_UNESCAPED_UNICODE);//2.通过得到的session_key 以及微信传过来的参数解密,获取手机号$result = $this->getPhone($info['session_key'],$iv,$encryptedData);//存储用户信息$user = new Users();$param['openid'] = $info['openid'];$param['session_key'] = $info['session_key'];$param['phone'] = $result['phoneNumber'];//检测用户是否第一次登陆$exist = $user->getInfoByOpenId($param['openid']);if(empty($exist)){//首次新增$user->addUser($param);$info['uid'] = $user->getLastInsID();}else{//非首次,修改用户信息$data['id'] = $exist['id'];$data['session_key'] = $info['session_key'];$data['phone'] = $result['phoneNumber'];$user->editUser($data);$info['uid'] = $exist['id'];}$info['phoneNumber'] = $result['phoneNumber'];return json_encode(['code'=>1,'msg'=>'登录成功!','data'=>$info],JSON_UNESCAPED_UNICODE);
}//解密,获取手机号
public function getPhone($session_key,$iv,$encryptedData){import('WxBizDataCrypt',EXTEND_PATH);$wx = new \WXBizDataCrypt($this->appid,$session_key);$errCode = $wx->decryptData($encryptedData, $iv, $data );if ($errCode == 0) {return json_decode($data,true,JSON_UNESCAPED_UNICODE);} else {print($errCode . "\n");die();}
}

5.此处开发还需要官方的解密文件,自己放在可以引用的地方即可,下载地址:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html#%E5%8A%A0%E5%AF%86%E6%95%B0%E6%8D%AE%E8%A7%A3%E5%AF%86%E7%AE%97%E6%B3%95

6.注意:测试的时候要用开发工具真机运行测试,要不然 iv 和 encryptedData这两个参数为 undefined!

7.更多内容或demo下载,加群:372319250

小程序: getPhoneNumber功能详解,获取手机号登录 2019相关推荐

  1. 微信小程序退款功能(详解完整)

    微信小程序支付->退款 微信小程序退款的时候如果是线上,就会涉及到Linux读取打包后项目存放文件路径失败问题,获取不到其中的微信退款证书,在这里就需要使用流的方式进行读取路径,经大佬指点才最终 ...

  2. 家政服务APP小程序开发功能详解

    随着人们生活水平的提高,对家政服务的要求也越来越高.而传统的到家政公司寻找服务人员的方法显然已经无法满足人们需求,取而代之的是线上预约家政服务.家政服务App小程序软件可以满足用户在线预约,还可以根据 ...

  3. 小程序向Java传值,微信小程序 页面传值详解

    微信小程序 页面传值详解 一. 跨页面传值. 1 . 用 navigator标签传值或 wx.navigator, 比如 这里将good_id=16 参数传入detail页面, 然后detail页面的 ...

  4. 微信小程序详解 php,微信小程序canvas基础详解

    canvas 元素用于在网页上绘制图形.HTML5 的 canvas 元素使用 JavaScript 在网页上绘制2D图像.本文主要和大家分享微信小程序canvas基础详解,希望能帮助到大家. 一.了 ...

  5. 微信小程序详解 php,微信小程序列表开发详解

    本文主要和大家分享微信小程序列表开发详解,主要以代码的形式和大家分享,希望能帮助到大家. 一.知识点 (一).列表渲染 wx:for tip:wx:for="array"可以等于参 ...

  6. php小程序地图处理,微信小程序 地图map详解及简单实例

    微信小程序 地图map 微信小程序map 地图属性名类型默认值说明longitudeNumber中心经度 latitudeNumber中心纬度 scaleNumber1缩放级别 markersArra ...

  7. 微信小程序底部菜单详解

    微信小程序底部菜单详解 只需要在app.json里面修改配置,即可 {"pages":["pages/index/index","pages/logs ...

  8. php 微信小程序 循环 多选,微信小程序 for 循环详解

    1,wx:for 在组件上使用wx:for控制属性绑定一个数组,即可使用数组中各项的数据重复渲染该组件.默认数组的当前项的下标变量名默认为index,数组当前项的变量名默认为item 事例如下: wx ...

  9. 微信小程序支付流程详解

    原创 Dr Hydra 码农参上 2020-11-22 11:00 收录于合集#微信开发技术3个 最近在工作中接入了一下微信小程序支付的功能,虽然说官方文档已经比较详细了,但在使用过程中还是踩了不少的 ...

  10. 微信小程序后台开发详解

    微信小程序后台开发 前言 开发环境 开发流程 项目整体结构 接口开发 项目部署 ip映射 Nginx反向代理 gunicorn+super多进程开启服务+进程监控 ssl证书 小程序常用功能 微信支付 ...

最新文章

  1. python数据结构学习笔记(五)
  2. 3月Win 10美占有率超20% 免费升级是否延长受关注
  3. Android Handler的原理
  4. react的bind(this)
  5. 返回局部变量或临时变量的地址_C++的函数不可以返回局部变量的指针
  6. spring boot + vue + element-ui全栈开发入门——前端编辑数据对话框
  7. 二维叉乘求三角形面积_角形
  8. Server(Iocp)的那些烦恼
  9. python新年快乐代码_新年快乐! python实现绚烂的烟花绽放效果
  10. 计算机网络安全基础的上机知识,网络安全上机竞赛试题操作演示.pdf
  11. 征服,才是技术人的本能
  12. 用python制作3d动图_怎样用Python制作好玩的GIF动图
  13. Linux Regulator Framework(1) - Framework
  14. Tableau LOD表达式
  15. 你不知道的css——4. 基线、中线、x-height、单位ex(含文本与图标对齐技巧)
  16. git 手动master_git 如何撤销一次remote的master commit?
  17. 新增11条新规约,阿里Java开发手册|黄山版,拥抱规范,远离伤害
  18. jq bind命名空间
  19. SXOI2018 游记
  20. java unpark_LockSupport中的park与unpark原理

热门文章

  1. Unity 用什么IDE比较好?
  2. 步进电机编写单4拍或4-8拍方式的汇编或c语言控制程序.,51单片机C语言和汇编控制28BYJ48步进电机程序...
  3. 机电一体化基础知识及实训QY-JDYT01
  4. Full Disk Encryption(FDE)全盘加密开关
  5. RNA-seq流程学习笔记(4)-使用FastQC软件对fastq格式的数据进行质量控制
  6. 给screen的会话改名字
  7. 【Vue项目复习笔记】详情页的展示
  8. 推荐一个C# 制作免安装程序的工具和方法,超级好用 fody
  9. thinkpadE450 进入bios并设置bios为uefi模式U盘启动(也可以是legacy)
  10. HTML期末大作业~仿小米商城网页设计模板(HTML+CSS+JavaScript)