【问题标题】:Return an array into payload将数组返回到有效负载中
【发布时间】:2022-11-19 20:07:13
【问题描述】:

我需要有序地发送我的购物车内容。

我可以按如下方式获取我的订单:

 foreach ($jcart->get_contents() as $item) {
                
            $queryString .= 'name'  . $count.  '=' . urlencode($item['name']);
            $queryString .= 'unit_price'  . $count . '=' . urlencode($item['price']);
            $queryString .= 'quantity' . $count . '=' . urlencode($item['qty']);
      $queryString .= 'total_amount' . $count . '=' . (urlencode($item['qty']) * urlencode($item['price']));
            // Increment the counter
        ++$count;   
        }  

我想按如下方式发送:

        $data = <<<DATA
        {
        "intent": "buy",
          "purchase_country": "GB",
          "purchase_currency": "GBP",
          "locale": "en-GB",
          "order_amount": 10,
          "order_tax_amount": 0,
            "order_lines": [
{
            "name": "name0",
            "quantity": quantity0,
            "unit_price": unit_price0,
            "total_amount": total_amount0
          },
    {
            "name": "name1",
            "quantity": quantity1,
            "unit_price": unit_price1,
            "total_amount": total_amount1
          }]
          
          
        }
        DATA;

我怎样才能让我的每个循环来填充订单。所以他们可以像上面的例子一样发送

我试过了:

 $data = <<<DATA
    {
    "intent": "buy",
      "purchase_country": "GB",
      "purchase_currency": "GBP",
      "locale": "en-GB",
      "order_amount": 10,
      "order_tax_amount": 0,
        "order_lines": [$queryString]
      
      
    }
    DATA;

这需要按如下方式发送:

$url = "https://api.playground.klarna.com/payments/v1/sessions";
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$headers = array(
   "Authorization: Basic $auth",
   "Content-Type: application/json",
);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
//for debug only!
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
$resp = curl_exec($curl);
curl_close($curl);

这不起作用 欢迎任何帮助

【问题讨论】:

  • 使用正确的结构创建数组并使用 json_encode() 而不是尝试自己制作 JSON 字符串。

标签: php arrays curl


【解决方案1】:

使用正确的结构创建数组并使用 json_encode() 而不是尝试自己制作 JSON 字符串。

// create data structure
$payload = [
    'intent'           => 'buy',
    'purchase_country' => 'GB',
    // ...
    'order_lines'      => [],
];

// Populate order-lines
foreach ($jcart->get_contents() as $item) {
    $payload['order_lines'][] = [
        'name'         => $item['name'],
        'unit_price'   => $item['price'],
        'quantity'     => $item['qty'],
        'total_amount' => $item['qty'] * $item['price'],
    ];
}

并使用:

curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($payload));

【讨论】:

  • 非常感谢你太棒了
【解决方案2】:

首先,您应该将数据填充到数组而不是字符串中。

$queryArray[] = [
    'name' => $item['name'],
    'quantity' => ...
]

接下来用 json 对数组进行编码。

$json = json_encode($queryArray);

最后将编码后的字符串插入到有效载荷中。

$data = <<<DATA
{
  "intent": "buy",
  "purchase_country": "GB",
  "purchase_currency": "GBP",
  "locale": "en-GB",
  "order_amount": 10,
  "order_tax_amount": 0,
  "order_lines": $json
}
DATA;

【讨论】:

    猜你喜欢
    • 2019-12-13
    • 1970-01-01
    • 1970-01-01
    • 2018-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-09
    相关资源
    最近更新 更多