$this->agetId, 'custId'=>"60000008228471", 'timeStamp'=>time(), 'version'=>"1.0.0" ]; $d =$this->ASCII($data); $data['sign'] = $this->sign($d,$this->publicKey); $b = json_encode($data,true); $url = self::build_url("yyfsevr/order/connectCust"); $result = $this->curl_post($url,$b); } public function wxPay($money='1'){ $user_id = $this->user_id; $user_id = 979; $user = Db::name("user_auth")->where("user_id",$user_id)->find(); // $publicKey = "-----BEGIN PUBLIC KEY----- //MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwRUsPpbQPhBWrxFhG00k9VBgnHc7dCZyTQYIZ0efDEZOPHtDfbldfBDlfZglvfUsVuxea4NffzkbCm9pakoQilSy7hioiF8sxhUYxpwFIbx15KaQsjpeCtu5yOr3bKb5qZNzf+QtL70EDPfdVdZ5mBlO7CMa01W7CtqkxBlc4iSfVeavFK7rzOJpTAoamHdcdjtffYlNAsg2q3I1SDIUkiasVCo+BtNgzLY+7y1mSt9SbXO5nCMBT9DQVqsccBHu4SYS6kExISfLDjfeAldgtNtMuuyESiyp53EEk/Xe8JzrrjnHloHB63H47TxElsApAEmz0dabJyMBqT8Ow/m5OQIDAQAB //-----END PUBLIC KEY-----"; $user_id = 979; $data = [ 'agetId'=>$this->agetId, 'custId'=>"60000008228471", 'orderNo'=>"dlh".time().$user_id, 'txamt'=>$money, 'openid'=>$user['openid'], 'payWay'=>"1", 'ip'=>$_SERVER['REMOTE_ADDR'], 'timeStamp'=>time(), 'version'=>"1.0.0", 'wxAppid'=>'wx586d77b9edb0636d', 'traType'=>'8' ]; $d =$this->ASCII($data); $data['sign'] = $this->sign($d,$this->publicKey); $b = json_encode($data,true); $url = self::build_url("yyfsevr/order/pay"); $result = $this->curl_post($url,$b); } // 查询mcc public function checkMcc(){ $data = [ 'agetId'=>$this->agetId, 'type'=>"1", 'version'=>"1.0.0" ]; $d =$this->ASCII($data); $sign = $this->sign($d,$this->publicKey); $url = self::build_url('yyfsevr/addCust/getTopMcc', $d ."&sign=" . $sign); $result = $this->curl_get($url); $r = $result['data']; foreach($r as $key=>$value){ $data_arr['mccName'] = $value['mccName']; $data_arr['update_time'] = date("Y-m-d H:i:s"); $mcc = Db::name("gt_mcc") ->where("parent_id",0) ->where("state",1) ->where("busMccId",$value['busMccId']) ->find(); if($mcc == null){ $data_arr['busMccId'] = $value['busMccId']; $data_arr['dtime'] = date("Y-m-d H:i:s"); Db::name("gt_mcc")->save($data_arr); }else{ if($mcc['mccName'] != $value['mccName'] ){ Db::name("gt_mcc")->where("mcc_id",$mcc['mcc_id'])->update($data_arr); } } } print("
");
        var_dump($result);
    }

    // 获取二级mcc
    public function checkSecondMcc(){
        $data = [
            'agetId'=>$this->agetId,
            'busMccId'=>"278",
            'version'=>"1.0.0"
        ];
        $d =$this->ASCII($data);
        $sign = $this->sign($d,$this->publicKey);
        $url = self::build_url('yyfsevr/addCust/getSecondMcc', $d ."&sign=" . $sign);

        $result = $this->curl_get($url);
    }
    // 获取省
    public function getProvince(){
        $data = [
            'agetId'=>$this->agetId,
            'version'=>"1.0.0"
        ];
        $d =$this->ASCII($data);
        $sign = $this->sign($d,$this->publicKey);
        $url = self::build_url('yyfsevr/addCust/getProvince', $d ."&sign=" . $sign);

        $result = $this->curl_get($url);
    }
    // 获取市
    public function getCity(){
        $data = [
            'agetId'=>$this->agetId,
            'code'=>'',
            'version'=>"1.0.0"
        ];
        $d =$this->ASCII($data);
        $sign = $this->sign($d,$this->publicKey);
        $url = self::build_url('yyfsevr/addCust/getCity', $d ."&sign=" . $sign);

        $result = $this->curl_get($url);
    }

    // 获取区县
    public function getArea(){
        $data = [
            'agetId'=>$this->agetId,
            'code'=>'',
            'version'=>"1.0.0"
        ];
        $d =$this->ASCII($data);
        $sign = $this->sign($d,$this->publicKey);
        $url = self::build_url('yyfsevr/addCust/getCity', $d ."&sign=" . $sign);

        $result = $this->curl_get($url);
    }

    // 银行信息查询
    public function getBankInfo()
    {
        $data = [
            'agetId'=>$this->agetId,
            'version'=>"1.0.0"
        ];
        $d = $this->ASCII($data);
        $sign = $this->sign($d, $this->publicKey);
        $url = self::build_url('yyfsevr/addCust/getBankInfo', $d ."&sign=" . $sign);
        $result = $this->curl_get($url);
        if ($result['code'] == '000000') {
            return $result['data'];
        }
        return [];
    }

    // 获取银行省信息-联行号
    public function getPublicProvince()
    {
        $data = [
            'agetId'=>$this->agetId,
            'version'=>"1.0.0"
        ];
        $d = $this->ASCII($data);
        $sign = $this->sign($d, $this->publicKey);
        $url = self::build_url('yyfsevr/addCust/getPublicProvince', $d ."&sign=" . $sign);
        $result = $this->curl_get($url);
        if ($result['code'] == '000000') {
            return $result['data'];
        }
        return [];
    }

    /**
     * 获取银行市信息-联行号
     * $code: 省编码 调用“获取银行省信息-联行号”接口获取
     */
    public function getPublicCity($code)
    {
        $data = [
            'agetId'=> "FWH000015822",
            'code'=> $code,
            'version'=> "1.0.0"
        ];
        $d = $this->ASCII($data);
        $sign = $this->sign($d, $this->publicKey);
        $url = self::build_url('yyfsevr/addCust/getPublicCity', $d ."&sign=" . $sign);
        $result = $this->curl_get($url);
        if ($result['code'] == '000000') {
            return $result['data'];
        }
        return [];
    }

    /**
     * 查询联行号信息
     * $bankCode:调用“银行信息查询”接口获取
     * $code: 省编码 调用“获取银行省信息-联行号”接口获取
     * $bankName:支行名称
     */
    public function getBranchInfo($bankCode, $code, $bankName)
    {
        $data = [
            'agetId'=> "FWH000015822",
            'bankCode'=> $bankCode,
            'code'=> $code,
            'bankName' => $bankName,
            'version'=> "1.0.0"
        ];
        $d = $this->ASCII($data);
        $sign = $this->sign($d, $this->publicKey);
        $url  = self::build_url('yyfsevr/addCust/getBranchInfo', $d ."&sign=" . $sign);
        $result = $this->curl_get($url);
        if ($result['code'] == '000000') {
            return $result['data'];
        }
        return [];
    }

    /**
     * @return string
     */
    public function getAgetId(): string
    {
        return $this->agetId;
    }

    // 异步支付回调
    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 static function build_url($uri = '', $params = '')
    {
        $url = self::$url . $uri;
        if ($params) {
            return $url . '?' . $params;
        }
        return $url;
    }

    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;
    }
}