中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

小程序獲取手機號的方法

發布時間:2020-12-21 13:54:51 來源:億速云 閱讀:188 作者:小新 欄目:移動開發

小編給大家分享一下小程序獲取手機號的方法,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

1、直接上代碼php

namespace Home\Controller;
use Think\Controller;
class ApiController extends Controller {
    /**
 * error code 說明.
 * <ul>

 *    <li>-41001: encodingAesKey 非法</li>
 *    <li>-41003: aes 解密失敗</li>
 *    <li>-41004: 解密后得到的buffer非法</li>
 *    <li>-41005: base64加密失敗</li>
 *    <li>-41016: base64解密失敗</li>
 * </ul>
 */
    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') < Date.parse(new Date())){ // 判斷session_key是不是存在獲者過期
      wx.login({
        success: res => {
          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 open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber" >//這是官方的組件點擊會彈出授權頁面

在js里寫下面的函數

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

看完了這篇文章,相信你對小程序獲取手機號的方法有了一定的了解,想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

三台县| 保靖县| 雅安市| 库车县| 定南县| 汤阴县| 瑞金市| 新晃| 彝良县| 揭阳市| 绥中县| 斗六市| 开封市| 绿春县| 泰顺县| 湖南省| 汽车| 嵊州市| 青岛市| 车险| 新巴尔虎左旗| 长海县| 宜阳县| 永修县| 尤溪县| 砀山县| 永清县| 金门县| 石家庄市| 通化市| 商都县| 大化| 保山市| 绥宁县| 克东县| 凤阳县| 资讯| 万盛区| 抚宁县| 聂荣县| 孝义市|