80 lines
2.9 KiB
PHP
80 lines
2.9 KiB
PHP
<?php
|
||
// +----------------------------------------------------------------------
|
||
// | likeshop开源商城系统
|
||
// +----------------------------------------------------------------------
|
||
// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
|
||
// | gitee下载:https://gitee.com/likeshop_gitee
|
||
// | github下载:https://github.com/likeshop-github
|
||
// | 访问官网:https://www.likeshop.cn
|
||
// | 访问社区:https://home.likeshop.cn
|
||
// | 访问手册:http://doc.likeshop.cn
|
||
// | 微信公众号:likeshop技术社区
|
||
// | likeshop系列产品在gitee、github等公开渠道开源版本可免费商用,未经许可不能去除前后端官方版权标识
|
||
// | likeshop系列产品收费版本务必购买商业授权,购买去版权授权后,方可去除前后端官方版权标识
|
||
// | 禁止对系统程序代码以任何目的,任何形式的再发布
|
||
// | likeshop团队版权所有并拥有最终解释权
|
||
// +----------------------------------------------------------------------
|
||
// | author: likeshop.cn.team
|
||
// +----------------------------------------------------------------------
|
||
namespace app\common\server\DouGong;
|
||
|
||
class BaseFunc
|
||
{
|
||
static function json($data)
|
||
{
|
||
return json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE);
|
||
}
|
||
|
||
static function get_data_json(array $data) : array
|
||
{
|
||
foreach ($data as $key => $value) {
|
||
if (is_array($value)) {
|
||
$data[$key] = static::json($value);
|
||
}
|
||
}
|
||
|
||
return $data;
|
||
}
|
||
|
||
/**
|
||
* 私钥加签(对数据源排序),可用于 V2 版本接口数据加签
|
||
* @param int $alg 默认 OPENSSL_ALGO_SHA256
|
||
*
|
||
* @return string 签名串
|
||
*/
|
||
static function sha_with_rsa_sign($data, $rsaPrivateKey, int $alg = OPENSSL_ALGO_SHA256): string
|
||
{
|
||
ksort($data);
|
||
|
||
$data = static::json(static::get_data_json($data));
|
||
|
||
$key = "-----BEGIN PRIVATE KEY-----\n" .
|
||
wordwrap($rsaPrivateKey, 64, "\n", true) .
|
||
"\n-----END PRIVATE KEY-----";
|
||
|
||
$signature = '';
|
||
|
||
openssl_sign($data, $signature, $key, $alg);
|
||
|
||
return base64_encode($signature);
|
||
}
|
||
|
||
/**
|
||
* 汇付公钥验签(对数据源排序),可用于 V2 版本接口返回数据验签
|
||
*
|
||
* @param string $signature 签文
|
||
* @param string $data 原数据(array)
|
||
* @param string $rsaPublicKey 公钥
|
||
* @param int $alg 默认 OPENSSL_ALGO_SHA256
|
||
*
|
||
* @return false|int 验证结果:成功/失败
|
||
*/
|
||
static function verifySign_sort(string $signature, string $data, string $rsaPublicKey, int $alg = OPENSSL_ALGO_SHA256)
|
||
{
|
||
$key = "-----BEGIN PUBLIC KEY-----\n" .
|
||
wordwrap($rsaPublicKey, 64, "\n", true) .
|
||
"\n-----END PUBLIC KEY-----";
|
||
|
||
return openssl_verify($data, base64_decode($signature), $key, $alg);
|
||
}
|
||
} |