PHP的SHA256WithRSA签名和Curl POST请求函数

getCustomerEncryptionKey - 获取加密秘钥

/**

* 获取加密秘钥

* @param array $params

* @return string

*/

public function getCustomerEncryptionKey(array $params): string

{

//1.ASCII码(字典序-升序)排序

ksort($params);

//2.拼接成字符串string

$string = '';

foreach (params as key => $v) {

string .= (string)(key . '=' . $v . '&');

}

//3.拼接得到signTemp字符串

signTemp = string . 'MerchantKey=' . self::$MerchantKey;

//4.获取RSA私钥信息

$absPath = dirname(FILE) . '/test_pri.txt';//(对接替换为自己的私钥)

content = file_get_contents(absPath);

sContent = openssl_pkey_get_private(content);

//5.PHP-SHA256WithRSA 签名算法加密

openssl_sign(signTemp, signature, $sContent, "SHA256");

openssl_free_key($sContent);

//6.base64转换,得到SignSecret值

return base64_encode($signature);

}

getCurlRequestResult - Curl POST请求函数

/**

* Curl请求函数

* @param string $url 请求地址

* @param array $params 实体参数

* @param int $isPost GET|POST

* @param int $https HTTP|HTTPS

* @param int $isJson Json|-

* @return bool|string

*/

public function getCurlRequestResult(url, params,isPost = 0,https = 0,$isJson = 0)

{

$httpInfo = array();

$ch = curl_init();

curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);

curl_setopt($ch, CURLOPT_USERAGENT,

'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36');

curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);

curl_setopt($ch, CURLOPT_TIMEOUT, 30);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

if ($https) {

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 对认证证书来源的检查

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // 从证书中检查SSL加密算法是否存在

}

if ($isPost) {

curl_setopt($ch, CURLOPT_POST, true);

curl_setopt(ch, CURLOPT_POSTFIELDS, params);

curl_setopt(ch, CURLOPT_URL, url);

} else {

if ($params) {

if (is_array($params)) {

params = http_build_query(params);

}

curl_setopt(ch, CURLOPT_URL, url . '?' . $params);

} else {

curl_setopt(ch, CURLOPT_URL, url);

}

}

if ($isJson) {

curl_setopt($ch, CURLOPT_HEADER, 0);

curl_setopt($ch, CURLOPT_HTTPHEADER, array(

'Content-Type: application/x-www-form-urlencoded; charset=utf-8',

"Accept: application/x-www-form-urlencoded",

'Cache-Control: no-cache',

'Pragma: no-cache'

));

}

response = curl_exec(ch);

if ($response === false) {

return false;

}

httpCode = curl_getinfo(ch, CURLINFO_HTTP_CODE);

httpInfo = array_merge(httpInfo, curl_getinfo($ch));

curl_close($ch);

return $response;

}

相关推荐
крон3 小时前
【Auto.js例程】华为备忘录导出到其他手机
开发语言·javascript·智能手机
zh_xuan3 小时前
c++ 单例模式
开发语言·c++·单例模式
rorg4 小时前
使用 Laravel 中的自定义存根简化工作
php·laravel
老胖闲聊4 小时前
Python Copilot【代码辅助工具】 简介
开发语言·python·copilot
Blossom.1184 小时前
使用Python和Scikit-Learn实现机器学习模型调优
开发语言·人工智能·python·深度学习·目标检测·机器学习·scikit-learn
曹勖之4 小时前
基于ROS2,撰写python脚本,根据给定的舵-桨动力学模型实现动力学更新
开发语言·python·机器人·ros2
豆沙沙包?5 小时前
2025年- H77-Lc185--45.跳跃游戏II(贪心)--Java版
java·开发语言·游戏
军训猫猫头5 小时前
96.如何使用C#实现串口发送? C#例子
开发语言·c#
liuyang-neu5 小时前
java内存模型JMM
java·开发语言
我很好我还能学7 小时前
【面试篇 9】c++生成可执行文件的四个步骤、悬挂指针、define和const区别、c++定义和声明、将引用作为返回值的好处、类的四个缺省函数
开发语言·c++