我可以按照github上的示例使用事务API成功收费。执行收费如下:
$result = $transaction_api->charge($access_token, $location_id, $request_body);
echo "<pre>";
print_r($result);
echo "</pre>";
这是输出:
SquareConnect\Model\ChargeResponse Object
(
[errors:protected] =>
[transaction:protected] => SquareConnect\Model\Transaction Object
(
[id:protected] => REMOVED FROM POST
[location_id:protected] => REMOVED FROM POST
[created_at:protected] => 2016-04-30T23:42:33Z
[tenders:protected] => Array
(
[0] => SquareConnect\Model\Tender Object
(
[id:protected] => REMOVED FROM POST
[location_id:protected] => REMOVED FROM POST
[transaction_id:protected] => 02d1d965-51fd-5023-68f5-0fcd148a263b
[created_at:protected] => 2016-04-30T23:42:33Z
[note:protected] => Online Transaction
[amount_money:protected] => SquareConnect\Model\Money Object
(
[amount:protected] => 6000
[currency:protected] => USD
)
[processing_fee_money:protected] =>
[customer_id:protected] =>
[type:protected] => CARD
[card_details:protected] => SquareConnect\Model\TenderCardDetails Object
(
[status:protected] => CAPTURED
[card:protected] => SquareConnect\Model\Card Object
(
[id:protected] =>
[card_brand:protected] => VISA
[last_4:protected] => 5858
[exp_month:protected] =>
[exp_year:protected] =>
[cardholder_name:protected] =>
[billing_address:protected] =>
)
[entry_method:protected] => KEYED
)
[cash_details:protected] =>
)
)
[refunds:protected] =>
[reference_id:protected] =>
[product:protected] => EXTERNAL_API
)
)
我的问题是,虽然有些地方(例如here)表示我应该从充电方法中取回一个数组,但我得到一个ChargeResponse对象。
在此对象中是一个事务对象,其中包含我希望在事务完成后显示给客户的所有相关信息,但它受到保护,因此尝试回显事务id,created_at时间或此数量返回的对象失败。
我确定我做错了什么,但是我迷失了如何从ChargeResponse对象中捕获属性,以便我可以用它做有用的事情。
例如,我试过
echo($result->transaction['id']);
但我得到的只是:
致命错误:无法访问受保护的属性
这甚至可能不是尝试这样的事情的正确方法,所以我完全愿意接受建议。
答案 0 :(得分:8)
我设法弄清楚必须使用对象中包含的getTransaction方法来获取可用的属性形式。
$transaction = $result->getTransaction();
然后你可以获得你想要的房产:
$transactionID = $transaction["tenders"][0]["transaction_id"];
我非常恼火,我在文档中的任何地方都没有遇到过这种情况(事实上,对整个docs.connect.squareup.com的谷歌搜索并没有出现一个参考文献to getTransaction)。当我尝试使用其他一些黑客工作将原始ChargeResponse对象重新解析为数组时,我不得不偶然发现它。
无论如何,很高兴这个问题得到了解决。想把这个留给别人。
答案 1 :(得分:1)
这样可行。
private void centerMap(ArrayList<GeoPoint> waypoints) {
BoundingBox bb = BoundingBox.fromGeoPoints(waypoints);
mapView.zoomToBoundingBox(bb);
}
答案 2 :(得分:1)
如果有人在寻找带有Square的代码,那么他们会使用v2 API,而不是使用此API:
$payments_api = new \SquareConnect\Api\PaymentsApi($api_client);
$result = $payments_api->createPayment($request_body);
echo '<br/>';
// to get ID.
print_r( $result->getPayment()->getId() );
echo '<br/>';
// to get Reference ID.
print_r( $result->getPayment()->getReferenceId() );
echo '<br/>';
// to get Amount.
print_r( $result->getPayment()->getAmountMoney()->getAmount() );
echo '<br/>';
// to get Currency.
print_r( $result->getPayment()->getAmountMoney()->getCurrency() );
echo '<br/>';
// to get CreatedAt datetime.
print_r( $result->getPayment()->getCreatedAt() );
答案 3 :(得分:0)
我来到这里时遇到了同样的问题,然后我感到非常兴奋。
这里没有找到所有的函数调用,而是找到所有函数的方法。
只需查看您在解决方案中实现的正方形库文件。 在这种情况下,可以在“模型”文件夹中找到“ Transaction.php”。
冲洗并重复所有其他对象(即:Tenders.php)。
我希望这可以为某些人节省时间,因为我在弄清楚之前浪费了太多。
'id' => 'getId',
'location_id' => 'getLocationId',
'created_at' => 'getCreatedAt',
'tenders' => 'getTenders',
'refunds' => 'getRefunds',
'reference_id' => 'getReferenceId',
'product' => 'getProduct',
'client_id' => 'getClientId',
'shipping_address' => 'getShippingAddress',
'order_id' => 'getOrderId'
答案 4 :(得分:0)
如果通过作曲家安装Square Connect,则可以使用其预定义功能。 $ data保留交易请求
$body = new \SquareConnect\Model\ChargeRequest($data);
$transaction = $transactions_api->charge($location_id, $body);
$transactionId = $transaction->getTransaction()->getId();
现在,您将在$ transactionId变量中具有交易ID。
答案 5 :(得分:0)
$result = $payments_api->createPayment($request_body);
print_r($result->getPayment()->getStatus());
print_r( $result->getPayment()->getId() );
print_r( $result->getPayment()->getReferenceId() );
print_r( $result->getPayment()->getAmountMoney()->getAmount() );
print_r( $result->getPayment()->getAmountMoney()->getCurrency() );
print_r( $result->getPayment()->getCreatedAt() );