2

BankTransfer モジュールに基づいて Opencart に支払いモジュールを実装しました。支払いゲートウェイの要件は、get request でsuccessurlerrorurlを送信することです。これらの URL は、注文が成功した場合とキャンセルされた場合の URL です。

アルゴリズム:

  1. 顧客は注文のチェックアウトに進みます。
  2. 注文確認をクリック
  3. localhost/opencart/testkzm.php にリダイレクトされます。値が出力され、成功した場合にリダイレクトするリンクがあります。

質問:支払いゲートウェイでの支払いが成功した後にリダイレクトするリンクは何ですか?

アプローチ: http://example.com/opencart/index.php?route=checkout/successが成功へのリンクだと単純に考えていました。確認メッセージが表示されるだけで、注文はシステムに入れられません。確認する順序を自動的に知る外部リンクを提供する方法がないことを理解しています。したがって、successurl で暗号化された一意の値を渡す必要があるため、戻り時にそれらを復号化して順序を確認できますか?

ファイルの説明:

  • banktransfer.php は、opencart がシステムから注文 ID、注文金額などの情報を取得するファイルです。
  • banktransfer.tpl は、ブラウザでページをレンダリングするためのテンプレート ファイルです。(実際のフロントエンド)
  • testkzm.php は、システムから正しい値を取得することをテストするために作成した単純なファイルです。

testkzm.php は、システムから正しい値を取得することをテストするために作成した単純なファイルです。

コントローラ/支払いのbanktransfer.php

 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>
4

3 に答える 3

1

支払いゲートウェイからのリターン URL は、完全にあなた自身と支払いゲートウェイの方法論次第です。一般に、支払いゲートウェイに URL を渡して、トランザクションの成功に対して true および/または false を返すことができる場合、支払いゲートウェイ コントローラーのメソッドを使用するように取得しますhttp://yourstore.com/index.php?route=payment/payment_gateway/success。支払い、それに応じて注文ステータスを更新します

その後、チェックアウト成功ページに移動する場合は、 を使用します$this->redirect($this->url->link('checkout/success', '', 'SSL'))。失敗した場合は、チェックアウト ページにリダイレクトする必要があります。顧客は、詳細が既に入力されているはずのさまざまなページをすばやくスキップして、もう一度試すことができます。

于 2013-03-19T20:33:22.820 に答える
0

成功 URL は、ご想像のとおり checkout/success です。

支払いモジュールは、成功ページに移動する前に支払いを確認する必要があります。銀行振込モジュールは、AJAX (banktransfer.tpl で確認できるように) を使用して確認を行い、banktransfer.php の確認関数を呼び出します。

銀行振込の代わりに別の支払いゲートウェイ モジュール (pp_standard、moneybookers、paymate など) を出発点として使用することをお勧めします。これは、カスタム支払いゲートウェイ モジュールの要件により似ているためです。

于 2013-03-19T10:56:06.453 に答える