PHP封装cURL方法,同时支持JWT认证SSL证书认证
Posted SuperAvalon
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP封装cURL方法,同时支持JWT认证SSL证书认证相关的知识,希望对你有一定的参考价值。
工欲善其事,必先利其器
封装一个规范、多用、满足各种场景的cURL请求方法,不仅可以提高研发效率,而且保障项目代码质量、便于维护。
<?php
/**
* cURL请求方法
*
* @param string $url 目标地址
* @param string $sData post数据
* @param string $second 最大请求时间
* @param string $aHeader Header头
* @param string $aCertfile cert file path
* @return array 返回网页内容
*/
function curl_post_ssl($url, $sData, $second = 30, $aHeader = [], $aCertfile = [])
$ch = curl_init();
curl_setopt($ch, CURLOPT_TIMEOUT, $second);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
if( isset($aCertfile['cert']) )
curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'PEM');
curl_setopt($ch, CURLOPT_SSLCERT, $aCertfile['cert']);
if( isset($aCertfile['key']) )
curl_setopt($ch, CURLOPT_SSLKEYTYPE, 'PEM');
curl_setopt($ch, CURLOPT_SSLKEY, $aCertfile['key']);
if( count($aHeader) >= 1 )
curl_setopt($ch, CURLOPT_HTTPHEADER, $aHeader);
if( $sData )
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $sData);
$data = curl_exec($ch);
if ($data)
curl_close($ch);
return $data;
else
$error = curl_errno($ch);
curl_close($ch);
return false;
//POST 数据
$apiParams = [
//...
];
//目标地址
$sGateway = "https://openapi.alipay.com/gateway.do";
//您获取的accessToken
$accessToken = "xxxx";
//Example 1:请求accessToken认证的网关接口
$sResponse = curl_post_ssl( $sGateway, http_build_query($apiParams), 30, ["Authorization: bearer $accessToken"] );
//目标地址
$sGateway = "https://api.mch.weixin.qq.com/secapi/pay/refund";
$certFile = [
'cert' => "./wechat/apiclient_cert.pem",
'key' => "./wechat/apiclient_key.pem"
];
//Example 2:请求带SSL证书认证的网关接口
$sResponse = curl_post_ssl($sGateway, $apiParams, 6, [], $certFile);
以上是关于PHP封装cURL方法,同时支持JWT认证SSL证书认证的主要内容,如果未能解决你的问题,请参考以下文章
php用curl时,HTTP链接正常,HTTPS时,获取不到数据
Linux服务器PHP环境Curl模块详细配置,开启SSL和HTTPS支持
sso单点登录的原理详解,及Shiro同时支持Session和JWT Token两种认证方式,和Session和JWT整合方案