Table of Contents
zen_cart实现支付前生成订单的方法,zen_cart生成订单
Home php教程 php手册 zen_cart实现支付前生成订单的方法,zen_cart生成订单

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

Jun 13, 2016 am 08:41 AM
zen pay Order

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

本文实例讲述了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;

后面添加代码:

1

2

3

4

5

6

7

8

9

// 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;

Copy after login

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

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

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');*/

}

Copy after login

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

1

2

3

4

5

6

7

8

9

10

// 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;

}

Copy after login

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

1

unset($_SESSION['order_number_created']);

Copy after login

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

1

$_SESSION['order_number_created']

Copy after login

订单不再生成,

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

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

代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

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;

}

Copy after login

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

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

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot Article Tags

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

How to pay for a taxi ride on Baidu Maps. Introduction to the payment steps for a taxi ride. How to pay for a taxi ride on Baidu Maps. Introduction to the payment steps for a taxi ride. Mar 13, 2024 am 10:04 AM

How to pay for a taxi ride on Baidu Maps. Introduction to the payment steps for a taxi ride.

How uniapp application implements payment and order management How uniapp application implements payment and order management Oct 19, 2023 am 10:37 AM

How uniapp application implements payment and order management

How to apply for a refund for a Meituan takeout order. Detailed guide to applying for a refund on an order. How to apply for a refund for a Meituan takeout order. Detailed guide to applying for a refund on an order. Mar 12, 2024 am 10:50 AM

How to apply for a refund for a Meituan takeout order. Detailed guide to applying for a refund on an order.

How to refund Meituan's pending orders_Meituan's tutorial on refunding pending orders How to refund Meituan's pending orders_Meituan's tutorial on refunding pending orders Mar 27, 2024 pm 08:40 PM

How to refund Meituan's pending orders_Meituan's tutorial on refunding pending orders

Pay using PHP and PayPal API Pay using PHP and PayPal API Jun 19, 2023 pm 04:13 PM

Pay using PHP and PayPal API

PHP mall development skills: Design shopping cart and order synchronization functions PHP mall development skills: Design shopping cart and order synchronization functions Jul 30, 2023 pm 07:22 PM

PHP mall development skills: Design shopping cart and order synchronization functions

What does paynow payment mean? What does paynow payment mean? Sep 30, 2022 am 11:01 AM

What does paynow payment mean?

How to pay for taking the bus in Wuhan How to pay for taking the bus in Wuhan Oct 13, 2022 pm 02:17 PM

How to pay for taking the bus in Wuhan

See all articles