Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
yii2_fecshop
提交
967fa280
Y
yii2_fecshop
项目概览
OpenDocCN
/
yii2_fecshop
通知
18
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Y
yii2_fecshop
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
967fa280
编写于
5月 17, 2017
作者:
R
root
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
快捷支付的bug:1.xss数据处理有问题,2。快捷支付,生成订单部分,在支付成功后,才扣除库存清空购物车
上级
f1527bfc
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
51 addition
and
28 deletion
+51
-28
app/appfront/modules/Payment/block/paypal/express/Placeorder.php
...front/modules/Payment/block/paypal/express/Placeorder.php
+15
-4
app/appfront/modules/Payment/controllers/paypal/ExpressController.php
.../modules/Payment/controllers/paypal/ExpressController.php
+2
-3
app/apphtml5/modules/Payment/block/paypal/express/Placeorder.php
...html5/modules/Payment/block/paypal/express/Placeorder.php
+15
-8
app/apphtml5/modules/Payment/controllers/paypal/ExpressController.php
.../modules/Payment/controllers/paypal/ExpressController.php
+5
-5
services/Event.php
services/Event.php
+3
-2
services/Order.php
services/Order.php
+6
-3
services/Url.php
services/Url.php
+0
-2
services/product/Stock.php
services/product/Stock.php
+5
-1
未找到文件。
app/appfront/modules/Payment/block/paypal/express/Placeorder.php
浏览文件 @
967fa280
...
...
@@ -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;
...
...
app/appfront/modules/Payment/controllers/paypal/ExpressController.php
浏览文件 @
967fa280
...
...
@@ -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
();
...
...
app/apphtml5/modules/Payment/block/paypal/express/Placeorder.php
浏览文件 @
967fa280
...
...
@@ -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;
...
...
app/apphtml5/modules/Payment/controllers/paypal/ExpressController.php
浏览文件 @
967fa280
...
...
@@ -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
;
}
}
}
...
...
services/Event.php
浏览文件 @
967fa280
...
...
@@ -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
}
services/Order.php
浏览文件 @
967fa280
...
...
@@ -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
;
...
...
services/Url.php
浏览文件 @
967fa280
...
...
@@ -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
);
...
...
services/product/Stock.php
浏览文件 @
967fa280
...
...
@@ -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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录