HBuilderX 3.0+版本,新增一键登录,运营商网关认证,免短信验证获取手机号;刚好最近开发项目有应用上,简单分享一下!

1、开通uniapp的“一键登录”权限

在minifest.json文件中勾选一键登录(univerify)

3、在项目中创建“云函数”

方法名自己定义即可,创建完后在 index.js 填入以下获取手机号码的云函数代码:

'use strict';

exports.main = async (event, context) => {

let req = event.queryStringParameters; // 该参数为获取后端传递的access_token和openid,具体变量可以通过console.log打印查看

const res = await uniCloud.getPhoneNumber({

appid: '__UNI__1222', // 替换成自己开通一键登录的应用的DCloud appid,使用callFunction方式调用时可以不传(会自动取当前客户端的appid),如果使用云函数URL化的方式访问必须传此参数

provider: 'univerify',

apiKey: 'xxxx', // 在开发者中心开通服务并获取apiKey

apiSecret: 'xxxx', // 在开发者中心开通服务并获取apiSecret

access_token: req.access_token,

openid: req.openid

})

// 执行入库等操作,正常情况下不要把完整手机号返回给前端

return {

code: 0,

message: '获取手机号成功',

content: res // res里面包含了成功获取的真实手机号码

}

};

保存代码后右击函数目录,选择“上传部署”;

4、前端实现调用

toLogin(){

var _this = this;

uni.preLogin({

provider:"univerify",

success() {

uni.hideLoading();

uni.login({

provider:"univerify",

univerifyStyle:{},// 自定义授权页面信息,参数参考文档 https://uniapp.dcloud.io/univerify

success(res) {

let loginRes = res.authResult;

// loginRes : {openid:'deviceIDlength+deviceID+gyuid',access_token:'接口返回的 token'}

requestLogin(); // 执行后端请求逻辑

},

fail(fres) {

uni.closeAuthView(); // 关闭一键登录弹出窗口

if(fres.code == 30002){ // 点击其他方式登陆

uni.navigateTo({

url:"login/login",

animationType: 'slide-in-bottom',

animationDuration: 200

})

}

// 30003 关闭登陆

},

complete() {

uni.closeAuthView();

}

})

},

fail(res) {

console.log('error',res);

}

})

}

5、后端根据access_token和openid换取手机号码;以thinkphp为例

/**

* 一键登陆

*/

public function univerify(Request $request){

$secret = "这里填写一键登录申请通过后的AppSecret";

$sign = $this->getSignature($request->post(),$secret);

$requestUrl = "uniCloud后台获取的请求地址?sign=".$sign."&".http_build_query($request->post());

$result = json_decode(file_get_contents($requestUrl),true);

// 数据返回格式,自行打印查看

// {

// code: 0,

// message: '',

// phoneNumber: '138xxxxxxxx'

// }

if($result['code'] && isset($result['content']['phoneNumber'])){

$mobile = $result['content']['phoneNumber']; // 实际获取手机号码

}

}

/**

* 获取签名

* @param array $arrdata 签名数组

* @param string $key 密钥

* @return boolean|string 签名值

*/

protected function getSignature($arrdata,$key) {

ksort($arrdata);

$paramstring = "";

foreach($arrdata as $key => $value)

{

if(strlen($paramstring) == 0)

$paramstring .= $key . "=" . $value;

else

$paramstring .= "&" . $key . "=" . $value;

}

$stringSignTemp = rtrim($paramstring, '&');

$paySign = hash_hmac('sha256',$stringSignTemp,$key);

return $paySign;

}

6、前端获取手机号码

通过官方提供的云函数调用方法

uniCloud.callFunction({

name:"云函数名",

data:{

"access_token":loginRes.access_token,

"openid":loginRes.openid

}

}).then((res)=>{

console.log(res); // res 内容则包含手机号码

}).catch(){

// 执行失败

}

7、云函数请求地址获取

php 一键电话功能,uniapp手机号码一键登陆功能实现相关推荐

  1. 【uni-app】uniapp 实现一键登录 超详细记录~

    uniapp 实现一键登录 一. 前置条件: 开通uniCloud, 开通一键登录功能 二. 一键登录代码 & 云函数代码 三. 其他条件 四. 遇到过什么问题, 如何处理(本地函数同个局域网 ...

  2. 十分钟搞懂手机号码一键登录

    手机号码一键登录是最近两三年出现的一种新型应用登录方式,比之前常用的短信验证码登录又方便了不少.登陆时,应用首先向用户展示带有本机号码掩码的授权登录页面,用户点击"同意授权"的按钮 ...

  3. uniapp手机号一键登录

    uniapp手机号一键登录 先讲几个坑避免操作完以后会出bug无效喷我 部分机型会因为第一次在手机上编译普通基座无法触发手机号一键登录的弹框,这里当然是重启了,重启可以解决百分之八十的问题!!! 然后 ...

  4. 手机网站实现一键拨号及html5短信发送功能JS代码(微信适用)

    手机网站实现一键拨号及html5短信发送功能JS代码(微信适用) 来源:本站原创    作者:温州中网网络营销机构    发布时间:2014-1-10 10:45:44    点击数:3069 微信微 ...

  5. keil4在win10上无法启动_斯柯达的一键启动装置除了方便,还有啥功能?

    随着汽车的发展,非常多的高端配置已经走进普通家庭,这当中的一键启动就受到大众的青睐.我们斯柯达柯珞克.柯迪亚克.速派等很多车型都配备了一键启动装置.车主只需要将钥匙放在身上,车辆就可自动识别钥匙距离, ...

  6. AdPlayBanner:功能丰富、一键式使用的图片轮播插件

    概述 AdPlayBanner:功能丰富.一键式使用的图片轮播插件 详细 代码下载:http://www.demodashi.com/demo/11312.html AdPlayBanner是一个An ...

  7. login aspx实现登陆功能 400电话

    default aspx允许所有用户访问.login aspx实现登陆功能 400电话,reguser aspx实现注册用户功能.1 首先我们新建一个网站2 进入c:\windows\microsof ...

  8. hiveserver2启动不起来_汽车一键启动除了点火,还有这些功能!车主:现在才明白...

    看到很多人经常都会说这样一句话:"汽车经过十几年的发展如今已经如何如何呢",那发展至今的汽车产品对比以往到底发生了哪些变化?质量越来越好?还是油耗越来越低?其实都不见得.小编个人认 ...

  9. 公众号 多服务器配置_公众号太多看不过来?微信新功能帮你一键拒收

    用过 TIM 的朋友都称赞过一个功能,那就是它能把你长时间未联系的 QQ 好友一键分组,让你能够「尴尬又不失礼貌」地把不常联系的好友单独区分开来.而在微信上,许多人也面临着同样的问题--只不过这次「冗 ...

最新文章

  1. [C++] C++风格的强制类型转换探讨
  2. 每天学一点儿shell:linux中时间函数的date的用法
  3. 清华大学刘知远教授新作,图神经网络最佳解锁方式 | 送书福利
  4. php 运算验证码类,php 数学运算验证码实现代码
  5. 三网合一是指计算机网,什么是三站合一网站?什么是三网合一网站?
  6. firefox 插件 取消认证签名
  7. CSS:盒子模型和清除float浮动的三种常用方法
  8. 获取iOS任意线程调用堆栈(三)符号化理论:从Mach-o结构分析类名方法名
  9. Offer年薪低于25W全额退款|阿里、腾讯内推快艇《全链路大数据分析工程师》课程招生简章...
  10. DP-最大递增子序列与最大递增子数组; 最大公共子序列与最大公共子数组。
  11. SPFA算法(最短路径算法)
  12. CS224n自然语言处理(四)——单词表示及预训练,transformer和BERT
  13. ffmpeg 快速截图m3u8图片
  14. springboot酒店客房预定管理系统
  15. 机动车驾驶证扣分查询
  16. JS-函数进阶笔记二次总结
  17. IDEA常用快捷键(四)--查找文件、查找类
  18. 2022年超大屏手机推荐 这4款性能好屏幕大
  19. 二分查找的递归与非递归实现
  20. c++文件操作案例-----创建文本文件

热门文章

  1. iOS 高性能图片圆角
  2. uu-aodv框架分析
  3. 最简单的免费修改PDF文件方法
  4. cmd 运行 mysql_cmd上执行MySQL基础语句
  5. ITMS常见问题汇总以及解决方案
  6. 〖Python零基础入门篇(58)〗- Python中的虚拟环境
  7. CentOS 7进入单用户模式修改root密码
  8. android10与Flyme8,Emui10vsFlyme8 高手过招,细节见真章 !
  9. 【运维面试】你们公司有多少台服务器?
  10. linux vim一些实用的快捷键和方法