如何正确初始化 PHP 数组以满足 Stripe payment line_items 语法

问题描述 投票:0回答:1

在 Javascript 中,我构建了一个字符串来模仿 Stripe payment line_items 的结构(可能有 1 到 4 个项目)。然后,我将该字符串传递到 checkout.php 文件(作为 URL 参数),在其中设置 Stripe\Checkout\Session。为了使用传入的“实时”购买(名称和单位金额),我根据传入的字符串创建数组,并将其用作 Stripe 调用中的“line_items”值。我有一个测试数组($zarray),我设置它来模拟来自 javascript 的预期购买。当我在参数列表中使用 $zarray 时,一切都很好,托管付款表单出现,生活一切顺利。当我使用传入的字符串创建新数组 $xarray ($xarray=array($purchaseData['purchased'])) 时,我预计它会被 Stripe 参数验证接受,但它失败了(“此页面是不工作”以及“无效对象”通知)。因此,我通过使用 print_r() 打印这两个 PHP 数组来比较它们,并惊讶地发现它们有多么不同。预制数组 $zarray 是从相同格式的文本字符串构建的,但 print_r() 的输出肯定不同。我的问题是:如何正确形成/使用文本初始化字符串传递给 PHP,以便 PHP 中的 line_items 值忠实地模仿使用整个内联描述时会得到的结果?

我期待我的动态数组能够通过审核并被 Stripe API 接受(但事实并非如此)。正如我所描述的,我构建了可以工作的服务器端测试数组,但是我导入的初始化数据产生了错误。我包括 PHP 代码以及 $xarray 和 $zarray 之间的比较 - 差异是显而易见的。我意识到有不同的语法选项,我只是不清楚如何正确形成传入文本以通过 Stripe 验证。

<?php

require_once  "vendor/autoload.php";
require __DIR__ . "/config.php";

\Stripe\Stripe::setApiKey(STRIPE_KEY);
    $zarray=array([ [ "quantity" => 1, "price_data" => [ "currency" => "usd", "unit_amount" => 15000,"product_data" => [ "name" => "small child jumping over waves in ocean" ] ] ], [ "quantity" => 1, "price_data" => [ "currency" => "usd", "unit_amount" => 18500,"product_data" => [ "name" => "collage of flowers on green grass" ] ] ], [ "quantity" => 1, "price_data" => [ "currency" => "usd", "unit_amount" => 20000,"product_data" => [ "name" => "collage of Lincoln Monument" ] ] ], [ "quantity" => 1, "price_data" => [ "currency" => "usd", "unit_amount" => 25000,"product_data" => [ "name" => "collage of Martin Luther King Monument with quote" ] ] ] ]);

$query_string = $_SERVER['QUERY_STRING'];
parse_str($query_string,$purchaseData);
$xarray=array($purchaseData['purchased']);

# this is my debug output that made me realize format of the two "identical" array just weren't the same.
echo "array from checkout page";
print_r($xarray);
echo "Local Array ". PHP_EOL;
print_r($zarray);

$checkout_session = \Stripe\Checkout\Session::create([
    "mode" => "payment",
    "success_url" => "success.php",
    "cancel_url" => "checkout.htm",
    "locale" => "auto",
    "phone_number_collection" => ['enabled' => 'true'],
    "shipping_address_collection" => [ 'allowed_countries' => ['US','CA']],
    "line_items"=>$xarray << using $xarry fails, using $zarray works
    ]);

http_response_code(303);
error_log($checkout_session->url);
header("Location: " . $checkout_session->url);

这是 PHP print_r() 的输出的两个文件 在此输入图片描述


请求两个不同数组的 var_export:

这是 $xarray var_export 大批 ( 0 => '[ [ "数量" => 1, "价格数据" => [ "货币" => "美元", "单位金额" => 15000,"产品数据" => [ "名称" => "小孩子跳海洋中的波浪" ] ] ], [ "数量" => 1, "price_data" => [ "currency" => "usd", "unit_amount" => 18500,"product_data" => [ "name" => "绿草上的花朵拼贴" ] ] ], [ "数量" => 1, "price_data" => [ "currency" => "usd", "unit_amount" => 20000,"product_data" => [ "name " => "林肯纪念碑拼贴画" ] ] ], [ "数量" => 1, "price_data" => [ "currency" => "usd", "unit_amount" => 25000,"product_data" => [ " name" => "马丁·路德·金纪念碑拼贴画并引用" ] ] ] ]', )

这是 $zarray var_export 大批 ( 0 => 大批 ( 0 => 大批 ( '数量' => 1, '价格数据' => 大批 ( '货币' => '美元', '单位金额' => 15000, '产品数据' => 大批 ( 'name' => '小孩子跳过海洋中的波浪', ), ), ), 1 => 大批 ( '数量' => 1, '价格数据' => 大批 ( '货币' => '美元', '单位金额' => 18500, '产品数据' => 大批 ( 'name' => '绿草上的花朵拼贴画', ), ), ), 2 => 大批 ( '数量' => 1, '价格数据' => 大批 ( '货币' => '美元', '单位金额' => 20000, '产品数据' => 大批 ( 'name' => '林肯纪念碑拼贴画', ), ), ), 3 => 大批 ( '数量' => 1, '价格数据' => 大批 ( '货币' => '美元', '单位金额' => 25000, '产品数据' => 大批 ( 'name' => '马丁路德金纪念碑的拼贴画与报价', ), ), ), ), )

php arrays stripe-payments
1个回答
0
投票

由于我确实需要让它发挥作用,所以我改变了我的方法。我没有在 javascript 中精心编写初始化字符串,将其发送到 PHP 页面并期望使用该字符串作为数组初始化,而是只是传递了 line_item 详细信息(价格、数量、名称等)并在 PHP 函数中解析它:实际上构建本机 line_items 数组。它有效,一切都很好。我学到了什么?使用目标(在本例中为 PHP)环境来完成繁重的工作,只需从 javascript 传递变量数据

© www.soinside.com 2019 - 2024. All rights reserved.