我的问题看起来很时髦,但我面临着困难。
部分功能代码是
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);
感谢您的帮助和指导
我以前遇到过这个问题,下面是我的发现:(
付款和交易是完全不同的,尽管它们有关系。
支付对象保存有关订单总额的完整信息(折扣、总额、取消、发货等(
交易只保存与if相关的信息,例如来自支付网关的信息(txn_id
、parent_txn_id
-如果它有父交易,等等(,因此它不包括支付了多少/还剩多少/取消了多少/发货了多少等等。
- 支付与交易有一对多关系(因此您无法将交易Id设置为它(您需要将last_trans_Id设置为支付,或者如果是信用卡交易(一次性(您可以设置并使用此字段cc_trans_Id换句话说,如何将交易分配给付款,您需要执行以下操作:-
- 创建分配给订单的新支付对象并保存您的所有数据等。(或者,如果您从支付网关返回,则加载订单/报价并获得支付对象
$order->getPayment();
( - 创建交易对象,将其分配给付款ID和订单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;
}
我也在构建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;