Heim  >  Artikel  >  WeChat-Applet  >  So erhalten Sie die Mobiltelefonnummer im Miniprogramm (thinkphp3.2.3 Framework)

So erhalten Sie die Mobiltelefonnummer im Miniprogramm (thinkphp3.2.3 Framework)

不言
不言Original
2018-08-14 17:12:504593Durchsuche

Der Inhalt dieses Artikels befasst sich mit dem Erhalten einer Mobiltelefonnummer über ein kleines Programm (Thinkphp3.2.3-Framework). Ich hoffe, dass es für Sie hilfreich ist .

1. Laden Sie den PHP-Code direkt hoch

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 = &#39;XXX&#39;;  //小程序appid
    public static $secret = &#39;XXX&#39;; //小程序秘钥   

public $sessionKey =&#39;&#39;;

    // 获取openId session-key 等
    public function getopenId($value=&#39;&#39;)
    {   

        $code = I(&#39;post.code&#39;);
        $appid = self::$appid;
        $secret = self::$secret;
        $url = &#39;https://api.weixin.qq.com/sns/jscode2session?appid=&#39;. $appid.&#39;&secret=&#39;.$secret.&#39;&js_code=&#39;.$code.&#39;&grant_type=authorization_code&#39;;
        $result = httpGet($url);
        $res = json_decode($result);
        // session([&#39;sessionKey&#39;=>$res,&#39;expire&#39;=>7200]);
        $this->ajaxReturn($res);

        
    }

    // 获取小程序手机号api 接口,对应下面小程序 js
    public function getPhoneNumber($value=&#39;&#39;)
    {   

       $encryptedData = I(&#39;get.encryptedData&#39;);
       $iv = I(&#39;get.iv&#39;);
       $this->sessionKey=I(&#39;get.session_key&#39;);
       $res = $this->decryptData($encryptedData, $iv);
       // $res = json_decode($res);
       if($res->phoneNumber){
            // $res->phoneNumbe 就是手机号可以 写入数据库或者做其他操作
       }
       
       $this->ajaxReturn([&#39;msg&#39;=>$res,&#39;status&#39;=>&#39;1&#39;]); //把手机号返回
        
    }

    // 小程序解密
   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. Miniprogramm

2.1 Melden Sie sich zuerst auf der Startseite von app.js an

// 登录
    // if (!wx.getStorageSync(&#39;session_key&#39;) || wx.getStorageSync(&#39;time&#39;) < Date.parse(new Date())){ // 判断session_key是不是存在获者过期
      wx.login({
        success: res => {
          console.log(res)
          // 发送 res.code 到后台换取 openId, sessionKey, unionId
          wx.request({
            url: &#39;https://www.zhixiaobing.com/index.php?m=&c=api&a=getopenId&#39;,
            header: { "Content-Type": "application/x-www-form-urlencoded" },
            method: &#39;post&#39;,
            data: { code: res.code },
            success: function (res) {
              console.log(res.data);
              wx.setStorageSync(&#39;openid&#39;, res.data.openid)
              wx.setStorageSync(&#39;session_key&#39;, res.data.session_key)
              wx.setStorageSync(&#39;time&#39;, parseInt(Date.parse(new Date())) + 7200)
            }
          })
          
        }
      })

//2.2 Komponenten in die Miniprogrammvorlage schreiben

<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber" >//这是官方的组件点击会弹出授权页面

Schreiben Sie die folgende Funktion in js

getPhoneNumber: function (e) {
    var that =this;

    var session_key = wx.getStorageSync(&#39;session_key&#39;)
    if (e.detail.errMsg == &#39;getPhoneNumber:fail user deny&#39;) {
      wx.showModal({
        title: &#39;提示&#39;,
        showCancel: false,
        content: &#39;未授权&#39;,
        success: function (res) { }
      })
    } else {//确认授权
      wx.request({
        url: &#39;https://www.showoow.com/index.php?m=mini&c=api&a=getPhoneNumber&openid=&#39; + wx.getStorageSync(&#39;openid&#39;), //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: &#39;提示&#39;,
              showCancel: false,
              content: &#39;授权成功&#39;,
              success: function () {
                wx.setStorageSync(&#39;phoneNumber&#39;, res.data.msg.phoneNumber);
                var time = Date.parse(new Date()) + 60 * 60 * 24 * 2
                wx.setStorageSync(&#39;exp&#39;, time );
              }
            })
            setTimeout(function(){
              wx.navigateTo({
                url: &#39;/pages/form/form&#39;,
              })
            },1500);
            that.setData({
              show:&#39;show&#39;,
              hiden:&#39;&#39;
            })
          }else{
            wx.showToast({
              title: &#39;授权失败&#39;,
              icon:&#39;loading&#39;
            })
          }
        
        },
        fail:function(){
          wx.showToast({
            title: &#39;授权失败&#39;,
            icon: &#39;loading&#39;
          })
        }
      })
     
    }
  },

Gehen Sie zu diesem Miniprogramm, um die Mobiltelefonnummer zu erhalten. Ich habe ein Miniprogramm geschrieben im Unternehmen. Sie können die Mobiltelefonnummer normal abrufen

Verwandte Empfehlungen:

Methoden zum Übergeben von Parametern und zum Empfangen von Daten im WeChat-Miniprogramm

Die Seite im Miniprogramm ist mit der h5-Tag-Analyse kompatibel

Das obige ist der detaillierte Inhalt vonSo erhalten Sie die Mobiltelefonnummer im Miniprogramm (thinkphp3.2.3 Framework). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn