利用wx.login接口获取小程序code作为接口签名防恶意调用

前言
小程序接口经常被人抓包调用!烦死了!这样极大的影响服务器资源,那么这个就可以解决你的烦恼!
小程序代码
const wxLogin = () => {
  return new Promise((reslove) => {
    wx.login({
      success(res) {
        reslove(res.code);
      } 
    })
  })
}
//调用代码
var code = await wxLogin();
//接口使用的时候可以直接"&sign="+code
wx.request({
            url: "https://域名/getYzm?sign=" +code,
            success: function (res) { //后端返回的数据
              var data = res.data;
                console.info(data);
               
        }
 })
后端代码
<?php
 public function index(){
    isset($_GET['sign']) ? $sign = $_GET['sign'] : exit('sign获取失败!');
     if ($this->verifyCodeSign($sign) == false) {
        exit('签名校验失败!');
     }
//下面是实现功能代码
}
private function  verifyCodeSign($code){
        if (empty($code)){
            return false;
        }
//小程序的配置
        $appidStr=APPID;
        $secretStr=APPSECRET;
        $grant_type = "authorization_code"; //授权(必填)
        $params = "appid=".$appidStr."&secret=".$secretStr."&js_code=".$code."&grant_type=".$grant_type;
        $url = "https://api.weixin.qq.com/sns/jscode2session?".$params;
        $res = json_decode(Index::httpGet($url),true);
        if (empty($res['session_key'])){
            return false;
        }else{
            return true;
        }
    }
function httpGet($url) {
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_TIMEOUT, 500);
        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;
    }
本文作者
Soujer 晓杰
此处有隐藏内容--请扫描下方二维码查看
声明:本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。联系邮箱:400#tom.com
 
      




![[python]青龙面板实现通义千问自动打卡撸实物](https://cdn.java.pet/img/2024/12/1734491575-f30cbdae6f604a0.png!300X200)