解决方案:每个以:private
结尾的键都有一个__get()
和toJSON()
方法,因为_propMap是私有的,因此需要从它们那里获取数据。
我正在使用PayPal的PHP从PayPal中获取付款,并且在完成支付后获得的数据返回如下
Array
(
[PayPal\Common\PPModel_propMap] => Array
(
[id] => PAY-THEID
[create_time] => 2013-12-03T15:47:15Z
[update_time] => 2013-12-03T15:47:34Z
[state] => approved
[intent] => sale
[payer] => PayPal\Api\Payer Object
(
[_propMap:PayPal\Common\PPModel:private] => Array
(
[payment_method] => paypal
[payer_info] => PayPal\Api\PayerInfo Object
(
[_propMap:PayPal\Common\PPModel:private] => Array
(
[email] => my@email.com
[first_name] => Tom
[last_name] => Hart
[payer_id] => thePayerId
[shipping_address] => PayPal\Api\Address Object
(
[_propMap:PayPal\Common\PPModel:private] => Array
(
[line1] => 1 Main Terrace
[city] => Wolverhampton
[state] => West Midlands
[postal_code] => W12 4LQ
[country_code] => GB
)
)
)
)
)
)
[transactions] => Array
(
[0] => PayPal\Api\Transaction Object
(
[_propMap:PayPal\Common\PPModel:private] => Array
(
[amount] => PayPal\Api\Amount Object
(
[_propMap:PayPal\Common\PPModel:private] => Array
(
[total] => 0.33
[currency] => GBP
[details] => PayPal\Api\Details Object
(
[_propMap:PayPal\Common\PPModel:private] => Array
(
[subtotal] => 0.11
[tax] => 0.11
[shipping] => 0.11
)
)
)
)
[description] => Payment description
[item_list] => PayPal\Api\ItemList Object
(
[_propMap:PayPal\Common\PPModel:private] => Array
(
[items] => Array
(
[0] => PayPal\Api\Item Object
(
[_propMap:PayPal\Common\PPModel:private] => Array
(
[name] => Flowers
[price] => 0.11
[currency] => GBP
[quantity] => 1
)
)
)
)
)
[related_resources] => Array
(
[0] => PayPal\Api\RelatedResources Object
(
[_propMap:PayPal\Common\PPModel:private] => Array
(
[sale] => PayPal\Api\Sale Object
(
[_propMap:PayPal\Common\PPModel:private] => Array
(
[id] => 9L998852HN614082X
[create_time] => 2013-12-03T15:47:15Z
[update_time] => 2013-12-03T15:47:34Z
[state] => completed
[amount] => PayPal\Api\Amount Object
(
[_propMap:PayPal\Common\PPModel:private] => Array
(
[total] => 0.33
[currency] => GBP
)
)
[parent_payment] => PAY-4S184757A49956741KKO72AY
[links] => Array
(
[0] => PayPal\Api\Links Object
(
[_propMap:PayPal\Common\PPModel:private] => Array
(
[href] => https://api.sandbox.paypal.com/v1/payments/sale/9L998852HN614082X
[rel] => self
[method] => GET
)
)
[1] => PayPal\Api\Links Object
(
[_propMap:PayPal\Common\PPModel:private] => Array
(
[href] => https://api.sandbox.paypal.com/v1/payments/sale/abc/refund
[rel] => refund
[method] => POST
)
)
[2] => PayPal\Api\Links Object
(
[_propMap:PayPal\Common\PPModel:private] => Array
(
[href] => https://api.sandbox.paypal.com/v1/payments/payment/PAY-abc
[rel] => parent_payment
[method] => GET
)
)
)
)
)
)
)
)
)
)
)
[links] => Array
(
[0] => PayPal\Api\Links Object
(
[_propMap:PayPal\Common\PPModel:private] => Array
(
[href] => https://api.sandbox.paypal.com/v1/payments/payment/abc
[rel] => self
[method] => GET
)
)
)
)
)
我希望将其中的一部分(shipping_address是其中之一)转换为json对象(使用json_encode/decode()
,并将其存储在我的数据库中,以便在管理部分查看地址,以便知道在哪里发送东西,但是,我不能将其转换为json对象,它只是返回{}
。如何将这些详细信息存储在数据库中以便稍后查看?
编辑:
Json_encode代码
$db['address'] = json_encode((array) $dets->payer->payer_info->shipping_address);
var_dump(json_last_error());
$db['payerId'] = $dets->payer->payer_info->payer_id;
$db['prices'] = json_encode((array) $dets->transations[0]->amount);
var_dump(json_last_error());
$db['description'] = $dets->transations[0]->description;
$db['items'] = json_encode((array) $dets->transations[0]->item_list->items);
var_dump(json_last_error());
$db['links'] = json_encode((array) $dets->related_resources[0]->sale->links);
var_dump(json_last_error());
$db数组的输出是
Array
(
[userId] => 10
[paymentId] => PAY-4VC71851RJ180032AKKPAB3Y
[state] => approved
[address] => {"\u0000PayPal\\Common\\PPModel\u0000_propMap":{"line1":"1 Main Terrace","city":"Wolverhampton","state":"West Midlands","postal_code":"W12 4LQ","country_code":"GB"}}
[payerId] => P77LD9M7MUQN2
[prices] => []
[description] =>
[items] => []
[links] => []
)
所以有些正在被编码,有些没有。
发布于 2014-02-12 16:00:32
这也困扰了我一段时间,我努力寻找一个直截了当的答案。我正在使用当前的PHP,并在示例ExecutePayment.php文件中看到如下所示:
// Execute the payment
// (See bootstrap.php for more on `ApiContext`)
$result = $payment->execute($execution, $apiContext);
echo "<html><body><pre>";
var_dump($result);
echo "</pre><a href='../index.html'>Back</a></body></html>";
如前所述,$result对象对导航没有多大帮助。您不能直接对对象进行编码,因为PayPal正在SDK中自己做一些疯狂的事情。如前所述,解决方案是使用来自PPModal类的PPModal()方法直接将该对象转换为JSON:
$result = $payment->execute($execution, $apiContext);
$array = $result->toJSON();
echo '<pre>';
print_r($array);
echo '</pre>';
我希望有人能更清楚地知道这一点。
发布于 2013-12-03 08:15:28
我认为,有些值“未编码”的问题是,您的一些变量引用是错误的。
例如,您试图对以下内容进行编码:
$dets->transations[0]->amount
但是,我认为你需要从以下几个方面获得这个价值:
$dets->transactions[0]['_propMap:PayPal\Common\PPModel:private']['amount']
对于大多数变量引用,您也有类似的问题。
https://stackoverflow.com/questions/20355757
复制相似问题