小程序: getPhoneNumber功能詳解,獲取手機號登錄 2019

##內容

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

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