>  기사  >  위챗 애플릿  >  미니 프로그램에서 휴대폰 번호를 얻는 방법 (thinkphp3.2.3 프레임워크)

미니 프로그램에서 휴대폰 번호를 얻는 방법 (thinkphp3.2.3 프레임워크)

不言
不言원래의
2018-08-14 17:12:504607검색

이 글의 내용은 작은 프로그램(thinkphp3.2.3 프레임워크)을 통해 휴대폰 번호를 얻는 방법에 대한 내용입니다. 도움이 필요한 친구들이 참고하시면 좋겠습니다.

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 = &#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. 미니 프로그램

2.1 먼저 app.js 시작 페이지에 로그인하세요

// 登录
    // 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 미니 프로그램 템플릿에 구성요소 작성

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

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;
          })
        }
      })
     
    }
  },

는 이 애플릿으로 완성되었습니다. 회사에서 작은 프로그램을 작성했고 정상적으로 휴대폰 번호를 얻을 수 있습니다

관련 권장 사항:

에서 매개 변수를 전달하고 데이터를 받는 방법 위챗 애플릿

미니 프로그램에서 h5 태그와 호환되는 페이지 분석

위 내용은 미니 프로그램에서 휴대폰 번호를 얻는 방법 (thinkphp3.2.3 프레임워크)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.