PHP开发PayPal REST API支付时如何实现数组间赋值
PHP数组跨字段赋值实现方法
核心问题说明
PHP在单次数组字面量定义的过程中,无法直接通过字符串别名引用同数组内其他位置的元素,你代码中写的"amount" => "amountObject"、"address" => "payer['address']"只会被解析为普通字符串赋值,不会自动读取对应位置的数组内容。
另外注意:PayPal Orders v2 接口要求purchase_units为索引数组结构,你原代码中自定义的object键不属于API标准参数,正式发起请求时需要移除,避免触发参数校验错误。
推荐实现方式(提前抽离复用片段)
先把需要复用的地址、金额数组单独定义,再组装最终请求数组,结构清晰易维护,是最常用的写法:
// 提前定义可复用的公共片段 $payerAddress = [ "address_line_1" => "Test", "admin_area_2" => "Test", "postal_code" => "111", "admin_area_1" => "Test", "country_code" => "GB" ]; $amount = [ "currency_code" => "EUR", "value" => $this->orderPrice ]; // 组装符合PayPal API规范的请求参数 $data = [ 'payer' => [ "address" => $payerAddress ], 'purchase_units' => [ [ "amount" => $amount, "shipping" => [ "address" => $payerAddress ] ] ], 'intent' => 'CAPTURE' ];
如果你确实需要在数组中保留amountObject冗余字段、保留object自定义键,直接对应加回即可。
第二种实现方式(定义后补赋值)
如果不想提前抽离变量,也可以先定义完数组的基础结构,等数组初始化完成后,再通过键名路径给对应字段赋值:
$data = [ 'payer' => [ "address" => [ "address_line_1" => "Test", "admin_area_2" => "Test", "postal_code" => "111", "admin_area_1" => "Test", "country_code" => "GB" ] ], 'amountObject' => [ "currency_code" => "EUR", "value" => $this->orderPrice ], 'purchase_units' => [ "object" => [ "amount" => null ], "shipping" => [ "address" => null ] ], 'intent' => 'CAPTURE' ]; // 数组初始化完成后再做跨字段赋值 $data['purchase_units']['object']['amount'] = $data['amountObject']; $data['purchase_units']['shipping']['address'] = $data['payer']['address'];
注意:PHP中数组赋值默认是值拷贝,如果你需要修改后续
amount或地址字段时所有引用位置同步生效,可以在赋值时加&用引用传递,普通API请求场景用默认值拷贝即可。
内容的提问来源于stack exchange,提问作者antibanbanclub
相关产品推荐
相关产品推荐

