某些客户为了安全 不对外完全开放域名 但支付回调需要外网可以访问 可以在不完全开放的情况下 仅开放一个端口 Nginx里配置下端口 开放端口指向的目录下新建个转发文件 文件名和原回调文件名相同即可 回调url用这个开放的端口的 下面这个是为某个客户解决这个情况时做的 客户仅使用支付宝 支付可以实现成功回调
<?php
error_log(date("c") . "\t" . 'curl请求:' . "\t" . var_export(array($_SERVER, $_GET, $_POST), 1) . "\n", 3, 'logs/curl_'.date('Y-m-d').'.log');
$domain = 'http://'.$_SERVER['SERVER_NAME'];
$uri = $_SERVER["REQUEST_URI"];
$method = $_SERVER["REQUEST_METHOD"];
$data = file_get_contents('php://input');
// echo("<pre>");print_r(array($domain.$uri, $method, $data, $headers));exit();
error_log(date("c") . "\t" . 'curl请求:' . "\t" . print_r(array($domain.$uri, $method, $data), 1) . "\n", 3, 'logs/curl_'.date('Y-m-d').'.log');
$response = curl_request($domain.$uri, $method, $data);
echo($response);
/**
* CURL Request
*/
function curl_request($api, $method = 'GET', $params = array(), $headers = [])
{
$curl = curl_init();
switch (strtoupper($method)) {
case 'GET':
if (!empty($params)) {
$api .= (strpos($api, '?') ? '&' : '?') . http_build_query($params);
}
curl_setopt($curl, CURLOPT_HTTPGET, true);
break;
case 'POST':
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $params);
break;
case 'PUT':
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($curl, CURLOPT_POSTFIELDS, $params);
break;
case 'DELETE':
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'DELETE');
curl_setopt($curl, CURLOPT_POSTFIELDS, $params);
break;
}
curl_setopt($curl, CURLOPT_URL, $api);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($curl);
if ($response === false) {
$error = curl_error($curl);
error_log(date("c")."\t".'curl请求失败' . json_encode($error)."\n", 3, 'logs/curl_error_'.date('Y-m-d').'.log');
curl_close($curl);
return false;
}
curl_close($curl);
return $response;
}