致力于提供有竞争力的软件解决方案和服务,德尚网络欢迎您!
技术/产品咨询
技术/产品咨询
    • - 微信扫一扫 -

      QQ:181814630

      电话:15116362044

DSO2O演示
DSMall演示
DS多平台演示
  • DSPlatform(多平台系统)演示地址及账号
    支持普通店铺,外卖店铺,上门家政,上门服务,视频教育等,Thinkphp8.0+uniapp+mysql+Vue3,拓展性强,商户可开多个不同类型店铺,
    演示角色 演示地址 账号 密码
    后台PC端 点击进入 test 123456
    商户PC端(可开多个店铺) 点击进入 seller 123456
    店铺管理PC端 点击进入 seller 123456
    手机端 点击进入 test 123456
    骑手端 点击进入 test 123456
    师傅端 点击进入 test 123456
    短视频 点击进入 test 123456
    DSPlatform(多平台系统)uniapp移动端二维码演示地址
    • 用户端

    • 机构端

支付回调模块

线上支付成功后,异步回调最终统一都要经过/home/payment/notify来处理支付成功的后续操作。通过支付插件中的verify_notify验证成功,调用paymentlogic模型中的updateOrder方法进行处理。

        $logic_payment = model('payment', 'logic');
        $result = $logic_payment->getPaymentInfo($payment_code);
        $payment_info = $result['data'];
 
        //创建支付接口对象
        $payment_api = new $payment_info['payment_code']($payment_info);
 
        //对进入的参数进行远程数据判断
        $verify = $payment_api->verify_notify();
        if ($verify['trade_status'] != 1) {
            exit;
        }
        $out_trade_no = $verify['out_trade_no']; #内部订单号
        $trade_no = $verify['trade_no']; #交易订单号
        $order_type = $verify['order_type']; #交易类型
 
        $update_result = $logic_payment->updateOrder($out_trade_no, $trade_no, $order_type, $show_code?$show_code:$payment_code);
        exit($update_result ? 'success' : 'fail');

在updateOrder方法中,分别处理了三种支付情况:实物订单、虚拟订单、预存款充值,是通过out_trade_no参数进行判断的。

        $out_trade_no = current(explode('_', $out_trade_no));
        if ($order_type == 'real_order') {
            $order = $this->getRealOrderInfo($out_trade_no);
            if (intval($order['data']['api_paystate'])) {
                //订单已支付
                return true;
            }
            $order_list = $order['data']['order_list'];
            $result = $this->updateRealOrder($out_trade_no, $payment_code, $order_list, $trade_no);
        }elseif($order_type == 'vr_order') {
            $order = $this->getVrOrderInfo($out_trade_no);
            if ($order['data']['order_state'] != ORDER_STATE_NEW) {
                //订单已支付
                return true;
            }
            $result = $this->updateVrOrder($out_trade_no, $payment_code, $order['data'], $trade_no);
        }elseif($order_type == 'pd_order') {
            $order = $this->getPdOrderInfo($out_trade_no);
            if ($order['data']['pdr_payment_state'] == 1) {
                //订单已支付
                return true;
            }
            $result = $this->updatePdOrder($out_trade_no, $payment_code, $order['data'], $trade_no);
        }
        return $result['code'] ? TRUE : FALSE;

 

如果是实物订单,支付成功后,则更新订单状态为已付款,并给卖家发送通知,然后生成订单日志。

如果是虚拟订单,支付成功后,则更新订单状态为已付款,并且发放虚拟兑换码,同时通知买家和卖家。

如果是预存款充值,支付成功后,则更新用户在平台中的预存款余额。



上一篇:虚拟订单模块

下一篇:计划任务模块