微信小程序獲取用戶手機號碼

零基礎的我剛接觸小程序寫出來這個功能的時候我的心理活動是

好  開始寫了 

爲了方便我給你們解釋我給你們找了個圖:

 

 第一步:我們看看上邊的說明書(獲取登錄憑證code)

               這個code碼是使用小程序登錄接口完成後取的,這個wx.request()請求是爲了把code發送到後端,後端用code換區session_key和openid。

 wx.login({
    success: function (res) {
      if (res.code) { //使用小程序登錄接口完成後端用戶登錄
        wx.request({
          url: app.d.hostUrl + 'getOpenid',//你自己api接口的路徑
          data: {
            code: res.code,
            appid: "你的小程序AppID",
            secret: "你的小程序secret",
          },
          success: function (res) {
            //把openid保存到緩存裏
            wx.setStorageSync("openid", res.openid);
            wx.setStorageSync("session_key", res.session_key);
          }
        })
      } else {
        console.log('獲取用戶登錄態失敗!' + res.errMsg)
      }
    }
  });

前端已經把獲取openid和session_key需要的參數傳給後端了,後端怎麼寫呢,嘻嘻,這樣寫:

 

//用code換session_key和openid
public function getOpenid(){
	global $_GPC;//這是微擎框架 $_GPC想當於$_GET和$_POST
	$code = $_GPC['code'];
	$appid = $_GPC['appid'];
	$secret = $_GPC['secret']; 
	$api = "https://api.weixin.qq.com/sns/jscode2session?appid={$appid}&secret={$secret}&js_code={$code}&grant_type=authorization_code";
    $str = $this->httpGet($api);
        return $str;
}
private function httpGet($url){
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_TIMEOUT, 500);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true);
        curl_setopt($curl, CURLOPT_URL, $url);
        $res = curl_exec($curl);
        curl_close($curl);
        return $res;
}

這樣,前端success就能拿到openid和session_key了,現在,我們要在後端用session_key和openid來解密手機號碼了

第二步:我們來寫個解密手機號碼的接口,看說明書,我們現在要開始寫getPhoneNumber了,等會小程序端要調用,看代碼之前先給你們看看官方文檔

鏈接:開放數據校驗與解密

往下翻,點擊下載解壓後長下面這樣

 然後,看demo,把裏面的固定參數換成我們自己的,簡化一下就是這面這點代碼,我是完全複製,順序都沒改:

public function getPhoneNumber(){
//這是解密手機號碼的接口,等會前端還要寫個請求訪問這個接口拿到手機號碼
		global $_GPC;
		require_once dirname(__FILE__) . '/mail/WXBizDataCrypt.php';
		$appid = $_GPC['appid'];
        $sessionKey = $_GPC['session_key'];
        $encryptedData = $_GPC['encryptedData'];
        $iv = $_GPC['iv'];
        $pc = new WXBizDataCrypt($appid, $sessionKey);
		$errCode = $pc->decryptData($encryptedData, $iv, $data );
		if ($errCode == 0) {
		    print($data . "\n");
		} else {
		    print($errCode . "\n");
		}
	}

然後這裏面的wxBizDataCrypt.php和errorCode.php的路徑根據你的項目路徑改一下1:要在這個接口裏面改wxBizDataCrypt.php的路徑2:到wxBizDataCrypt.php文件改errorCode.php路徑。

第三步:寫完這個接口我們看一下上面的說明書,我們要開始調用了,調用這個接口同樣是寫一個請求,這個接口需要什麼呢,看裏面,他需要appid、session_key、encryptedData、iv。

那現在(wmxl)是不是要有一個按鈕觸發,點了那個按鈕就能獲取手機號碼了(我要寫的非常詳細)

<button bindgetphonenumber='getPhoneNumber'> 使用微信登錄 </button>

 最後,手機號碼就獲取到了。

 

getPhoneNumber:function (e) {
    var detail = e.detail;
    wx.request({
      url: app.d.hostUrl + 'getPhoneNumber',  //解密手機號碼接口
      data: {
        "appid": app.d.appId,
        "session_key": wx.getStorageSync('session_key'),
        "encryptedData": detail.encryptedData,
        "iv": detail.iv
      },
      success: function (res) {
        console.log(res.data.phoneNumber);
        wx.setStorageSync("phonenumber", res.data.phoneNumber);
        
      }
    })
  },

有什麼不對的地方歡迎糾正。

                                                        此時,一位熱心網友離開現場去給你們買點桔子。

                                                               

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章