SomepayController.php 3.5 KB
<?php
// +----------------------------------------------------------------------
// | bronet [ 以客户为中心 以奋斗者为本 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2013-2017 http://www.bronet.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
namespace app\portal\controller;

use cmf\controller\HomeBaseController;
use think\Db;



class SomepayController extends HomeBaseController
{
    public function _initialize()
    {
        parent::_initialize();
//        微信
        require_once EXTEND_PATH . "WxpayAPI/lib/WxPay.Api.php";
        require_once EXTEND_PATH . "WxpayAPI/example/WxPay.JsApiPay.php";
        require_once EXTEND_PATH . "WxpayAPI/lib/WxPay.Notify.php";
        require_once EXTEND_PATH . 'WxpayAPI/example/log.php';
    }

//    微信支付
    public function pay($openId , $price , $order_sn , $url,$content)
    {
        $price = intval($price * 100);
        $tools = new \JsApiPay();
        $input = new \WxPayUnifiedOrder();
        $input->SetBody($content);
        $input->SetAttach($content);
        $input->SetOut_trade_no($order_sn);
        $input->SetTotal_fee($price);
        $input->SetTime_start(date("YmdHis"));
        $input->SetTime_expire(date("YmdHis", time() + 600));
        $input->SetGoods_tag($content);
        $input->SetNotify_url($url);
        $input->SetTrade_type("JSAPI");
        $input->SetOpenid($openId);
        $config = new \WxPayConfig();
        $order = \WxPayApi::unifiedOrder($config, $input);
        $jsApiParameters = $tools->GetJsApiParameters($order);
        return json_decode($jsApiParameters);
    }





    //微信回调
    public function pay_notify()
    {
        $config = new \WxPayConfig();
        $notify = new \WxPayNotify();
        $notify->Handle($config, false);
        $xml = file_get_contents("php://input");
        $a['a'] ='333';
        Db::name('Test')->insertGetId($a);
        $base = new \WxPayResults();
        $a['a'] ='888';
        Db::name('Test')->insertGetId($a);
        $data = $base->FromXml($xml);
        $a['a'] ='234';
        $a['c'] = json_decode($data);
        Db::name('Test')->insertGetId($a);
        //验签
        if ($base->CheckSign($config)) {
            if ($data["return_code"] == "SUCCESS") {
                $a['a'] ='99';
                $a['c'] = json_decode($data);
                Db::name('Test')->insertGetId($a);
//                支付成功
                Db::startTrans();
////                更新主表状态
                $where_orderN['order_sn'] = $data['out_trade_no'];
                $where_orderN['status'] = 3;
                $where_orderN['pay_time'] = time();
                $order = Db::name('Order')->where($where_orderN)->find();
                if($order){
                    $up_order['status'] = 10;
                    $up_order['update_time'] = time();
                    $up_order['trans_id'] = $data['transaction_id'];
                    $res_order = Db::name('Order')->where($where_orderN)->update($up_order);
                    if($res_order){
                        Db::commit();
                        return true;
                    }else{
                        Db::rollback();
                        return false;
                    }
                }

            }
        }
    }




}