user_id;var_dump($user_id); // $user_id = 979; $user = Db::name("user_auth")->where("user_id",$user_id)->find(); $out = "dlh".time().$user_id; $data = [ 'agetId'=>$this->agetId, 'custId'=>$this->custId, 'orderNo'=>$out, 'txamt'=>$money*100, 'openid'=>$user['openid'], 'payWay'=>"1", 'ip'=>$_SERVER['REMOTE_ADDR'], 'timeStamp'=>time(), 'version'=>"1.0.0", 'wxAppid'=>$this->wxAppid, 'traType'=>'8' ]; $da['orderNo'] = $out; $da['txamt'] = $money*100; $da['user_id'] = $user_id; $da['local_goods_id'] = $local_goods_id; $da['lstore_id'] = $lid; $da['dtime'] = date("Y-m-d H:i:s"); $r['id'] = Db::name("gt_pay")->insertGetId($da); $d =$this->ASCII($data); $data['sign'] = $this->sign($d,$this->publicKey); // print_r("
");
//        var_dump($data);
        $b = json_encode($data,true);
//        var_dump($b);
        $url = "https://yyfsvxm.postar.cn/yyfsevr/order/pay";
        $result = $this->curl_post($url,$b);
        $r['nonceStr'] = $result['data']['jsapiNoncestr'];
        $r['package'] = $result['data']['jsapiPackage'];
        $r['signType'] = $result['data']['jsapiSignType'];
        $r['timeStamp'] = $result['data']['jsapiTimestamp'];
        $r['paySign'] = $result['data']['jsapiPaySign'];
        return JsonServer::success('开始支付',$r);
    }
    public function checkOrder($post){
        // $user_id = $this->user_id;
        $user_id = $post['user_id'];
        $gtpay_msg = Db::name("gt_pay")->where("id",$post['id'])->find();
        $data = [
            'agetId'=>$this->agetId,
            'custId'=>$this->custId,
            'orderNo'=>$gtpay_msg['orderNo'],
            'orderTime'=>date("Ymd",strtotime($gtpay_msg['dtime'])),
            'timeStamp'=>time(),
            'version'=>"1.0.0"
        ];
        // print_r("
");
        // var_dump($data);
        $d =$this->ASCII($data);
        $data['sign'] = $this->sign($d,$this->publicKey);
//        print_r("
");
//        var_dump($data);
        $b = json_encode($data,true);
//        var_dump($b);
        $url = "https://yyfsvxm.postar.cn/yyfsevr/order/orderQuery";
        $result = $this->curl_post($url,$b);
//        var_dump($result);
        return $this->account($result,$post,$user_id,$gtpay_msg);
    }
    public function account($result,$post,$user_id,$gtpay_msg){
        // var_dump($result);
        $sidy = 0.7;
        $sidy1 = 0.03;
        $sidy2 = 0.05;
        $sidy3 = 0.22;
        if(isset($post['spec_item_id'])){
            $sku_num_msg = Db::name("local_store_goods_item")
                ->where("id",$post['spec_item_id'])
                ->find();
            if($sku_num_msg!=null){
                $data['goods_id'] = $sku_num_msg['goods_id'];
                $local_goods_msg = Db::name("local_store_goods")
                    ->where("id",$sku_num_msg['goods_id'])
                    ->find();
                if($local_goods_msg['subsidy_id'] == 0){
                    $sidy = 0.7;
                    $sidy1 = 0.03;
                    $sidy2 = 0.05;
                    $sidy3 = 0.22;
                }else{
                    $subsidy = Db::name("goods_subsidy")
                        ->where("id",$local_goods_msg['subsidy_id'])
                        ->find();
                    $sidy = round($subsidy['profit']/100,2);
                    $sidy3 = round((100-$subsidy['profit']-8)/100,2);
                }
            }
            $data['sku_id'] = $post['spec_item_id'];
        }
        if(isset($post['lsg_order_id'])){
            $data['lsg_order_id'] = $post['lsg_order_id'];
            if(isset($post['post_station_time'])){
                $year = date("Y");
                $post_station_time = $year.'-'.$post['post_station_time'];
                $post_station_time = strtotime($post_station_time);
                LocalGoodsOrder::where('lsg_order_id',$post['lsg_order_id'])->update(
                    [
                        'post_station_id'=>$post['post_station_id'],
                        'post_station_time'=>$post_station_time
                    ]
                );
            }
        }
        if(isset($post['goods_num'])){
            $data['goods_num'] = $post['goods_num'];
        }
        $data['order_sn'] = $gtpay_msg['orderNo'];
        $data['order_source'] = 1;
        $data['pay_way'] = 1;
        $data['pay_status'] = 0;
        $data['local_id'] = $post['lid'];
        $data['user_id'] = $user_id;
        $data['order_amount'] = round($gtpay_msg['txamt']/100,2);
        $data['pay_type'] = 1;
        $data['gt_orderno'] = $result['data']['orderNo'];
        $data['create_time'] = date("Y-m-d H:i:s");
        $r = Db::name("local_pay")->save($data);

        $company = Db::name("local_store")->where("lstore_id",$post['lid'])->where("is_delete",0)->find();
        $dt['lstore_id'] = $post['lid'];
        $dt['payment_type'] = $company['bankType'];
        $dt['total_amount'] = round($gtpay_msg['txamt']/100,2);
        $dt['account_name'] = $company['shopName'];
        $dt['bank_name'] = $company['bankName'];
        $dt['bank_card'] = $company['bankCard'];
        $dt['large_number'] = $company['largeNumber'];
        $dt['separate_account'] = round($gtpay_msg['txamt']/100*$sidy,2);
        $dt2['separate_account'] = round($gtpay_msg['txamt']/100*$sidy3,2);
        $dt3['separate_account'] = round($gtpay_msg['txamt']/100*$sidy1,2);
        if($post['lid'] == 138){
            $dt['separate_account'] = round($gtpay_msg['txamt']/100*0.72,2);
            $dt2['separate_account'] = round($gtpay_msg['txamt']/100*0.20,2);
        }
        if($post['lid'] == 140){
            $dt['separate_account'] = round($gtpay_msg['txamt']/100*0.76,2);
            $dt2['separate_account'] = round($gtpay_msg['txamt']/100*0.22,2);
            $dt3['separate_account'] = 0;
        }
        $dt['create_time'] = date("Y-m-d H:i:s");
        $dt['user_id'] = $user_id;
        $dt['order_no'] = $gtpay_msg['orderNo'];
        $dt['pay_shop_type'] = 1;
        if( isset($post['remark'])){
            $dt['remark'] = $post['remark'];
        }
        $r = Db::name("local_store_order")->save($dt);
        // 基本户 5%
        $dt1['lstore_id'] = $post['lid'];
        $dt1['payment_type'] = 1;
        $dt1['account_name'] = "东龙汇";
        $dt1['bank_name'] = "中国工商银行";
        $dt1['bank_card'] = "1204068809100138961";
        $dt1['large_number'] = "102335006882";
        $dt1['separate_account'] = round($gtpay_msg['txamt']/100*$sidy2,2);
        $dt1['create_time'] = date("Y-m-d H:i:s");
        $dt1['user_id'] = $user_id;
        $dt1['local_our_company'] = 1;
        $dt1['order_no'] = $gtpay_msg['orderNo'];
        $r1 = Db::name("local_store_order")->save($dt1);
// 22% 一般户
        $dt2['lstore_id'] = $post['lid'];
        $dt2['payment_type'] = 1;
        $dt2['account_name'] = "东龙汇";
        $dt2['bank_name'] = "中国工商银行";
        $dt2['bank_card'] = "1204064019200152507";
        $dt2['large_number'] = "102335006405";

        $dt2['create_time'] = date("Y-m-d H:i:s");
        $dt2['user_id'] = $user_id;
        $dt2['local_our_company'] = 2;
        $dt2['order_no'] = $gtpay_msg['orderNo'];
        $r2 = Db::name("local_store_order")->save($dt2);
        // 10% 一般户
        $dt3['lstore_id'] = $post['lid'];
        $dt3['payment_type'] = 1;
        $dt3['account_name'] = "东龙汇";
        $dt3['bank_name'] = "中国工商银行";
        $dt3['bank_card'] = "1204064419000115357";
        // $dt3['bank_card'] = "1204068809100138961";
        // $dt3['large_number'] = "102335006882";
        $dt3['large_number'] = "102335006448";
//        $dt3['separate_account'] = round($post['money']*0.06,2);
        $dt3['create_time'] = date("Y-m-d H:i:s");
        $dt3['user_id'] = $user_id;
        $dt3['local_our_company'] = 3;
        $dt3['order_no'] = $gtpay_msg['orderNo'];
        $r3 = Db::name("local_store_order")->save($dt3);

        $arr=array("ACC_DETAIL"=>array(
            array(
                "ACC_CUST_ID"=>$company['acc_cust_id'],
                "ACC_DATE"=>round($gtpay_msg['txamt']/100*$sidy,2)
            ),
            // 基本户
            array(
                "ACC_CUST_ID"=>"60000008228471",
                "ACC_DATE"=>round($gtpay_msg['txamt']/100*$sidy2,2)
            ),
            // 一般户2507
            array(
                "ACC_CUST_ID"=>"60000008435142",
                "ACC_DATE"=>round($gtpay_msg['txamt']/100*$sidy3,2)
            ),
            //一般户5357
            array(
                "ACC_CUST_ID"=>"60000008435087",
                "ACC_DATE"=>round($gtpay_msg['txamt']/100*$sidy2,2)
            )));
        $arr = json_encode($arr,true);
        $data = [
            'agetId'=>$this->agetId,
            'custId'=>$this->custId,
            'orderNo'=>$result['data']['orderNo'],
            'areaId'=>$this->areaId,
            'accModel'=>"1",
            'accWay'=>"1",
            'orderAccDetail'=>$arr,
            'timeStamp'=>time(),
            'version'=>"1.0.0",
            'remark'=>'订单分账',
            'accTxamt'=>$gtpay_msg['txamt']
        ];
        $d =$this->ASCII($data);
        $data['sign'] = $this->sign($d,$this->publicKey);
//        print_r("
");
//        var_dump($data);
        $b = json_encode($data,true);
//        var_dump($b);
        $url = "https://yyfsvxm.postar.cn/yyfsevr/order/account";
        $res = $this->curl_post($url,$b);
        if($res['code'] == "000000"){
            $dat['state'] = 1;
            $dat['taskCreateDate'] = $res['data']['taskCreateDate'];
            $dat['taskId'] = $res['data']['taskId'];
            Db::name("gt_pay")->where("id",$gtpay_msg['id'])->update(['state'=>1]);
            Db::name("local_store_order")->where("order_no",$gtpay_msg['orderNo'])->update(['state'=>1]);
            Db::name("local_pay")->where("order_sn",$gtpay_msg['orderNo'])->update(['pay_status'=>1]);
            if(isset($post['lsg_order_id'])){
                LocalGoodsOrder::where('lsg_order_id',$post['lsg_order_id'])->update(
                    [
                        'state'=>1
                    ]
                );
            }
            $user = Db::name("user")->where("id",$user_id)->find();
            $distribution = Db::name("distribution")->where("user_id",$user_id)->find();
            // 参与消费返补
            $billions = new Billions();
            $order['order_amount'] = round($gtpay_msg['txamt']/100,2);
            $this->playAudio($post['lid'], $order['order_amount']);

            $order['id'] = $gtpay_msg['id'];
            $order['order_sn'] = $gtpay_msg['orderNo'];
            $order['type'] = 4;
            $type = "local_pay";
            $billions_result = $billions->billions($order,$user['id'],$type);
            return JsonServer::success('分账成功');
        }
    }
    public function accountResult(){
        $data = [
            'agetId'=>"FWH000025501",
            'custId'=>"60000008228471",
            'orderNo'=>"20241129TT2lg6ln",
            'areaId'=>"20241128184516",
            'taskCreateDate'=>"20241129",
            'taskId'=>"1099295",
            'timeStamp'=>time(),
            'version'=>"1.0.0"
        ];
        $d =$this->ASCII($data);
        $data['sign'] = $this->sign($d,$this->publicKey);
        print_r("
");
        var_dump($data);
        $b = json_encode($data,true);
        var_dump($b);
        $url = "https://yyfsvxm.postar.cn/yyfsevr/order/accountResult";
        $result = $this->curl_post($url,$b);
        var_dump($result);
    }

    // 异步支付回调
    public function payNotify(){

    }
    //异步提现回调
    public function payWithdrawal(){

    }
    //异步进件
    public function inComing(){

    }
    function ASCII($params=array()){
        ksort($params);
        reset($params);
        $str = "";
        $t = array();
        foreach($params as $key=>$value){
            $t[] = $key."=".$value;
        }

        $str = implode("&",$t);
//        $str = http_build_query($params,'','&');
        return $str;
    }
    public function sign($param,$key_pem)
    {
        $sha256 = hash("sha256", $param);
        $privateKey = openssl_pkey_get_public($key_pem); //检测是否公钥
        openssl_public_encrypt($sha256, $sign, $privateKey); //公钥加密
        $sign = base64_encode($sign);
        return $sign;
    }
    private function curl_post($url,$postdata){
        $curl = curl_init(); // 启动一个CURL会话
        curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检测
        curl_setopt($curl, CURLOPT_HTTPHEADER, array(
            'Expect:'
        )); // 解决数据包大不能提交
        curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
        curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer
        curl_setopt($curl, CURLOPT_POST, 1); // 发送一个常规的Post请求
        curl_setopt($curl, CURLOPT_POSTFIELDS, $postdata); // Post提交的数据包
        curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循
        curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容
        curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
// curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查
        $tmpInfo = curl_exec($curl); // 执行操作
        if (curl_errno($curl)) {
            echo 'Errno' . curl_error($curl);
        }
        curl_close($curl); // 关键CURL会话
        $tmpInfo=json_decode($tmpInfo,true);
        return $tmpInfo;
    }
    private function curl_get($url) {
        //初使化curl
        $curl = curl_init();
        //请求的url,由形参传入
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检测
        curl_setopt($curl, CURLOPT_HTTPHEADER, array(
            'Expect:'
        )); // 解决数据包大不能提交
        //将得到的数据返回
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        //不处理头信息
        curl_setopt($curl, CURLOPT_HEADER, 0);
        //连接超过10秒超时
        curl_setopt($curl, CURLOPT_TIMEOUT, 30);
        curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
        curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
        curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer
        curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容
//        curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
        //执行curl
        $output = curl_exec($curl);
        if (curl_errno($curl)) {
            echo 'Errno' . curl_error($curl);
        }
        //关闭资源
        curl_close($curl);
        //返回内容
        $tmpInfo=json_decode($output,true);
        return $tmpInfo;
    }

    private function playAudio($lstore_id, $money) {
        if (!$lstore_id && !$money) {
            return;
        }

        $sound = LocalStoreCloudAudio::where('lstore_id', $lstore_id)->field('sn, version, message')->find();

        if (!$sound) {
            return;
        }

        $message = $sound['message'] ?? CloudAudioServer::MESSAGE;
        CloudAudioServer::send([
            'id' => $sound['sn'],
            'version' => $sound['version'],
            'message' => "{$message},{$money}",
        ]);
    }
}