ホームページ バックエンド開発 PHPチュートリアル zen_cart实现支付前生成订单的方法_PHP

zen_cart实现支付前生成订单的方法_PHP

May 28, 2016 am 11:46 AM
支払う

本文实例讲述了zen_cart实现支付前生成订单的方法。分享给大家供大家参考,具体如下:

除了paypal之外. 客户通过其他的支付方式进入index.php?main_page=checkout_confirmation这个页面就能生出订单.
但是!! paypal就有点与众不同, 它只能是从它的官网 [paypal.com] 返回来并且进入checkout_process这个页面后,才能生出订单

而意外常会发生:比如网络不顺. 又比如客户不小心在返回前就关了页面.

那么,我们的网站后台就看不到客户买的是什么产品(虽然在paypal后台能看到是谁买了,但确实是无法知道他到底买了什么,)这可是一个好郁闷的事情

paypal防漏单的原理就是------在 checkout_confirmation.php这个页面先生出订单!!!

方法是:在这个文件的最后部分

代码如下:

echo TITLE_CONTINUE_CHECKOUT_PROCEDURE . '
' . TEXT_CONTINUE_CHECKOUT_PROCEDURE;

后面添加代码:

// create the order record 防漏单 
if ($_SESSION['payment'] == 'paypal') { 
$insert_id = $order->create($order_totals, 2);
$zco_notifier->notify('NOTIFY_CHECKOUT_PROCESS_AFTER_ORDER_CREATE');
$payment_modules->after_order_create($insert_id);
$zco_notifier->notify('NOTIFY_CHECKOUT_PROCESS_AFTER_PAYMENT_MODULES_AFTER_ORDER_CREATE');
// store the product info to the order
$order->create_add_products($insert_id);
$_SESSION['order_number_created'] = $insert_id;

ログイン後にコピー

为了避免对其他支付方式产生影响,代码做了个判断,只有paypal支付会运行这些生成订单的代码,加了这段后就不用担心会漏单了。

如果需要更完美的做法,为防止顾客在访问checkout process的时候会重复生成订单, 那么就需要加个判断

if($_SESSION['payment']!='paypal'){
/*// create the order record
$insert_id = $order->create($order_totals, 2);
$zco_notifier->notify('NOTIFY_CHECKOUT_PROCESS_AFTER_ORDER_CREATE');
$payment_modules->after_order_create($insert_id);
$zco_notifier->notify('NOTIFY_CHECKOUT_PROCESS_AFTER_PAYMENT_MODULES_AFTER_ORDER_CREATE');
// store the product info to the order
$order->create_add_products($insert_id);
$_SESSION['order_number_created'] = $insert_id;
$zco_notifier->notify('NOTIFY_CHECKOUT_PROCESS_AFTER_ORDER_CREATE_ADD_PRODUCTS');
//send email notifications
$order->send_order_email($insert_id, 2);
$zco_notifier->notify('NOTIFY_CHECKOUT_PROCESS_AFTER_SEND_ORDER_EMAIL');*/
}

ログイン後にコピー

而且在确认页面,如果顾客一直刷新页面,就会一直生成订单,可以加个限制.

// create the order record 防漏单
if ($_SESSION['payment'] == 'paypal' and !isset($_SESSION['order_number_created'])) {
$insert_id = $order->create($order_totals, 2);
$zco_notifier->notify('NOTIFY_CHECKOUT_PROCESS_AFTER_ORDER_CREATE');
$payment_modules->after_order_create($insert_id);
$zco_notifier->notify('NOTIFY_CHECKOUT_PROCESS_AFTER_PAYMENT_MODULES_AFTER_ORDER_CREATE');
// store the product info to the order
$order->create_add_products($insert_id);
$_SESSION['order_number_created'] = $insert_id;
}

ログイン後にコピー

在pages/checkout_payment/header_php.php任意位置加上

unset($_SESSION['order_number_created']);

ログイン後にコピー

这样,就算顾客在确认页面一直刷新,因为已经设置了

$_SESSION['order_number_created']

ログイン後にコピー

订单不再生成,

如果顾客返回修改了购物车,再次到达checkout_payment时$_SESSION['order_number_created']将被清除,

其实,生成订单的代码可以写在modules/payment/paypal.php的 function confirmation()中。

代码如下:

function confirmation() {
if(!isset($_SESSION['order_number_created']))
{
global $order,$order_total_modules,$order_totals,$zco_notifier,$insert_id; 
$zco_notifier->notify('NOTIFY_CHECKOUT_PROCESS_BEGIN'); // if the customer is not logged on, redirect them to the time out page
if (!$_SESSION['customer_id']) 
{ 
zen_redirect(zen_href_link(FILENAME_TIME_OUT)); 
} 
else 
{ // validate customer 
if (zen_get_customer_validate_session($_SESSION['customer_id']) == false) 
{ 
$_SESSION['navigation']->set_snapshot(array('mode' => 'SSL', 'page' => FILENAME_CHECKOUT_SHIPPING));
zen_redirect(zen_href_link(FILENAME_LOGIN, '', 'SSL')); 
} 
} 
if(isset($mycartID)&&$mycartID == $_SESSION['cart']->cartID)
{ 
return array('title' => MODULE_PAYMENT_PAYPAL_TEXT_DESCRIPTION); 
} 
$mycartID = $_SESSION['cart']->cartID; 
$order = new order; // prevent 0-entry orders from being generated/spoofed 
if (sizeof($order->products) < 1) 
{ 
zen_redirect(zen_href_link(FILENAME_SHOPPING_CART)); 
} 
$order_total_modules = new order_total; 
$zco_notifier->notify('NOTIFY_CHECKOUT_PROCESS_BEFORE_ORDER_TOTALS_PRE_CONFIRMATION_CHECK');
//$order_totals = $order_total_modules->pre_confirmation_check(); 
$zco_notifier->notify('NOTIFY_CHECKOUT_PROCESS_BEFORE_ORDER_TOTALS_PROCESS'); 
$order_totals = $order_total_modules->process(); 
$zco_notifier->notify('NOTIFY_CHECKOUT_PROCESS_AFTER_ORDER_TOTALS_PROCESS'); 
if (!isset($_SESSION['payment']) && !$credit_covers) 
{ 
zen_redirect(zen_href_link(FILENAME_DEFAULT)); 
} // load the before_process
// load the before_process function from the payment modules 
//$zco_notifier->notify('NOTIFY_CHECKOUT_PROCESS_AFTER_PAYMENT_MODULES_BEFOREPROCESS');
// create the order record 
$insert_id = $order->create($order_totals, 2); 
require(DIR_WS_LANGUAGES.'english/email_extras.php'); 
require(DIR_WS_LANGUAGES.'english/checkout_process.php'); 
// store the product info to the order 
$order->create_add_products($insert_id); 
$_SESSION['order_number_created'] = $insert_id; 
$zco_notifier->notify('NOTIFY_CHECKOUT_PROCESS_AFTER_ORDER_CREATE_ADD_PRODUCTS');
$order->send_order_email($insert_id, 2);
if (is_array($order_total_modules->modules)) 
{
reset($order_total_modules->modules);
while (list(, $value) = each($order_total_modules->modules)) 
{
$class = substr($value, 0, strrpos($value, '.'));
if (!isset($GLOBALS[$class])) continue;
$GLOBALS[$class]->output=null;
}
}
}
else 
return false;
}

ログイン後にコピー

更多关于zend framework相关内容感兴趣的读者可查看本站专题:《Zend FrameWork框架入门教程》、《PHP操作zip文件及压缩技巧总结》、《php文件操作总结》、《ThinkPHP入门教程》、《ThinkPHP常用方法总结》、《smarty模板入门基础教程》及《PHP模板技术总结》。

希望本文所述对大家基于zend框架的PHP程序设计有所帮助。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

百度地図でのタクシー料金の支払い方法. タクシー料金の支払い手順を紹介します。 百度地図でのタクシー料金の支払い方法. タクシー料金の支払い手順を紹介します。 Mar 13, 2024 am 10:04 AM

Baidu Map APP は現在、多くのユーザーに好まれる旅行ナビゲーション ソフトウェアとなっているため、ここにある機能の一部は包括的であり、毎日の旅行で遭遇する可能性のある問題のいくつかを解決するために無料で選択して操作できます。自分だけの旅行ルートを設定して、自分だけの旅行プランを立てましょう。該当するルートを確認した上で、公共交通機関を利用しても、自転車、徒歩、タクシーなど、目的に応じて適切な移動方法を選択することができます。あなたのニーズに対応したナビゲーションルートがあり、特定の場所にうまく導くことができます。そうすれば、誰もがタクシーを利用することを選択した場合、より便利だと感じるでしょう。多くのドライバーがいます。彼らは皆、オンラインで注文を受け付け、タクシー配車は可能です。超になる

uniapp アプリケーションが支払いと注文の管理を実装する方法 uniapp アプリケーションが支払いと注文の管理を実装する方法 Oct 19, 2023 am 10:37 AM

uniapp は、小さなプログラム、アプリ、および H5 を同時に開発できるクロスプラットフォームのアプリケーション開発フレームワークです。 uniapp アプリケーションでは、支払いと注文の管理が非常に一般的なニーズです。この記事では、uniappアプリケーションに決済機能や注文管理を実装する方法と具体的なコード例を紹介します。 1. 決済機能の実装 決済機能はオンライン取引を実現するための鍵であり、通常、サードパーティの決済プラットフォームの SDK を統合する必要があります。 uniapp に支払い機能を実装するための具体的な手順は次のとおりです。 サードパーティの支払いプラットフォームを登録して取得します。

PHP と PayPal API を使用して支払う PHP と PayPal API を使用して支払う Jun 19, 2023 pm 04:13 PM

オンライン取引の普及に伴い、支払い方法も徐々に多様化しており、その中でもPayPalは広く利用されている支払い方法として非常に人気があります。 PayPal を使用して Web サイトまたはアプリケーションでトランザクションを処理する場合は、PHP と PayPal API を使用して支払いプロセスを簡単に完了できます。 PayPalAPI は、PayPal と対話するためのプログラミング インターフェイスのセットです。 API を介して、PayPal から通知を受け取り、最新の取引情報を照会し、支払いを開始できます。

武漢でのバスの支払い方法 武漢でのバスの支払い方法 Oct 13, 2022 pm 02:17 PM

武漢のバスの支払い方法: 1. 現金で支払う場合は、事前に十分な小銭を用意し、コインスロットに直接お金を入れる必要があります; 2. 武漢通カードをスワイプします (武漢通の正式名称は武漢市カードです) 、チップカードとしても知られる集積回路カードです; 3. Alipay 電子バス カード、最初に Alipay で武漢電子バス カードを取得し、バスに乗るときに QR コードを直接スキャンしてお金を差し引きます; 4. WeChatバスコード支払い、WeChat「乗車コード」アプレットを開き、武漢「乗車コード」をアクティブ化すると、QRコードを直接スキャンして支払いを差し引いてバスに乗車できます。

Meituan Takeout Express Paymentの終了方法 Meituan Takeout Express Paymentの終了方法 Mar 27, 2024 am 10:41 AM

ペースの速い現代生活の中で、美団テイクアウトは便利なサービスと豊富な選択肢で消費者に深く愛されています。中でも超高速決済機能は、煩雑な入力作業を省き、ワンクリックで決済が完了するため、ユーザーにとって大きな利便性をもたらします。ただし、多くのユーザーは確認なしで直接支払うことを好まないため、この機能をオフにしたいと考えています。では、Meituan Waimai の高速支払いをオフにするにはどうすればよいでしょうか?以下では、この Web サイトの編集者が詳細なステップバイステップのセットアップ チュートリアルを提供します。お役に立てれば幸いです。 1. 携帯電話のデスクトップにある「Meituan Takeout」ショートカット アイコンをクリックします。 2. 携帯電話で Meituan テイクアウト アプリにログインし、右下の [マイ] をクリックします。 3. マイインターフェースで、「ウォレットを入力」をクリックします。 4. Meituan Wallet インターフェースで、右上隅の「設定」アイコンをクリックします。

ペイノー支払いとはどういう意味ですか? ペイノー支払いとはどういう意味ですか? Sep 30, 2022 am 11:01 AM

PayNow 支払いは電子送金サービスであり、ユーザーは、受取人が指定した携帯電話番号、ID カード/FIN 番号、UEN 番号、または PayNow QR コードを介して、相手方を介さずに受取人へのリアルタイム SGD 送金を直接開始できます。銀行口座情報。

支払いが有効な場合、デフォルトで Meituan インスタント割引が差し引かれる場所_ 支払いが有効な場合、デフォルトで差し引かれる Meituan インスタント ディスカウントに関するチュートリアル 支払いが有効な場合、デフォルトで Meituan インスタント割引が差し引かれる場所_ 支払いが有効な場合、デフォルトで差し引かれる Meituan インスタント ディスカウントに関するチュートリアル Mar 28, 2024 am 11:00 AM

1. まず [Meituan] アプリを開き、下部のナビゲーション バーの [My] ボタンをクリックします。 2. [My Wallet] 機能ボタンをクリックし、[Cash Voucher] ボタンをクリックします。 3. 次に、上部の機能バーで [即時控除] ボタンをクリックし、スイッチ ボタンをクリックして [支払い中のデフォルト控除] をオンにすると、正常にオンになります。

MySQL で食料品ショッピング システムの注文支払いテーブルを確立する MySQL で食料品ショッピング システムの注文支払いテーブルを確立する Nov 01, 2023 pm 03:48 PM

MySQL で食料品ショッピング システムの注文支払いテーブルを構築するには、具体的なコード例が必要です インターネットの発達により、買い物はますます便利になりました。ショッピング プロセスにおいて、注文の支払いはショッピング プロセスの重要な部分です。食料品ショッピング システムには、注文生成機能が必要なだけでなく、支払いが成功した場合のみ取引が完了したとみなされるため、完全な支払いプロセスも必要です。この記事では、MySQL で食料品ショッピング システムの注文支払いテーブルを作成する方法を説明し、具体的なコード例を示します。 1. 注文支払いテーブルの設計 食料品ショッピング システムの注文支払いテーブルには注文が保存されます。

See all articles