1. 程式人生 > 其它 >小程式獲取微信繫結手機號

小程式獲取微信繫結手機號

1.前端按鈕

 <button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"  class="btn">微信手機號</button>

2.js

  getPhoneNumber (e) {
    var _this = this;
    let openid = wx.getStorageSync('openid');
    let session_key = wx.getStorageSync('session_key');
        App._post('wechat/get_phone
' , { openid: openid, session_key: session_key, encryptedData:e.detail.encryptedData, iv:e.detail.iv, } , function (result) { if(result.status==1){             //成功 } } ) },

 3.伺服器後端

    //-獲取微信手機號

    public function get_phone()
    {
        $status=0;$message='失敗...';$http_status = 200;$data=[];
        $post=$this->request->param();
        $appid = self::$appid;  //小程式ID
        $sessionKey = $post['session_key'];
        $encryptedData = $post['encryptedData'];
        $iv 
= $post['iv']; $errCode = $this->decryptData($appid, $sessionKey,$encryptedData, $iv, $data ); if ($errCode==0) { $status=1; $message='成功...'; return self::response_data($status,$http_status,$message,$data); }else{ return self::response_data($status,$http_status,$message,$errCode); } return $data; }

  
/**
     * 檢驗資料的真實性,並且獲取解密後的明文.
     * @param $encryptedData string 加密的使用者資料
     * @param $iv string 與使用者資料一同返回的初始向量
     * @param $data string 解密後的原文
     *
     * @return int 成功0,失敗返回對應的錯誤碼
     */
    public function decryptData($appid,$sessionKey, $encryptedData, $iv, &$data )
    {

        if (strlen($sessionKey) != 24) {
            return '-41001';
        }
        $aesKey=base64_decode($sessionKey);

        if (strlen($iv) != 24) {
            return '-41002';
        }
        $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 '-41003';
        }
        if( $dataObj->watermark->appid != $appid )
        {
            return '-41004';
        }
        $data = $dataObj;
    }