NotifyController.php 3.0 KB
<?php
/**
 * Created by PhpStorm.
 * User: 29925
 * Date: 2018/6/13
 * Time: 17:53
 */

namespace app\portal\controller;

use cmf\controller\HomeBaseController;
use think\Db;
use api\portal\model\OrderModel;

class NotifyController extends HomeBaseController
{

    // 微信支付回调
    public function notify() {
        require_once VENDOR_PATH."WxpayAPI/lib/WxPay.Api.php";
        require_once VENDOR_PATH."WxpayAPI/lib/WxPay.Notify.php";
        require_once VENDOR_PATH.'WxpayAPI/example/log.php';

        $post = $this->request->param();
        if($post==null){
            $post = file_get_contents("php://input");
            if($post == null){
                $post = $GLOBALS['HTTP_RAW_POST_DATA'];
            }
        }
        if(!empty($post)) {
            $xml = $post;  //微信的回调数据
            $base = new \WxPayResults();            //实例化数据对象结果类
            $data = $base->FromXml($xml);
            if($base->CheckSign() == true){
                if ($data["return_code"] == "SUCCESS") {
                    $order_sn = $where['order_sn'] = $data['attach'];
                    if (!$where['order_sn']) {
                        $where['order_sn'] = $data['out_trade_no'];
                    }
//                    $where['money'] = $data['total_fee']/100;
                    $where['money'] = 1;
                    $order_model = new OrderModel();
                    $orderInfo = $order_model->where(['order_sn'=>$order_sn])->find();
                    if($orderInfo['status'] == 1) {
                        $info = [
                            'pay_type'=>1,
                            'pay_time'=>time(),
                            'status'=>2,
                            'transaction_id'=>$data['transaction_id']
                        ];
                        $results = $order_model->where($where)->update($info);
                        if($results) {
                            $this->return_success();
                        }
                    }
                }
            }
        }
    }

    /*
     * 给微信发送确认订单金额和签名正确,SUCCESS信息
     */
    private function return_success(){
        $return['return_code'] = 'SUCCESS';
        $return['return_msg'] = 'OK';
        $xml_post = '<xml>
                    <return_code>'.$return['return_code'].'</return_code>
                    <return_msg>'.$return['return_msg'].'</return_msg>
                    </xml>';
        echo $xml_post;exit;
    }

    // 查询订单是否支付完成
    public function searchStatus() {
        if($this->request->isAjax()) {
            $data = $this->request->param();
            $order_sn = $data['order_sn'];
            $user_licence_model = Db::name('UserLicence');
            $status = $user_licence_model->where(['order_sn'=>$order_sn])->value('status');
            if($status == 1) {
                return ['code'=>1,'msg'=>'支付成功'];
            } else {
                return ['code'=>0,'msg'=>'未支付完成'];
            }
        }
    }
}