Fecshop 订单

fecshop 订单指的是在fecshop下单后的订单信息。

订单配置

配置文件

为:@common/config/fecshop_local_services/Order.php,详细如下:

<?php
/**
 * FecShop file.
 *
 * @link http://www.fecshop.com/
 *
 * @copyright Copyright (c) 2016 FecShop Software LLC
 * @license http://www.fecshop.com/license/
 */
return [
    'order' => [
        'increment_id'        => '1100000000', // 订单的格式。
        'requiredAddressAttr' => [ // 必填的订单字段。
            'first_name',
            'last_name',
            'email',
            'telephone',
            'street1',
            'country',
            'city',
            'state',
            'zip',
        ],
        //处理多少分钟后,支付状态为pending的订单,归还库存。
        'minuteBeforeThatReturnPendingStock'    => 600,
        // 脚本一次性处理多少个pending订单。
        'orderCountThatReturnPendingStock'        => 30,
        // 订单状态配置
        
        // !!!!!!下面是订单支付状态!!!!!!! ,各个订单状态查看相应注释
        // 等待付款状态
        'payment_status_pending'            => 'payment_pending',
        // 付款处理中,(支付处理中,因为信用卡有预售,因此需要等IPN消息来确认是否支付成功)
        'payment_status_processing'         => 'payment_processing',
        // 收款成功(支付状态已确认,代表已经收到钱了)
        'payment_status_confirmed'          => 'payment_confirmed',
        // 欺诈【当paypal的返回金额和网站金额不一致【以及货币类型】的情况,就会判定该状态】
        'payment_status_suspected_fraud'    => 'payment_suspected_fraud',
        // 订单支付已取消【用户进入paypal点击取消订单返回网站,或者payment_pending订单超过xx时间未支付被脚本取消,或者客服后台取消】
        'payment_status_canceled'            => 'payment_canceled',
        // 订单审核中(订单收款成功后,进入erp,需要客服审核,才能开始发货流程,或者可能存在某些问题,被客服暂时挂起)
        'status_holded'                     => 'holded',
        // 订单备货处理中,从成功收款进入erp并客服审核成功后,进入备货流程 到 发货前的状态
        'status_processing'                 => 'processing',
        // 订单已发货【订单包裹被物流公司收取后】
        'status_dispatched'                 => 'dispatched',
        // 订单已退款【已收款订单因为某些原因进行退款,譬如:仓库无货,用户收到货后发现破损退款等】
        'status_refunded'                   => 'refunded',
        // 订单已完成,【用户收到货物xx时间后,未发起纠纷争端,订单状态标记为已完成】
        'status_complete'                   => 'completed',
    ],    
];

订单状态的大致流程:

1.生成订单后,订单等待支付,订单的状态为 payment_status_pending(等待付款状态)

2当跳转到第三方支付,譬如paypal,如果用户没有使用paypal的余额,而是使用了paypal 绑定的信用卡支付,支付完成后跳转到网站,订单的状态为payment_status_processing(付款处理中), 原因是paypal需要到信用卡发卡行扣款,在扣款没有完成之前,在paypal的后台可以查看这个订单, 但是,并未收到款,需要等待paypal去信用卡扣款成功, 当paypal扣款成功后,会以IPN消息的方式,给fecshop的ipn接收API发送一个post请求,告诉fecshop订单支付已收款, 然后fecshop会把订单状态改成payment_status_confirmed(收款成功)

3.如果用户使用的是paypal余额付款,那么付款直接成功,订单状态将直接被改为payment_status_confirmed(收款成功)

4.当paypal返回的订单信息和网站订单金额和货币类型不一致,就会被fecshop判定为欺诈订单, 订单类型更改为: payment_status_suspected_fraud (欺诈)

5.如果用户跳转到paypal网站支付,如果用户没有支付,而是点击了取消链接,那么就会跳转回fecshop,订单将会被 取消,释放库存,订单状态更改为 payment_status_canceled (订单支付已取消)

6.payment_status_pending(等待付款状态)的订单,有一些用户跳转到支付平台后, 然后就关掉了页面,那么这个订单就会一直处于等待付款状态,占用库存,因此,我们需要后台脚本, 将一段时间内没有支付的payment_status_pending订单取消掉, 订单状态更改为 payment_status_canceled 并释放库存。

7.已付款订单的处理,一般都是在erp系统中处理, 因此通过脚本将订单推动到erp,推送成功后订单状态变成status_holded(订单审核中)

8.erp客服审核订单,审核成功后,进入备货流程,订单状态改成status_processing(订单备货处理中)

9.备货完成,订单发货, 订单状态改成 status_dispatched(订单已发货)

10.订单发货,买家收到货物后,发现有问题或者其他原因要求退货,商家允许,达成一致后, 订单状态改成 status_refunded 订单已退款,

11.如果买家没有纠纷,那么过一段时间后,订单状态为 status_complete (订单已完成)

对于erp处理过程中会有很多的状态,可以做一个关系对应表,把这些状态做一下关系对应。

其他配置说明

increment_id :为订单编号格式

requiredAddressAttr: 为下单界面必填的字段

minuteBeforeThatReturnPendingStock: 这个是下面的后台脚本 (释放未付款订单库存的脚本)所用到的参数,将pending(未支付的订单) 的库存释放掉,这里的单位是分钟,如果您的库存为零库存( 零库存指的是,如果没有库存 可以通过采购部门采购,相当于您不需要考虑库存),可以不需要跑这个脚本。

orderCountThatReturnPendingStock: 这个后台脚本一次性处理多少个pending订单。

注意:通过脚本将pending的库存返还给产品后,订单的状态将会变成取消状态, 订单取消状态,是无法进行支付的,因此,minuteBeforeThatReturnPendingStock 尽量设置的大一些,我设置的默认为10个小时,对于零库存商城 (也就是产品库存为0没有关系,可以继续卖,然后采购部门去采购,这属于零库存模式), 这种模式可以批量将产品的所有库存设置的非常大,下面的这个脚本也不需要跑。 ,下面的这个脚本就是根据上面设置的参数来处理pending状态订单,释放产品库存的脚本。

释放未付款订单库存的脚本

详细参看:order:pending订单取消脚本

订单支付状态的进一步验证

如果您感觉还是不放心,订单传递到erp进行发货处理的时候,加入一层付款成功验证, 譬如paypal,您可以去官方网站下载付款成功的订单,也就是csv表格 ,然后通过导入的方式,二次验证订单支付状态,这样是最稳妥的方式, 另外还需要验证一下货币和金额。

下单后购物车的清空:

游客用户下单后,购物车是不清空的,支付成功后返回网站再清空购物车产品

登录用户下单后,购物车直接清空,用户可以在账户中心的我的订单中查看未支付订单,重新下单。