sifangpay/app/ServicePay/ThirdPaySignTrait.php

129 lines
3.8 KiB
PHP

<?php
namespace App\ServicePay;
trait ThirdPaySignTrait
{
/**
* md5 大写签名
* @param string $method
* @param array $requestData
* @param string $payKey
* @param array $filter
* @return string 签名MD5转大写
*/
public function md5Verify(string $method,array $requestData,string $payKey,array $filter=[]):string {
if ($method == 'create') {
$keyVal = self::keySortMd5Filter($requestData, $filter);
$keyVal = $keyVal . "key=" . $payKey;
$mysgin = strtoupper(md5($keyVal));
} else {
$keyVal = self::keySortMd5Filter($requestData, $filter);
$keyVal = $keyVal . "key=" . $payKey;
$mysgin = strtoupper(md5($keyVal));
}
return $mysgin;
}
/** key val 不用等号链接
* @param $requestData
* @param $payKey
* @param $filter
* @return string
*/
public function md5KeyLower(array $requestData,$payKey,array $filter=[]):string {
$tempArr = [];
foreach ($requestData as $key => $val) {
if (!in_array($key, $filter)) {
$tempArr[strtolower($key)] = strtolower($val);
}
}
ksort($tempArr);
$keyVal = '';
foreach ($tempArr as $key2 => $val2) {
$keyVal .= $key2 . $val2;
}
$keyVal = $keyVal . $payKey;
$mysgin = strtolower(md5($keyVal));
return $mysgin;
}
/**
* 只对key value 排序 不拼KEY 不 MD5
* @param array $requestData
* @param array $filter
* @return string
*/
private static function keySortMd5Filter(array $requestData,array $filter=[]):string {
$tempArr = [];
foreach ($requestData as $key => $val) {
if (!in_array($key, $filter)) {
$tempArr[$key] = $val;
}
}
ksort($tempArr);
$keyVal = '';
foreach ($tempArr as $k => $val) {
$keyVal .= $k . "=" . $val . "&";
}
return $keyVal;
}
/**
* @param array $requestData
* @param string $split
* @param array $filter
* @return string
*/
public static function valueKeySortSplitFilter(array $requestData,string $split='|',array $filter=[]):string {
$tempArr = [];
foreach ($requestData as $key => $val) {
if (!in_array($key, $filter)) {
$tempArr[$key] = $val;
}
}
ksort($tempArr);
$keyVal = '';
foreach ($tempArr as $k => $val) {
$keyVal .= $val . $split;
}
return trim($keyVal,$split);
}
/**
* 根据用户指定的顺序排列 用value拼接
* @param array $requestData
* @param array $userSort
* @param string $split
* @return string
*/
public function userSortValueSplitFilter(array $requestData, array $userSort, string $split = '|'): string
{
$keyVal = '';
foreach ($userSort as $r) {
if (array_key_exists($r, $requestData)) {
$keyVal .= $requestData[$r] . $split;
}
}
return trim($keyVal, $split);
}
/**
* 使用指定的一些字段签名拼接
* @param array $requestData
* @param array $userParam
* @param string $split
* @return string
*/
public function userParamSplitKeyValue(array $requestData,array $userParam,string $split='|'):string {
$tempArr = array_filter($requestData, function ($k) use ($userParam) {
return in_array($k, $userParam);
}, ARRAY_FILTER_USE_KEY);
ksort($tempArr);
$keyVal = '';
foreach ($tempArr as $k => $val) {
$keyVal .= $k . "=" . $val . $split;
}
return trim($keyVal, $split);
}
}