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;

}

相关推荐
明月看潮生1 小时前
编程与数学 02-017 Python 面向对象编程 23课题、测试面向对象的程序
开发语言·python·青少年编程·面向对象·编程与数学
TPBoreas1 小时前
架构设计模式七大原则
java·开发语言
暴走十八步1 小时前
配置windows下apache+PHP环境
windows·php·apache
nightunderblackcat2 小时前
新手向:Python开发简易股票价格追踪器
开发语言·python
熙客2 小时前
Java:LinkedList的使用
java·开发语言
大飞pkz3 小时前
【Lua】题目小练12
开发语言·lua·题目小练
赵得C4 小时前
Java 多线程环境下的全局变量缓存实践指南
java·开发语言·后端·spring·缓存
nightunderblackcat4 小时前
新手向:Python编写简易翻译工具
开发语言·python
EndingCoder5 小时前
Electron 简介:Node.js 桌面开发的起点
开发语言·前端·javascript·electron·node.js·桌面端