配置服务器域名

图片

身份认证 只要给了权限的管理员都可以扫码操作 不一定要账户所属者

认证

tips:com后面不要加 / 不然容易爆红不合法域名,去掉斜杠就好了

获取手机号码

小程序通过 bindgetphonenumber 获取加密数据

 <button open-type="getPhoneNumber"  bindgetphonenumber="getPhoneNumber" class="btn">立即绑定</button>
 /**通过 bindgetphonenumber 进行获取加密数据**/

获取

通过wx.login 获取code 进行服务器交互

  wx.login({
      success:(res=>{
        console.log("wx_login",res);
          wx.request({
            url: app.globalData.base_url+'index/wx_login/checkLoginPhone',  // 获取微信手机号
            data: {
              "code": res.code,
              "encryptedData": e.detail.encryptedData,
              "iv":e.detail.iv,
            },
            method: 'POST',
            header: {
              'content-type': 'application/json'
            },
            success:(res)=>{
              console.log("获取手机号码成功:",res.data);
              if(res.data.data.phoneNumber){
                wx.showToast({
                  title: res.data.msg,
                  mask:true,
                  duration:1000,
                  icon:'none'
                })
                that.setData({
                  tel:res.data.data.phoneNumber
                })
                var openid = wx.getStorageSync('openid')
                console.log("上传的openid",openid);
                // 获取手机号之后进行登录信息绑定
                    wx.request({
                      url: app.globalData.base_url+'index/wx_login/getUserInfo',
                      data: {
                        "code": res.code,
                        "openid":openid.openid,
                        "tel":that.data.tel
                      },
                      method: 'POST',
                      header: {
                        'content-type': 'application/json'
                      },
                      success:(res)=>{
                        console.log("绑定成功",res);
                        if(res.data.code == 200){
                          wx.setStorageSync('userInfo', res.data.data);
                          that.setData({
                            isUserInfo:true,
                            userInfo:res.data.data
                          })
                        }else{
                          wx.showToast({
                            title: res.data.msg,
                            mask:true,
                            duration:2000,
                            icon:'none'
                          })
                        }
                        
                      }
                    })
              }else{
                wx.showToast({
                  title: res.data.data.message+' 请重新绑定',
                  mask:true,
                  duration:2000,
                  icon:'none'
                })
              }
            }
          })
      }),
      fail: function (res) {
        console.log(res.data);
        console.log('is failed')
      }
    })

上传的openid 获取之法

   getOpenid(){
    wx.login({
      success:(res)=>{
        wx.request({
          url: 'https://api.weixin.qq.com/sns/jscode2session?appid='+this.globalData.APPID+'&secret='+this.globalData.SECRET+'&js_code='+res.code+'&grant_type=authorization_code',
          method: 'POST',
          header: {
            'content-type': 'application/json'
          },
          success:(res)=>{
            console.log("oepdnid",res.data.data.openid);
            // return res.data.data.openid
            wx.setStorageSync('openid',res.data.data.openid)
          }
        })
      }
    })
  },

后台解密手机号码

//检查登陆的手机号
    public function checkLoginPhone($code, $encryptedData, $iv) {
        /**
         * 4.server调用微信提供的jsoncode2session接口获取openid, session_key, 调用失败应给予客户端反馈
         * , 微信侧返回错误则可判断为恶意请求, 可以不返回. 微信文档链接
         * 这是一个 HTTP 接口,开发者服务器使用登录凭证 code 获取 session_key 和 openid。其中 session_key 是对用户数据进行加密签名的密钥。
         * 为了自身应用安全,session_key 不应该在网络上传输。
         * 接口地址:"https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code"
         */

        $params = [
            'appid' => $this->config['appid'],
            'secret' => $this->config['secret'],
            'js_code' => $code,
            'grant_type' => $this->config['grant_type']
        ];

        $res = $this->makeRequest($this->config['url'], $params);

        if ($res['code'] !== 200 || !isset($res['result']) || !isset($res['result'])) {
            return ['code'=>ErrorCode::$RequestTokenFailed, 'message'=>'请求Token失败'];
        }
        $reqData = json_decode($res['result'], true);
        if (!isset($reqData['session_key'])) {
            return ['code'=>ErrorCode::$RequestTokenFailed, 'message'=>'请求Token失败'];
        }
        $sessionKey = $reqData['session_key'];
        /**
         *
         * 6.使用第4步返回的session_key解密encryptData, 将解得的信息与rawData中信息进行比较, 需要完全匹配,
         * 解得的信息中也包括openid, 也需要与第4步返回的openid匹配. 解密失败或不匹配应该返回客户相应错误.
         * (使用官方提供的方法即可)
         */

        $pc = new WXBizDataCrypt($this->config['appid'], $sessionKey);
        $errCode = $pc->decryptData($encryptedData, $iv, $data,$sessionKey,$this->config['appid']);
        if ($errCode !== 0) {
            return ['code'=>$errCode, 'message'=>'解密信息错误'];
        }
        /**
         * 7.生成第三方3rd_session,用于第三方服务器和小程序之间做登录态校验。为了保证安全性,3rd_session应该满足:
         * a.长度足够长。建议有2^128种组合,即长度为16B
         * b.避免使用srand(当前时间)然后rand()的方法,而是采用操作系统提供的真正随机数机制,比如Linux下面读取/dev/urandom设备
         * c.设置一定有效时间,对于过期的3rd_session视为不合法
         *
         * 以 $session3rd 为key,sessionKey+openId为value,写入memcached
         */
        $data = json_decode($data, true);
        $session3rd = $this->create3rd_session(16);
//        $session3rd = $this->randomFromDev(16);
        $data['session3rd'] = $session3rd;
//        cache($session3rd, $data['openId'] . $sessionKey);
        return $data;
    }

成功

腾讯地图

获取key

获取key

获取当前经纬度 返回地址文字

/**
   * 定位
   */
  handleLocation(){
    var that = this
    wx.getLocation({
      type: 'wgs84', //返回可以用于wx.openLocation的经纬度
      success (res) {
        var getAddressUrl = "https://apis.map.qq.com/ws/geocoder/v1/?location=" + res.latitude + "," + res.longitude + "&key=自己的key";
        
        wx.request({          
          url: getAddressUrl,
          data:{
            "sig":'这个是签名验证 可忽略 我用的是加白名单域名'
          },
          success: function (result) {        
            console.log("result:",result)      
            that.setData({
              address:result.data.result.address
            })    
          }        
        })
      }
    })
  }

添加域名白名单

添加

成功

成功

posted on 2022-06-08 10:56  depressiom  阅读(478)  评论(0编辑  收藏  举报