首页 > 解决方案 > 如何在 PHP 中创建与此 HTML 表单完全相同的脚本?

问题描述

我正在尝试创建一个与下面的 HTML 表单相同的 PHP 脚本。

最终目标是我可以使用 PHP 脚本自动化表单。现在,我们必须手动填写表格。一开始没问题,但现在我们每个月都必须填写太多次表格。

下面的表格有效(如果我填写了正确的商家和票)。但不知何故,我无法创建一个可以做同样事情的 PHP 脚本。


<form method="post" action="https://payment.architrade.com/cgi-ssl/ticket_auth.cgi" accept-charset="ISO-8859-1">
    <input type="hidden" name="amount" value="100">
    <input type="hidden" name="currency" value="DKK">
    <input type="hidden" name="merchant" value="INSERT_YOUR_MERCHANT_ID">
    <input type="hidden" name="orderid" value="Order_ID-123">
    <input type="hidden" name="textreply" value="true">
    <input type="hidden" name="ticket" value="1234567890">
</form>

这是我尝试过的代码(我知道 URL 是错误的,但我使用的是回显服务,所以我可以看到响应):

$postData = array(
    'amount' => '100',
    'currency' => 'DKK',
    'merchant' => 'INSERT_YOUR_MERCHANT_ID',
    'orderId' => 'Order_ID-123',
    'textreply' => 'true',
    'ticket' => '1234567890'
    );

// Setup cURL
$ch = curl_init('https://postman-echo.com/post');
curl_setopt_array($ch, array(
    CURLOPT_POST => TRUE,
    CURLOPT_RETURNTRANSFER => TRUE,
    CURLOPT_HTTPHEADER => array(
        'content-type: application/x-www-form-data'
    ),
    CURLOPT_POSTFIELDS => json_encode($postData)
));

// Send the request
$response = curl_exec($ch);

echo "<br>";
echo 'Response: '. $response;
echo "<br>";

如果您想了解更多有关 API 的信息,可以在此处找到一些信息: https ://tech.dibspayment.com/D2/API/Payment_functions/ticketauthcgi

有人可以告诉我我做错了什么吗?

请让我知道,如果你有任何问题

一位用户 (aponte_alex) 要求我提供更多调试信息,所以这里是:

Array ( [url] => https://postman-echo.com/post [content_type] => [http_code] => 0 [header_size] => 0 [request_size] => 0 [filetime] => -1 [ssl_verify_result] => 0 [redirect_count] => 0 [total_time] => 0 [namelookup_time] => 0 [connect_time] => 0 [pretransfer_time] => 0 [size_upload] => 0 [size_download] => 0 [speed_download] => 0 [speed_upload] => 0 [download_content_length] => -1 [upload_content_length] => -1 [starttransfer_time] => 0 [redirect_time] => 0 [redirect_url] => [primary_ip] => [certinfo] => Array ( ) [primary_port] => 0 [local_ip] => [local_port] => 0 [http_version] => 0 [protocol] => 0 [ssl_verifyresult] => 0 [scheme] => )
{"args":{},"data":"","files":{},"form":{},"headers":{"x-forwarded-proto":"https","host":"postman-echo.com","content-length":"0","accept":"*/*","accept-encoding":"gzip","content-type":"application/x-www-form-urlencoded","user-agent":"php","x-forwarded-port":"443"},"json":null,"url":"https://postman-echo.com/post"}

如果我添加 json_encode($data) 我得到以下数据:

Array ( [url] => https://postman-echo.com/post [content_type] => [http_code] => 0 [header_size] => 0 [request_size] => 0 [filetime] => -1 [ssl_verify_result] => 0 [redirect_count] => 0 [total_time] => 0 [namelookup_time] => 0 [connect_time] => 0 [pretransfer_time] => 0 [size_upload] => 0 [size_download] => 0 [speed_download] => 0 [speed_upload] => 0 [download_content_length] => -1 [upload_content_length] => -1 [starttransfer_time] => 0 [redirect_time] => 0 [redirect_url] => [primary_ip] => [certinfo] => Array ( ) [primary_port] => 0 [local_ip] => [local_port] => 0 [http_version] => 0 [protocol] => 0 [ssl_verifyresult] => 0 [scheme] => )
{"args":{},"data":"","files":{},"form":{"{\"amount\":\"100\",\"currency\":\"DKK\",\"merchant\":\"INSERT_YOUR_MERCHANT_ID\",\"orderId\":\"Order_ID-123\",\"textreply\":\"true\",\"ticket\":\"1234567890\"}":""},"headers":{"x-forwarded-proto":"https","host":"postman-echo.com","content-length":"136","accept":"*/*","accept-encoding":"gzip","content-type":"application/x-www-form-urlencoded","user-agent":"php","x-forwarded-port":"443"},"json":{"{\"amount\":\"100\",\"currency\":\"DKK\",\"merchant\":\"INSERT_YOUR_MERCHANT_ID\",\"orderId\":\"Order_ID-123\",\"textreply\":\"true\",\"ticket\":\"1234567890\"}":""},"url":"https://postman-echo.com/post"}

标签: phphtmlformsapi

解决方案


2019 年 11 月 30 日更新:

请试试:

$data = array(
    'amount' => '100',
    'currency' => 'DKK',
    'merchant' => 'INSERT_YOUR_MERCHANT_ID',
    'orderId' => 'Order_ID-123',
    'textreply' => 'true',
    'ticket' => '1234567890'
    );

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://postman-echo.com/post",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => false,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS =>$data,
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
} 

///////////////////////////////////////// /////////////////////////

要调试 PHP curl,请运行并提供反馈:

$headers = array(
"Content-Type: application/x-www-form-urlencoded"
);

$data = array(
    'amount' => '100',
    'currency' => 'DKK',
    'merchant' => 'INSERT_YOUR_MERCHANT_ID',
    'orderId' => 'Order_ID-123',
    'textreply' => 'true',
    'ticket' => '1234567890'
    );

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"https://postman-echo.com/post");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_TIMEOUT_MS, 1000);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_VERBOSE, TRUE);
curl_setopt($ch, CURLOPT_ENCODING , "gzip");
curl_setopt($ch, CURLOPT_USERAGENT,'php');
curl_setopt($ch, CURLOPT_HTTPHEADER,$headers);
$info = curl_getinfo($ch);
$result = curl_exec($ch);

print_r($info );
echo "</br>"; 
print_r($result );  

推荐阅读