90 lines
2.2 KiB
PHP
90 lines
2.2 KiB
PHP
<?php
|
||
|
||
namespace App\Services;
|
||
|
||
|
||
use http\Env\Request;
|
||
use Illuminate\Database\Eloquent\Scope;
|
||
use Illuminate\Database\Eloquent\Model;
|
||
use Illuminate\Database\Eloquent\Builder;
|
||
use DB;
|
||
use Illuminate\Support\Facades\Redis;
|
||
|
||
class PayServices
|
||
{
|
||
//
|
||
/**
|
||
* 数字签名
|
||
* server_id 商户id
|
||
* token 商户token密钥
|
||
* 价格,回调地址,异步回调,订单号,随机字符串,做md5加密
|
||
* ksort之后拼接字符串,转换成小写,然后md5加密,
|
||
* @param $data
|
||
* @return bool
|
||
*/
|
||
public function sign($data,$is_verfy=0){
|
||
//必填参数
|
||
$must_arr=[
|
||
'token',
|
||
'app_id',
|
||
'money',
|
||
'return_url',
|
||
'notify_url',
|
||
'out_trade_sn'
|
||
];
|
||
foreach ($must_arr as $k=>$v)
|
||
{
|
||
if(!key_exists($v,$data))
|
||
{
|
||
return ['error'=>1,'msg'=>'签名参数缺少'];
|
||
}
|
||
}
|
||
$data['money']=money_str($data['money'],2,'.','');
|
||
|
||
//排序
|
||
ksort($data);
|
||
//
|
||
$strkey = $this->toUrlParams($data);
|
||
//转换小写
|
||
$app_signature=strtolower($strkey);
|
||
//MD5加密
|
||
$app_signature = md5($app_signature);
|
||
//回调验证
|
||
if($is_verfy)
|
||
{
|
||
$app_signature=md5($data['token'].$app_signature);//token+之前的签名经行md5加密
|
||
}
|
||
return $app_signature;
|
||
}
|
||
public function toUrlParams( $params ){
|
||
$string = '';
|
||
if( !empty($params) ){
|
||
$array = array();
|
||
foreach( $params as $key => $value ){
|
||
$array[] = $key.'='.$value;
|
||
}
|
||
$string = implode("&",$array);
|
||
}
|
||
return $string;
|
||
}
|
||
|
||
/**
|
||
*
|
||
* @param $data 参数携带token
|
||
* @param $sign 过来的sign
|
||
* @return bool 真验证成功,否失败
|
||
*/
|
||
public function checkSign($data,$sign,$is_verfy=0){
|
||
$site_sign=$this->sign($data,$is_verfy);
|
||
if(is_array($site_sign))
|
||
{
|
||
return false;
|
||
}
|
||
|
||
if($site_sign!=$sign)
|
||
{
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
} |