我正在为支付网关开发一个模块,可以通过两个不同的步骤进行授权和捕获。到目前为止,我可以通过运行以下代码来授权订单:
class My_Gateway_Model_Method_Cc extends Mage_Payment_Model_Method_Cc
{
protected $_code = 'mycode';
protected $_canSaveCc = true;
protected $_canRefund = true;
protected $_isGateway = true;
protected $_canAuthorize = true;
protected $_canCapture = true;
protected $_canCapturePartial = false;
public function authorize(Varien_Object $payment, $amount){
/* code to call the payment gateway and authorize the charge */
}
public function capture(Varien_Object $payment, $amount){
/* some code to capture the payment */
}
}
问题在于,当我下订单,然后我进入开发票面板时,我收到此消息:
'将创建发票而不与付款网关进行通信
没有选项可以捕获授权付款,也不会在开具发票时调用捕获方法。
答案 0 :(得分:2)
好的,我找到了解决方案:
基本上,Magento默认关闭任何授权交易,并且它允许选项在授权交易开放时捕获发票上的付款。因此,您所要做的就是将事务配置为保持开放状态(未关闭)
所以这就是我所做的:
public function authorize(Varien_Object $payment, $amount)
{
// Leave the transaction opened so it can later be captured in backend
$payment->setIsTransactionClosed(false);
/*
* Place all the code to connect with your gateway here!!!
*
*/
return $this;
}
答案 1 :(得分:0)
您已设置
$_isGateway = true;
所以你还需要设置网关URL
在您的付款模式中,扩展Mage_Payment_Model_Method_Abstract
的付款模式,您需要实施该方法:
function getOrderPlaceRedirectUrl() {
return 'http://www.where.should.we.pay.com/pay';
}
通常,您将用户重定向到站点上的页面,例如/ mymodule / payment / redirect,然后在控制器的操作中处理重定向逻辑。这可以使您的付款模式保持清洁和无状态,同时允许您使用某种类型的"您现在正被转移到网关进行付款"消息。
保存您需要的所有内容,以确定在会话变量中重定向的位置,通常也是Mage::getSingleton('checkout/session')
。
app/code/core/Mage/Paypal/{Model/Standard.php,controllers/StandardController.php}
中查看他们是如何做到的。
答案 2 :(得分:0)
最后查看此blog Magento交易部分。
if($result['status'] == 1){ // on success result from payment gateway
$payment->setTransactionId($result['transaction_id']);
$payment->setIsTransactionClosed(1);
$payment->setTransactionAdditionalInfo(Mage_Sales_Model_Order_Payment_Transaction::RAW_DETAILS, array('key1'=>'value1','key2'=>'value2'));
}