Table des matières
zen_cart实现支付前生成订单的方法,zen_cart生成订单
Maison php教程 php手册 zen_cart实现支付前生成订单的方法,zen_cart生成订单

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

Jun 13, 2016 am 08:41 AM
zen 支付 订单

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;

Copier après la connexion

为了避免对其他支付方式产生影响,代码做了个判断,只有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');*/

}

Copier après la connexion

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

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;

}

Copier après la connexion

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

1

unset($_SESSION['order_number_created']);

Copier après la connexion

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

1

$_SESSION['order_number_created']

Copier après la connexion

订单不再生成,

如果顾客返回修改了购物车,再次到达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;

}

Copier après la connexion

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

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

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment payer une course en taxi sur Baidu Maps Introduction aux étapes de paiement d'une course en taxi. Comment payer une course en taxi sur Baidu Maps Introduction aux étapes de paiement d'une course en taxi. Mar 13, 2024 am 10:04 AM

Comment payer une course en taxi sur Baidu Maps Introduction aux étapes de paiement d'une course en taxi.

Comment l'application Uniapp implémente la gestion des paiements et des commandes Comment l'application Uniapp implémente la gestion des paiements et des commandes Oct 19, 2023 am 10:37 AM

Comment l'application Uniapp implémente la gestion des paiements et des commandes

Comment demander un remboursement pour une commande à emporter Meituan Guide détaillé pour demander un remboursement sur une commande. Comment demander un remboursement pour une commande à emporter Meituan Guide détaillé pour demander un remboursement sur une commande. Mar 12, 2024 am 10:50 AM

Comment demander un remboursement pour une commande à emporter Meituan Guide détaillé pour demander un remboursement sur une commande.

Comment rembourser les commandes en attente de Meituan_Tutoriel de Meituan sur le remboursement des commandes en attente Comment rembourser les commandes en attente de Meituan_Tutoriel de Meituan sur le remboursement des commandes en attente Mar 27, 2024 pm 08:40 PM

Comment rembourser les commandes en attente de Meituan_Tutoriel de Meituan sur le remboursement des commandes en attente

Payez en utilisant PHP et l'API PayPal Payez en utilisant PHP et l'API PayPal Jun 19, 2023 pm 04:13 PM

Payez en utilisant PHP et l'API PayPal

Compétences en développement de centres commerciaux PHP : conception de fonctions de panier d'achat et de synchronisation des commandes Compétences en développement de centres commerciaux PHP : conception de fonctions de panier d'achat et de synchronisation des commandes Jul 30, 2023 pm 07:22 PM

Compétences en développement de centres commerciaux PHP : conception de fonctions de panier d'achat et de synchronisation des commandes

Que signifie le paiement Paynow ? Que signifie le paiement Paynow ? Sep 30, 2022 am 11:01 AM

Que signifie le paiement Paynow ?

Comment payer pour prendre le bus à Wuhan Comment payer pour prendre le bus à Wuhan Oct 13, 2022 pm 02:17 PM

Comment payer pour prendre le bus à Wuhan

See all articles