此方法是微信支付v2版 和 支付宝的签名方式:
PHP:
/**
* Name [[验签]]
* User: 骚年a
*/
public static function verifySignApplet($input)
{
$key = '你的key';
$param = $input;
if(!array_key_exists('sign',$param) || empty($param['sign']) || !array_key_exists('a_specific_times',$param)) {
exit(json_encode(['code' => 0, 'msg' => '异常请求,请不要尝试攻击我哈'], 256));
}
$requestTime = $param['a_specific_times']/1000+60; //过期时间
$nowTime = time();
if($nowTime >= $requestTime){
exit(json_encode(['code' => 0, 'msg' => '异常请求,请不要尝试特殊请求哈'], 256));
}
$sign = $param['sign'];
unset($param['sign']);
unset($param['s']);
ksort($param);
$paramStr = '';
foreach ($param as $paramKey => $paramVal)
{
if(is_array($paramVal)) continue;
if($paramVal === null || $paramVal === '')continue;
$paramStr.=$paramKey.'='.$paramVal.'&';
}
$paramStr.='key='.$key;
$newSign = md5($paramStr);
if($newSign!=$sign) {
exit(json_encode(['code' => 0, 'msg' => '异常请求1'], 256));
}
}
UNIAPP
const getMd5Sign = function (param) {
var key = '你的key';
var paramKeys = Object.keys(param);
var paramArr = [];
paramKeys.forEach(function (value, key) {
var typeVal = typeof(param[value]);
if(param[value] !== undefined && param[value] !== null && param[value] !== '' && typeVal!=='object' ){
var one = value+'='+param[value];
paramArr.push(one);
}
});
var md5Str = paramArr.sort();
md5Str = md5Str.join("&");//拼接成字符串用&连接
md5Str = md5Str+"&key="+key;
return mm_md5.md5(md5Str)
};