植物百科网
当前位置: 首页 农业百科

微信小程序怎么创建自己的账号(微信小程序新版本与旧版本授权用户手机号的教程)

时间:2023-06-13 作者: 小编 阅读量: 2 栏目名: 农业百科

另外,新版本接口不再需要提前调用wx.login进行登录。从基础库2.21.2开始,对获取手机号的接口进行了安全升级,也就是说基础库2.21.2以前的版本是旧版本,新版本和旧版本的区别是多了code参数,以后旧版本接口可能会摒弃,建议大家使用新版本的手机号授权。

开发微信小程序会有些场景是需要授权用户手机号的,微信小程序授权用户手机号是通过getPhonenumber接口授权的,因为需要用户主动触发才能发起获取手机号接口,所以该功能不由 API 来调用,需用 button 组件的点击来触发。另外,新版本接口不再需要提前调用wx.login进行登录。从基础库 2.21.2 (微信版本8.0.16)开始,对获取手机号的接口进行了安全升级,也就是说基础库 2.21.2 以前的版本是旧版本,新版本和旧版本的区别是多了code参数,以后旧版本接口可能会摒弃,建议大家使用新版本的手机号授权。

小程序授权手机号获取的参数

首先先讲一下旧版本如何授权用户手机号,旧版本授权手机号点击授权时,会出现第一次授权不成功的现象,什么原因呢?code过期了,有人会问我获取的code是点击授权手机号时一起获取的,怎么会过期呢?这个就是这么神奇,可能是微信的bug问题吧,反正一直没决解,但也不是没有解决的方法,解决方法就是在onLoad页面加载时就wx.login获取code值;

微信小程序手机号操作流程

旧版本授权手机号的代码示例

微信小程序wxml页面

<button open-type="getPhoneNumber" bindgetphonenumber="getUserMobileInfo"></button>

微信小程序js页面

/*** 页面的初始数据*/data: {code: '',},/*** 获取手机号*/getUserMobileInfo: function (e) {var that = this,code = that.data.code,encryptedData = e.detail.encryptedData,iv = e.detail.iv;wx.checkSession({success() {//session_key 未过期,并且在本生命周期一直有效},fail() {wx.login({success: res => {that.setData({code: res.code})}})},complete() {if (e.detail.errMsg == "getPhoneNumber:ok") {userService.getTelephoneNumber(code, encodeURIComponent(encryptedData), encodeURIComponent(iv)).then(function (data) {wx.hideLoading();var mobileValue = data.datathat.setData({mobileValue: mobileValue,})}, function (data) {wx.hideLoading();wx.showToast({title: data.message,icon: 'none'});});} else {wx.showModal({title: '提示',content: '需获取手机号才可提交信息',})}}})},/*** 生命周期函数--监听页面加载*/onLoad: function (options) {wx.login({success: res => {this.setData({code: res.code})}})},

用户同意授权,我们可以根据wx.login时获取到的code来通过后台以及微信处理拿到session_key,最后通过app_id,session_key,iv,encryptedData(用户同意授权errMsg返回‘getPhoneNumber:ok')

传给后台的参数:code参数传到后台需要换取session_key;encryptedData包括敏感数据在内的完整用户信息的加密数据,iv加密算法的初始向量,这两个参数后台需要解密的,解密的方法可以去微信官方开发文档查看,有很详细说明,这里就不讲述了。

后台处理后返回的参数

后台处理后返回的参数

phoneNumber:用户绑定的手机号(国外手机号会有区号);

purePhoneNumber :没有区号的手机号;

countryCode:区号

新版本授权手机号的代码示例

微信小程序wxml页面

<button open-type="getPhoneNumber" bindgetphonenumber="getUserMobileInfo"></button>

微信小程序js页面

/*** 获取手机号*/getUserMobileInfo: function (e) {var that = this,code = e.detail.code;if (e.detail.errMsg == "getPhoneNumber:ok") {userService.getTelephoneNumber(code).then(function (data) {wx.hideLoading();var mobileValue = data.datathat.setData({mobileValue: mobileValue,})}, function (data) {wx.hideLoading();wx.showToast({title: data.message,icon: 'none'});});} else {wx.showModal({title: '提示',content: '需获取手机号才可提交信息',})}}

php后端的逻辑处理

/*** 获取access_token* @return array*/private function getSession() {$params = ['appid'=> '你的小程序appid','secret'=> '你的小程序appsecret','grant_type' => 'client_credential'];$result = $this->httpGet("https://api.weixin.qq.com/cgi-bin/token", $params);return json_decode($result, true);}/*** code获取用户手机信息*/public function getTelephoneNumber() {if (IS_POST) {$raw_json = file_get_contents("php://input");$post_data = json_decode($raw_json, true);$code = $post_data['code'];$session_res = $this->getSession($code);if ($session_res['errcode']) {$this->apiReturn('0', $session_res['errmsg']);}$param_data = ['code' => $code,];$res_data = $this->httpJsonPost("https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=".$session_res['access_token'], $param_data);$info = json_decode($res_data, true);if($info['errcode'] != 0){$this->apiReturn($info['errcode'], $info['errmsg']);}$this->apiReturn('1', '', $info['phone_info']['phoneNumber']);}}/*** json 请求* @param string $url* @param array $data*/protected function httpJsonPost($url, $data = NULL){$curl = curl_init();curl_setopt($curl, CURLOPT_URL, $url);curl_setopt($curl, CURLOPT_SSL_VERifYPEER, false);curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);if(!$data){return 'data is null';}if(is_array($data)){$data = json_encode($data);}curl_setopt($curl, CURLOPT_POST, 1);curl_setopt($curl, CURLOPT_POSTFIELDS, $data);curl_setopt($curl, CURLOPT_HEADER, 0);curl_setopt($curl, CURLOPT_HTTPHEADER,array('Content-Type: application/json; charset=utf-8','Content-Length:' . strlen($data),'Cache-Control: no-cache','Pragma: no-cache'));curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);$res = curl_exec($curl);$errorno = curl_errno($curl);if ($errorno) {return $errorno;}curl_close($curl);return $res;}/*** GET 请求* @param string $url* @param array $param*/protected function httpGet($url, $param) {$url = $url . '?' . http_build_query($param);$curl = curl_init();if (stripos($url, 'https://') !== FALSE) {curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);curl_setopt($curl, CURLOPT_SSLVERSION, 1);}curl_setopt($curl, CURLOPT_URL, $url);curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);$content = curl_exec($curl);$status = curl_getinfo($curl);curl_close($curl);if (intval($status['http_code']) == 200) {return $content;} else {return false;}}

接口成功返回的整体数据结构,如下图:

接口成功返回的整体数据结构

写后台逻辑时我遇到两个错误反馈

第一种反馈:{"errcode":47001,"errmsg":"data format error hint: [AgoBsDOre-c6ouia] rid: 626b7164-1d9c3b08-076fdbdb"},这个错误是因为没有用请求头 Content-Type为application/json,所以我改成了json数据post请求,这个报错解决了。

第二种反馈:{"errcode":41001,"errmsg":"access_token missing rid: 626b7285-31e3f8d7-3556ca83"},这个错误是因为access_token参数,我没写在url上,是和code一起写在数组中传值的,这样是不对,应该写到url上的,这个报错解决了。

旧版本的后台逻辑没有写出来,是因为微信以后要摒弃旧版本的写法,这里就没必要写了,如果有不会的,可以网上搜索一下,建议大家还是用新版本获取用户手机号的写法!小程序js文件中request请求,我用的是封装后的写法传参的,你可以微信小程序原生的wx.request传参写法。以上就是微信小程序新版本与旧版本授权用户手机号的教程了,仅供参考!!!

    推荐阅读
  • 空气含量中最多的气体(空气含量中最多的气体介绍)

    空气中含量最多的气体是氮气,氮气约占空气体积分数的百分比约为78%。通过实验测定,空气的成分按体积计算,氮气大约占78%、氧气占21%、稀有气体0.94%、二氧化碳0.03%、其他气体和杂质0.03%,也就是说空气中含量最多的物质是氮气。氮气化学性质很不活泼,在高温高压及催化剂条件下才能和氢气反应生成氨气;在放电的情况下才能和氧气化合生成一氧化氮;即使Ca、Mg、Sr和Ba等活泼金属也只有在加热的情形下才能与其反应。

  • 文思豆腐羹如何做好吃(文思豆腐羹用什么豆腐)

    文思豆腐是一道有名的淮扬菜,需要的就是精湛的刀工,这样做出的文思豆腐会有嫩滑的口感,打造入口即化的口感。文思豆腐羹如何做好吃文思豆腐羹材料和做法步骤一、文思豆腐羹材料准备好豆腐400克,鸡脯肉,火腿还有香菇,再有准备好生菜,冬笋,调料需要准备盐和味精。

  • 结构性存款可以买理财吗(结构性存款是存款吗)

    雪球产品就是今年年初监管向信托公司进行窗口指导,要求叫停的产品。简单的说,这是一种高风险的金融衍生品,它通过持有一定结构的金融衍生品,来实现在某一特定情况下获利。这样的投资结构就能保证我不论涨,还是跌,只要在一定幅度内都可以盈利。交易期权等金融衍生品,是非常高风险的投资。

  • 正言厉色意思(正言厉色的意思)

    下面内容希望能帮助到你,我们来一起看看吧!正言厉色意思正言厉色,汉语成语,拼音是zhènɡyánlìsè,意思是形容板着脸,神情非常严厉。出自《汉书·王莽传》。宝玉突然想出一个主意,一本正经地给她讲扬州黛山林子洞耗子精偷香芋的故事,黛玉见他正言厉色,以为真有其事,后来才发现原来是在取笑她。

  • 面谈调薪酬有什么技巧(跟老板谈调薪的技巧有哪些)

    如果你在老板心目中分量很大,一般老板都会给你加薪的。和老板谈加薪时目的一定要明确,让老板知道你只是为了加薪,而不是辞职走人。和老板谈加薪后,一定要给老板一个考虑的时间,不要咄咄逼人,逼着老板加薪。老板也要有足够的思考时间,来考虑你是否值得加薪,给你加薪后对公司有没有什么影响。不仅口头上要表示感谢,工作中要更加努力,让老板觉得给你加薪是值得的。

  • 杏花有没有香味(杏花闻起来会特别香吗)

    杏树是中国著名的观赏树木,可配植于庭前、墙隅、道路旁、水边,也可群植、片植于山坡、水畔,是春季主要的观赏树种。杏花直径2至3厘米,先于叶开放。花梗短,长1至3毫米,被短柔毛。花萼紫绿色,萼筒圆筒形,外面基部被短柔毛。萼片卵形至卵状长圆形,先端急尖或圆钝,花后反折。花瓣圆形至倒卵形,白色或带红色,具短爪。

  • 减肥减肚子的方法(怎么减肚子呢)

    减肥减肚子的方法食用健康食品:酸奶与发酵的牛奶能激活消化必须的物质,有助于改善肠道微生物系统,从而防止腹部隆起。走路、喝水、按摩:走路及喝水有利腹部扁平。

  • 新坑翡翠手镯多少钱(新坑翡翠手镯的价格)

    新坑翡翠手镯多少钱?新坑翡翠手镯多少钱翡翠手镯作为大件翡翠制品,用料特别多,只有大块、质量好的翡翠原石才能打造成手镯,因此翡翠手镯的价格都比较高,商家们拿到质量比较好的原石也尽可能打造成手镯。具体到新坑种翡翠,因为大多数新坑种翡翠透明度都不高,质地也不够细腻,因此种水一般都是以糯种或豆种为主,极少出现冰种或冰种以上的种水,这样的翡翠价格价格自然不会太高,一个品质比较好的糯种翡翠手镯大概在十万以内。

  • 宁波毛蚶做法水煮几分钟(毛蚶煮多长时间可以吃)

    宁波毛蚶做法水煮几分钟毛蚬是很多人喜欢吃的食物,不过建议大家在做之前都要先用开水煮以下。强精益气,提高精液质量,增强精子活力。适用于治疗肾阳虚所致的阳痿、腰痛、小便频数及补五脏之气不足。可治疗全身水肿,小便不利等。能软化和保护血管,有降低人体中血脂和胆固醇的作用。

  • 2022洛阳湿地公园最新名单 洛阳生态公园最新消息

    国家级湿地自然保护区河南黄河湿地国家级自然保护区,面积24000公顷。国家级湿地公园嵩县陆浑湖国家湿地公园,面积4222.39公顷伊川伊河国家湿地公园,面积1384.36公顷。