Magento 中的交易 ID 和支付对象
Posted
技术标签:
【中文标题】Magento 中的交易 ID 和支付对象【英文标题】:transaction ID and payment object in Magento 【发布时间】:2013-01-09 14:55:51 【问题描述】:我的问题可能看起来很流行,但我面临着困难..
部分功能代码是
public function capture(Varien_Object $payment, $amount)
if(!$this->isEnabled())
return parent::capture($payment, $amount);
else
---- MORE CODE--
$quote = Mage::getSingleton('customer/session');
$nickname = $quote->getAuthorizenetNickname();
$profile = $quote->getProfile();
$postedNickname = $quote->getNickname();
if ($payment->getCcTransId())
$payment->setAnetTransType(self::REQUEST_TYPE_PRIOR_AUTH_CAPTURE);
else
$payment->setAnetTransType(self::REQUEST_TYPE_AUTH_CAPTURE);
$payment->setAmount($amount);
$request= $this->_buildRequest($payment);
$result = $this->_postRequest($request);
MORE CODE HERE, NOT RELEVENT TO MY ISSUE
这里有两个问题
我如何将交易 ID 传入
$payment->setAmount($amount);
$request= $this->_buildRequest($payment);
$result = $this->_postRequest($request);
第二个问题是
如何回显/调试正在传递的 transactionID 的值
对你来说可能很容易,但我失败了
目前尝试过
$payment->setTransID($payment->gerOrder->getTransID());
and
$payment->gerOrder->getTransID()
$payment->setAmount($amount);
$request= $this->_buildRequest($payment);
感谢您的帮助和指导
【问题讨论】:
哪个类包含函数 _buildRequest,您希望该函数对事务 id 做什么? rakeshjesadiya.com/load-transaction-data-by-id-magento-2加载交易数据 【参考方案1】:我之前遇到过这个问题,这是我的发现:)
Payment 与 Transaction 完全不同,尽管它们有关系。
Payment 对象包含有关订单总额的完整信息(折扣、总计、取消、运输等...)
交易仅包含与 if 相关的信息,例如来自支付网关(txn_id
,parent_txn_id
- 如果它有父交易 - 等...),因此它与支付多少/剩余多少无关/取消/运送了多少等等。
$order->getPayment();
)
Create Transaction Object 将其分配给该 paymentID 和 order ID 等。然后保存它
将last_trans_id
分配给支付对象并保存!
然后保存带有该付款对象的订单或保存已分配给该订单的付款对象。
希望对你有帮助:)
请找到我为将交易添加到付款中所做的付款集成示例的代码
/**
* Creates Transactions for directlink activities
*
* @param Mage_Sales_Model_Order $order
* @param int $transactionID - persistent transaction id
* @param int $subPayID - identifier for each transaction
* @param array $arrInformation - add dynamic data
* @param string $typename - name for the transaction exp.: refund
* @param string $comment - order comment
*
* @return Cashu_Helper_DirectLink $this
*/
public function directLinkTransact($order,$transactionID, $subPayID,
$arrInformation = array(), $typename, $comment, $closed = 0)
$payment = $order->getPayment();
$payment->setTransactionId($transactionID."/".$subPayID);
$transaction = $payment->addTransaction($typename, null, false, $comment);
$transaction->setParentTxnId($transactionID);
$transaction->setIsClosed($closed);
$transaction->setAdditionalInformation("arrI nfo", serialize($arrInformation));
$transaction->save();
$order->save();
return $this;
【讨论】:
任何代码行示例,如果可以的话?还是一些伪代码??【参考方案2】:我也在构建 CIM 支付模块。所以我确切地知道你正在经历什么(我想我快要完成了,但在过去的 3 周里我一直在说)
从您上面的代码看来,您正在尝试执行PRIOR_AUTH_CAPTURE
,这意味着您应该在执行AUTH_ONLY
交易时存储交易ID。
看看
/app/code/core/Mage/Paygate/Model/Authorizenet.php
设置事务 ID 的代码 (PRIOR_AUTH_CAPTURE
)
protected function _preauthorizeCaptureCardTransaction($payment, $amount, $card)
$authTransactionId = $card->getLastTransId();
$authTransaction = $payment->getTransaction($authTransactionId);
$realAuthTransactionId = $authTransaction->getAdditionalInformation($this->_realTransactionIdKey);
$payment->setAnetTransType(self::REQUEST_TYPE_PRIOR_AUTH_CAPTURE);
$payment->setXTransId($realAuthTransactionId);
保存交易 ID 的代码 (AUTH_ONLY
)
protected function _place($payment, $amount, $requestType)
....
switch ($result->getResponseCode())
case self::RESPONSE_CODE_APPROVED:
$this->getCardsStorage($payment)->flushCards();
$card = $this->_registerCard($result, $payment); //<-- take a look at
.....
$this->_addTransaction(
$payment,
$card->getLastTransId(),
$newTransactionType,
array('is_transaction_closed' => 0),
array(
$this->_realTransactionIdKey => $card->getLastTransId(), //<-- take a look at
$this->_isTransactionFraud => true
),
更新
$payment->setAmount($amount);
$payment->setXTransId(put your transaction id here);
$payment->setAnetTransType($requestType);
$request= $this->_buildRequest($payment);
$result = $this->_postRequest($request);
然后在构建您的请求时
protected function _buildRequest(Varien_Object $payment)
....
switch ($payment->getAnetTransType())
.....
case self::REQUEST_TYPE_PRIOR_AUTH_CAPTURE: //<-- for all the request that need Transaction id
$request->setXTransId($payment->getXTransId());
break;
【讨论】:
你让我离哥们很近,但我的问题不是如何保存交易 ID,我已经成功了,我的问题是,我无法通过它 PRIOR_AUT_CAPTURE 交易.. . 你看到了这个***.com/questions/14328475/auth-net-issue-on-capture?以上是关于Magento 中的交易 ID 和支付对象的主要内容,如果未能解决你的问题,请参考以下文章