关于FecMall 支付页面接口: /checkout/payment/add 传递的参数:order_increment_id 和 session token 保存的payment_no的问题

FecMall 技术分享 · Fecmall · 于 4年前 发布 · 1744 次阅读

查看代码:

1.controller: https://github.com/fecmall/yii2_fecmall_fbbcbase/blob/master/app/appserver/modules/Checkout/controllers/PaymentController.php#L42

2.block:https://github.com/fecmall/yii2_fecmall_fbbcbase/blob/master/app/appserver/modules/Checkout/block/payment/Add.php#L22

分析

1.在sales_flat_order 表有一个字段 payment_no 订单交易编码, 当生成订单的时候, 如果购物车产品是多个商户,那么生成多个订单,多个订单的payment_no是相同的,查看代码:https://github.com/fecmall/yii2_fecmall_fbbcbase/blob/master/services/Order.php#L878

同时,将这个payment_no写入到token session(通过fecshop uuid存储在redis的值)中 ,查看代码:https://github.com/fecmall/yii2_fecmall_fbbcbase/blob/master/services/Order.php#L980

2.在订单生成后,payment_no写入到token session,然后跳转到payment页面,这种情况没有参数传递, 而是从token session中取出来payment_no,然后进行支付。

另外一种是从账户中心的订单部分,点击支付按钮过来的,这种是通过参数传递的,也就是order_increment_id,然后将这个写入到token session

当支付完成,返回网站的时候,从token session中取出来保存的值,然后通过 https://github.com/fecmall/yii2_fecmall_fbbcbase/blob/master/services/Order.php#L386 来辨别是订单表(sales_flat_order)的字段increment_id 还是payment_no, 通过这个函数可以看到原理:https://github.com/fecmall/yii2_fecmall_fbbcbase/blob/master/services/Order.php#L995

function paymentCodeIsPaymentNo($pay_no)
    {
        if (substr($pay_no, 0, 7) == 'pay_no_' ) {
            return true;
        }
        return false;
    }

为什么要这样做?

因为:1.要支持多商户产品,一次生成多个订单一起支付的情况,还要支持2.账户中心单个订单进行支付的情况,因此通过payment_no的编号都是以'pay_no_'开头来辨别。

共收到 0 条回复
没有找到数据。
添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册
Your Site Analytics