利用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