原有的逻辑是,统一在onepage页面完成选择支付方式等所有的option,最后生成订单,但好多业务需求情况,特别是目前国内的,都是先下单子,然后再选择支付方式以及执行后续的支付动作,而且有些项目处理起来不是很方便,二开的东西比较多。是否可以更改一下逻辑处理和实现下分块生成订单,使得地址填写,货运方式设置,支付方式选择,优惠券添加等等,可以通过单独地调用模块方法快捷的实现?或许是对fecshop还是没领悟透彻,可能通过二开模块,service层等就可以实现,但这些功能应该比较实用的,而且担心实现起来工作量大,逻辑错误漏洞多,开发速度慢。想请教下是否有比较好的解决方案。而且觉得系统后期应该完善各种实用的功能模块,方便开发的调用去实现项目的拼装组合。全属菜鸟愚见,望各位大神指教一二。
本文由 leenin 创作,采用 知识共享署名 3.0 中国大陆许可协议 进行许可。 可自由转载、引用,但需署名作者且注明文章出处。
你想的是,不使用一页支付,而是想分开操作。
1.在下单页面,点击place order后, /checkout/onepage/index post 请求
$status = $this->getBlock('placeorder')->getLastData();
$genarateStatus = Yii::$service->order->generateOrderByCart($this->_billing, $this->_shipping_method, $this->_payment_method, false, '', $this->_order_remark);
就是:https://github.com/fecshop/yii2_fecshop/blob/master/services/Order.php#L522
protected function actionGenerateOrderByCart($address, $shipping_method, $payment_method, $clearCart = true, $token = '', $order_remark = '')
{
}
到这里就找到生成订单的代码了
对于优惠券,在购物车页面就可以使用,你在下单前使用也没有问题,自己找代码逻辑
对于货运地址,你可以提前保存,目前处理货运地址的代码为:https://github.com/fecshop/yii2_fecshop/blob/master/app/appfront/modules/Checkout/block/onepage/Placeorder.php#L224
,你可以在前面保存写来,然后吧address_id 写入session,然后在调用
generateOrderByCart()
的时候传递进来即可
对于支付方式,在订单生成后选择支付方式更新订单支付,可以将:https://github.com/fecshop/yii2_fecshop/blob/master/services/Order.php#L606 这行代码去掉,然后自己写一个更新订单支付方式的方法。
理清楚思路和逻辑,按照自己的需求更改相应的代码逻辑即可。