THINKPHP Yansongda 微信支付回调处理

说的无益,看代码就行了  更多支付方式请到快速入门 | Pay

不会使用微信支付的请去看THINKPHP Yansongda 微信H5支付,公众号支付这篇已作出详细方法

下面看回调方法的使用

public function notify()
    {
        $pay = Pay::wechat($this->config); // 跟支付的配置一样
        try{
            $verifyData       = $pay->verify()->toArray();  // 是的,验签就这么简单!
            error_log(print_r($verifyData,1),3,'weixinpay1.log');  // 打印回调数据
            // TODO::参照如下内容 修改自己的业务逻辑
            // 1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号;
            // 2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额);
            // 3、校验通知中的seller_id(或者seller_email) 是否为out_trade_no这笔单据的对应的操作方(有的时候,一个商户可能有多个seller_id/seller_email);
            // 4、其它业务逻辑情况 修改订单状态、[发短信、推送 请使用事件机制]等
            // updateWechatPayNotify()  自定义业务逻辑处理方法
            if (true === $this->updateWechatPayNotify($verifyData)) {
                return $pay->success();
            }
            error_log(print_r($data,1),3,'weixinpay2.log');
        } catch (\Exception $e) {
            $err = [
                'errorCode' => $e->getCode(),
                'errorMsg'  => $e->getMessage(),
                'errorFile' => $e->getFile() . ' [ ' . $e->getLine() . ' ]',
                'errorData' => $e->getTraceAsString(),
            ];
            error_log('aliPayNotify Error' . PHP_EOL . \json_encode($err),3,LOG_PATH.'weixinpay_error.log');
        }
        // 已失败
        return 'Failed';
    }

订单处理方法 updateWechatPayNotify

    //更新订单状态
    protected function updateWechatPayNotify($verifyData){
        $outTradeNo = $verifyData['out_trade_no'];
        // 查找订单
        $orderInfo = Db::name('order')->where(['order_no'=>$outTradeNo, 'pay_status'=>0])->find();
        if (empty($orderInfo)) {
            return true;
        }
        // 金额对比 以分为单位
        $orgAmount = $verifyData['cash_fee']/100; // 回调金额
        // 修改订单状态
        $orderData = [
            'transaction_id'   => $verifyData['transaction_id'],
            'pay_status'  => 1,
            'pay_time'   => time(),
            'pay_sum'  => $orgAmount,
            'pay_source' => 'xcx',
        ];
        Db::startTrans();
        $res = Db::name('order')->where(['id'=>$orderInfo['id']])->update($orderData);
        if($res){
            // 更新用户过期时间
            Db::commit();
            return true;
        }else{
            Db::rollback();
            return false;
        }
    }

你可能感兴趣的:(thinkcmf,thinkphp,支付类,微信,php)