提交 967fa280 编写于 作者: R root

快捷支付的bug:1.xss数据处理有问题,2。快捷支付,生成订单部分,在支付成功后,才扣除库存清空购物车

上级 f1527bfc
......@@ -35,8 +35,15 @@ class Placeorder {
public function getLastData(){
$post = Yii::$app->request->post();
if(is_array($post) && !empty($post)){
# post 是二维数组,需要多层处理
foreach($post as $k=>$v){
$post[$k] = \yii\helpers\Html::encode($v);
if(is_array($v)){
foreach($v as $k2=>$v2){
$post[$k][$k2] = \yii\helpers\Html::encode($v2);
}
}else{
$post[$k] = \yii\helpers\Html::encode($v);
}
}
# 设置paypal快捷支付
$post['payment_method'] = Yii::$service->payment->paypal->express_payment_method;
......@@ -52,8 +59,8 @@ class Placeorder {
$serviceOrder = Yii::$service->order;
$checkout_type = $serviceOrder::CHECKOUT_TYPE_EXPRESS;
$serviceOrder->setCheckoutType($checkout_type);
# 将购物车数据,生成订单。
$genarateStatus = Yii::$service->order->generateOrderByCart($this->_billing,$this->_shipping_method,$this->_payment_method);
# 将购物车数据,生成订单,生成订单后,不清空购物车,不扣除库存,在支付成功后在清空购物车
$genarateStatus = Yii::$service->order->generateOrderByCart($this->_billing,$this->_shipping_method,$this->_payment_method,false);
//echo 22;
if($genarateStatus){
# 得到当前的订单信息
......@@ -64,6 +71,10 @@ class Placeorder {
# 如果支付成功,并把信息更新到了订单数据中,则进行下面的操作。
//echo 444;
if($ExpressOrderPayment){
# 支付成功后,在清空购物车数据。而不是在生成订单的时候。
Yii::$service->cart->clearCartProductAndCoupon();
# 支付成功后,扣除库存。
Yii::$service->product->stock->deduct();
//echo 555;
# 发送新订单邮件
......@@ -74,7 +85,7 @@ class Placeorder {
$paypal_express = Yii::$service->payment->paypal->express_payment_method;
$successRedirectUrl = Yii::$service->payment->getExpressSuccessRedirectUrl($paypal_express);
Yii::$service->url->redirect($successRedirectUrl);
exit;
return true;
}
}
//return true;
......
......@@ -28,9 +28,8 @@ class ExpressController extends AppfrontController
$_csrf = Yii::$app->request->post('_csrf');
if($_csrf){
$status = $this->getBlock('placeorder')->getLastData();
if(!$status){
//var_dump(Yii::$service->helper->errors->get());
//exit;
if($status){
return;
}
}
$data = $this->getBlock()->getLastData();
......
......@@ -35,8 +35,15 @@ class Placeorder {
public function getLastData(){
$post = Yii::$app->request->post();
if(is_array($post) && !empty($post)){
# post 是二维数组,需要多层处理
foreach($post as $k=>$v){
$post[$k] = \yii\helpers\Html::encode($v);
if(is_array($v)){
foreach($v as $k2=>$v2){
$post[$k][$k2] = \yii\helpers\Html::encode($v2);
}
}else{
$post[$k] = \yii\helpers\Html::encode($v);
}
}
# 设置paypal快捷支付
$post['payment_method'] = Yii::$service->payment->paypal->express_payment_method;
......@@ -52,8 +59,8 @@ class Placeorder {
$serviceOrder = Yii::$service->order;
$checkout_type = $serviceOrder::CHECKOUT_TYPE_EXPRESS;
$serviceOrder->setCheckoutType($checkout_type);
# 将购物车数据,生成订单。
$genarateStatus = Yii::$service->order->generateOrderByCart($this->_billing,$this->_shipping_method,$this->_payment_method);
# 将购物车数据,生成订单,生成订单后,不清空购物车,不扣除库存,在支付成功后在清空购物车
$genarateStatus = Yii::$service->order->generateOrderByCart($this->_billing,$this->_shipping_method,$this->_payment_method,false);
//echo 22;
if($genarateStatus){
# 得到当前的订单信息
......@@ -64,24 +71,24 @@ class Placeorder {
# 如果支付成功,并把信息更新到了订单数据中,则进行下面的操作。
//echo 444;
if($ExpressOrderPayment){
# 支付成功后,在清空购物车数据。而不是在生成订单的时候。
Yii::$service->cart->clearCartProductAndCoupon();
# 支付成功后,扣除库存。
Yii::$service->product->stock->deduct();
//echo 555;
# 发送新订单邮件
# 扣除库存和优惠券
// 在生成订单的时候已经扣除了。参看order service GenerateOrderByCart() function
# 得到支付跳转前的准备页面。
$paypal_express = Yii::$service->payment->paypal->express_payment_method;
$successRedirectUrl = Yii::$service->payment->getExpressSuccessRedirectUrl($paypal_express);
Yii::$service->url->redirect($successRedirectUrl);
exit;
return true;
}
}
//return true;
}
}
}else{
}
}
//echo 'eeeeeeee';exit;
......
......@@ -28,17 +28,17 @@ class ExpressController extends AppfrontController
$_csrf = Yii::$app->request->post('_csrf');
if($_csrf){
$status = $this->getBlock('placeorder')->getLastData();
if(!$status){
//var_dump(Yii::$service->helper->errors->get());
//exit;
if($status){
return;
}
}
$data = $this->getBlock()->getLastData();
if(is_array($data) && !empty($data)){
if(is_array($data) && !empty($data) ){
return $this->render($this->action->id,$data);
}else{
return $data;
}
}
}
......
......@@ -29,7 +29,8 @@ class Event extends Service
*/
public function trigger($eventName,$data){
if(!is_array($data)){
Yii::$service->helper->errors->add('event data must array');
//Yii::$service->helper->errors->add('event data must array');
return;
}
if(isset($this->eventList[$eventName]) && !empty($this->eventList[$eventName]) && is_array($this->eventList[$eventName])){
foreach($this->eventList[$eventName] as $one){
......@@ -45,4 +46,4 @@ class Event extends Service
}
}
\ No newline at end of file
}
......@@ -304,10 +304,11 @@ class Order extends Service
* @property $address | Array 货运地址
* @property $shipping_method | String 货运快递方式
* @property $payment_method | Array 支付方式、
* @property $clearCartAndDeductStock | boolean 是否清空购物车,并扣除库存,这种情况是先 生成订单,在支付的情况下失败的处理方式。
* @return boolean 通过购物车的数据生成订单是否成功
* 通过购物车中的产品信息,以及传递的货运地址,货运快递方式,支付方式生成订单。
*/
protected function actionGenerateOrderByCart($address,$shipping_method,$payment_method){
protected function actionGenerateOrderByCart($address,$shipping_method,$payment_method,$clearCartAndDeductStock=true){
$cart = Yii::$service->cart->quote->getCurrentCart();
if(!$cart){
Yii::$service->helper->errors->add('current cart is empty');
......@@ -391,14 +392,16 @@ class Order extends Service
# 扣除库存。(订单生成后,库存产品库存。)
# (备注)需要另起一个脚本,用来处理半个小时后,还没有支付的订单,将订单取消,然后将订单里面的产品库存返还。
# 如果是无限库存(没有库存就去采购的方式),那么不需要跑这个脚本,将库存设置的非常大即可。
Yii::$service->product->stock->deduct($cartInfo['products']);
if($clearCartAndDeductStock){
Yii::$service->product->stock->deduct($cartInfo['products']);
}
# 优惠券
// 优惠券是在购物车页面添加的,添加后,优惠券的使用次数会被+1,
// 因此在生成订单部分,是没有优惠券使用次数操作的(在购物车添加优惠券已经被执行该操作)
// 生成订单后,购物车的数据会被清空,其中包括优惠券信息的清空。
# 如果是登录用户,那么,在生成订单后,需要清空购物车中的产品和coupon。
if(!Yii::$app->user->isGuest){
if(!Yii::$app->user->isGuest && $clearCartAndDeductStock){
Yii::$service->cart->clearCartProductAndCoupon();
}
return true;
......
......@@ -343,8 +343,6 @@ class Url extends Service
* @property $backToPage1|boolean 删除后,页数由原来的页数变成第一页?
*/
protected function actionRemoveUrlParamVal($url,$removeUrlParamStr,$backToPage1=true){
$return_url = $url;
if(strstr($url,'?'.$removeUrlParamStr.'&')){
$return_url = str_replace('?'.$removeUrlParamStr.'&','?',$url);
......
......@@ -44,7 +44,11 @@ class Stock extends Service
* @return boolean
* 扣除产品库存。如果扣除成功,则返回true,如果返回失败,则返回false
*/
protected function actionDeduct($items){
protected function actionDeduct($items=""){
if(!$items){ #如果$items为空,则去购物车取数据。
$cartInfo = Yii::$service->cart->getCartInfo();
$items = isset($cartInfo['products']) ? $cartInfo['products'] : '';
}
if(!$this->_checkItemsStockStatus){
if(!$this->checkItemsStock($items)){
return false;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册