首页 > 解决方案 > PHP Curl POST 请求不起作用,但在 POSTMAN 中工作正常

问题描述

从 sub pos 系统向主系统发送发票详细信息。Web 浏览器中的任何响应都没有错误。从https://example.com发送的请求。但是相同的代码在邮递员中工作正常。邮递员给出成功响应。

在邮递员中工作正常

php中的代码

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'urlhere',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
    "key":"asdasdsad", 
    "shopId":99999, 
    "SHOP_ID": "DUF SHOP", 
    "SHOP_NAME": "DUFF SUB", 
    "INVOICE_NUMBER": "26/111", 
    "TRANSACTION_DATE": "2020-08-25 7:31:20", 
    "TRANSACTION_TIME": "7:31:20",
    "TOTAL_AMOUNT_BEFORE_DISCOUNT": 150.00, 
    "DISCOUNT_AMOUNT": 50.00, 
    "DISCOUNT_TYPE": "NO",
    "TOTAL_AMOUNT_AFTER_DISCOUNT": 100.00, 
    "productDetails":[
        { 
        "INVOICE_NUMBER":"5210/D",
        "PRODUCT_NAME": "PRODUCT", 
        "PRODUCT_CATEGORY": "cat", 
        "PRODUCT_SUB_CATEGORY": "subCat",
        "BRAND_NAME": "Brand", 
        "QUANTITY":100, 
        "UNIT_PRICE": 250.00
        }],
    "currencyDetail":[
        {
        "INVOICE_NUMBER":"1",
        "PAYMENT_METHOD": "CASH",
        "CURRENCY": "USD", 
        "ACTUAL_PAYMENT_CURRENCY_TYPE":"USD",
        "amount":250.00       
        }
        ]
   }
   ',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: text/plain'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;
?>

标签: phpjsonapicurlpostman

解决方案


我有时会使用这个网站https://incarnate.github.io/curl-to-php/ 。否则你可以切换到 json 也许。这个例子对我有用。

    $handle = curl_init();
    curl_setopt($handle, CURLOPT_URL, $url);
    curl_setopt($handle, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($handle, CURLOPT_POST, 1);
    curl_setopt($handle, CURLOPT_POSTFIELDS, "{\"text\": \"$newText\" , \"model_id\":\"en-fr\"}");
    curl_setopt($handle, CURLOPT_USERPWD, 'apikey' . ':' . $_ENV['API_KEY_TRANSLATE']);

    $headers[] = 'Content-Type: application/json';
    curl_setopt($handle, CURLOPT_HTTPHEADER, $headers);

    $response = curl_exec($handle);
    $responseDecoded = json_decode($response, true);
    $responseCode = curl_getinfo($handle, CURLINFO_HTTP_CODE);      
    curl_close($handle);

推荐阅读