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时,获取不到数据

PHP使用curl的问题?

php curl_init

Linux服务器PHP环境Curl模块详细配置,开启SSL和HTTPS支持

lamp php的ssl,ssh支持

sso单点登录的原理详解,及Shiro同时支持Session和JWT Token两种认证方式,和Session和JWT整合方案