我在OpenTraart中实现了基于BankTransfer模块的支付模块。 付款网关的要求是使用get请求提交 successurl 和 errorurl 。这些URL用于成功订购和取消订单。
算法:
问题:在付款网关成功付款后,重定向的链接是什么?
方法: 我天真地认为http://example.com/opencart/index.php?route=checkout/success是成功的纽带。它仅显示确认消息,但订单未放入系统中。我知道没有办法给外部链接自动知道要确认哪个订单,所以我应该成功传递加密的唯一值,所以在返回时我可以解密它们并确认订单吗?
文件说明:
testkzm.php是 我写的简单文件测试我从中得到正确的值 系统
banktransfer.php in controller / payment
class ControllerPaymentBankTransfer extends Controller {
protected function index() {
$this->language->load('payment/bank_transfer');
$this->data['text_instruction'] = $this->language->get('text_instruction');
$this->data['text_description'] = $this->language->get('text_description');
$this->data['text_payment'] = $this->language->get('text_payment');
//Modified things for KZM
$order_info = $this->model_checkout_order->getOrder($this->session->data['order_id']);
$this->data['orderIdKZM'] = $this->session->data['order_id'];
$this->data['amountKZM'] = $order_info['total'];
$this->data['merchantIdKZM'] = $this->language->get('merchantIdKZM');
$this->data['currencyKZM'] = $this->language->get('currencyKZM');
$this->data['titleKZM'] = $this->language->get('titleKZM');
$this->data['successuUlKZM'] = $this->language->get('successUrlKZM');
$this->data['errorUrlKZM'] = $this->language->get('errorUrlKZM');
$this->data['dateKZM'] = $this->language->get('dateKZM');
$this->data['signstrKZM'] = $this->language->get('signstrKZM');
$this->data['verKZM'] = $this->language->get('verKZM');
//KZM
$this->data['button_confirm'] = $this->language->get('button_confirm');
$this->data['bank'] = nl2br($this->config->get('bank_transfer_bank_' . $this->config->get('config_language_id')));
$this->data['continue'] = $this->url->link('checkout/success');
if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/payment/bank_transfer.tpl')) {
$this->template = $this->config->get('config_template') . '/template/payment/bank_transfer.tpl';
} else {
$this->template = 'default/template/payment/bank_transfer.tpl';
}
$this->render();
}
public function confirm() {
$this->language->load('payment/bank_transfer');
$this->load->model('checkout/order');
$comment = $this->language->get('text_instruction') . "\n\n";
$comment .= $this->config->get('bank_transfer_bank_' . $this->config->get('config_language_id')) . "\n\n";
$comment .= $this->language->get('text_payment');
$this->model_checkout_order->confirm($this->session->data['order_id'], $this->config->get('bank_transfer_order_status_id'), $comment, true);
}
}
banktransfer.tpl
<h2><?php echo $text_instruction; ?></h2>
<div class="content">
<p><?php echo $text_description; ?></p>
<p><?php echo $bank; ?></p>
<p><?php echo $text_payment; ?></p>
<p><?php echo $orderIdKZM; ?></p>
<p>
<?php
$titleKZM = $titleKZM.$orderIdKZM;
$merchantIdKZM = '23';
$currencyKZM = 'KZT';
$successUrlKZM = '';
$erroUrlKZM = '';
$dateKZM = $merchantIdKZM.$orderIdKZM.$amountKZM.$currencyKZM;
?></p>
</div>
<div class="buttons">
<div class="right">
<form action="http://example.com/opencart/testkzm.php" method="get">
<input type="hidden" name="merchantIdKZM" value="<?php echo $merchantIdKZM; ?>">
<input type="hidden" name="orderIdKZM" value="<?php echo $orderIdKZM; ?>">
<input type="hidden" name="amountKZM" value="<?php echo $amountKZM; ?>">
<input type="hidden" name="currencyKZM" value="<?php echo $currencyKZM; ?>">
<input type="hidden" name="successUrlKZM" value="<?php echo $successUrlKZM; ?>">
<input type="hidden" name="errorUrlKZM" value="<?php echo $errorUrlKZM; ?>">
<input type="hidden" name="signstrKZM" value="<?php echo $signstrKZM; ?>">
<input type="hidden" name="verKZM" value="<?php echo $verKZM; ?>">
<input type="button" value="<?php echo $button_confirm; ?>" id="button-confirm" class="button" />
</form>
</div>
</div>
<script type="text/javascript"><!--
$('#button-confirm-s').bind('click', function() {
$.ajax({
type: 'get',
url: 'index.php?route=payment/bank_transfer/confirm',
success: function() {
location = '<?php echo $continue; ?>';
}
});
});
//--></script
testkzm.php
merchantID <?php echo $_GET["merchantIdKZM"]; ?><br>
orderID <?php echo $_GET["orderIdKZM"]; ?> <br>
amount <?php echo $_GET["amountKZM"]; ?><br>
currency <?php echo $_GET["currencyKZM"]; ?> <br>
successURL <?php echo $_GET["successUrlKZM"]; ?><br>
errorURL <?php echo $_GET["errorUrlKZM"]; ?> <br>
signstr <?php echo $_GET["signstrKZM"]; ?><br>
ver <?php echo $_GET["verKZM"]; ?> <br>
<div class="buttons">
<div class="right">
<a href="http://example.com/opencart/index.php?route=checkout/success">asdfas</a>
</div>
</div>
答案 0 :(得分:1)
来自支付网关的返回URL完全取决于您自己和支付网关的方法。一般情况下,如果您可以将网址传递给支付网关,以便为交易成功返回true和/或false,您可以使用支付网关控制器的方法,例如http://yourstore.com/index.php?route=payment/payment_gateway/success
其中然后,您可以处理付款,并相应地更新订单状态
如果您想转到结帐成功页面,则可以使用$this->redirect($this->url->link('checkout/success', '', 'SSL'))
。如果失败,您应该重定向回结帐页面,客户可以快速浏览已经填写了详细信息的各个页面,然后他们可以再试一次
答案 1 :(得分:0)
成功网址就是你想象的结帐/成功。
付款模块应在转到成功页面之前确认付款。银行转账模块通过使用AJAX(如banktransfer.tpl中所示)在banktransfer.php中调用确认功能进行确认。
最好使用其他支付网关模块(如pp_standard,moneybookers,paymate等)作为起点,而不是Bank Transfer,因为它们更符合您的自定义支付网关模块要求。
答案 2 :(得分:0)
我刚刚添加了简单的重定向代码来启动
<?php
header('Location:http://yoursite location');
exit;
?>
在view / template / yourtemplate / common / success.tpl
中