欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

aes,rsa加密解密

程序员文章站 2024-03-14 13:51:16
...

class pieceAction extends baseAction{
private parameters;//64privatepublic_key = “—–BEGIN PUBLIC KEY—–
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAo/fi2xqinU/MdQ6ie3sN
m8F278V7a1Y8Rwdfar/gICFkA6GVNqovqGINWQxn/nfzMTcHZazJlGfv5YhIbDfE
AqByzseibvQfbluDG/pEJsSCMoicxyaAQmSpNpFT72f+FpmHR0wrnYSNWs2fyQdt
GuqD+RIcPfiBMTQh/Cy7yOyT395CLveNFNurxffW0EJpaJCslYrBLqye76kcVOx1
Y0VPU/3PKSDQoJ3FC9DGn6zQ8bKZNmD10yW1LgJqtO2XivX7JJVKW4gJpdEmjslr
WwcVhKbbA27UX3lf+XoC1KkFLmfbVRoDo7x5DRUl28izmSFFas//WJ6GYYjzlmhq
PwIDAQAB
—–END PUBLIC KEY—–”;
private privatekey=BEGINPRIVATEKEYMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCj9+LbGqKdT8x1DqJ7ew2bwXbvxXtrVjxHB19qv+AgIWQDoZU2qi+oYg1ZDGf+d/MxNwdlrMmUZ+/liEhsN8QCoHLOx6Ju9B9uW4Mb+kQmxIIyiJzHJoBCZKk2kVPvZ/4WmYdHTCudhI1azZ/JB20a6oP5Ehw9+IExNCH8LLvI7JPf3kIu940U26vF99bQQmlokKyVisEurJ7vqRxU7HVjRU9T/c8pINCgncUL0MafrNDxspk2YPXTJbUuAmq07ZeK9fsklUpbiAml0SaOyWtbBxWEptsDbtRfeV/5egLUqQUuZ9tVGgOjvHkNFSXbyLOZIUVqz/9YnoZhiPOWaGo/AgMBAAECggEAO72nc/kiYnqenc+1N5RAAw3cDcRAEX2b/K0dAMHkIRDJZeFLgl1De/AtuNIiWb7OZpIMKelokJ/F8jVTXcp7qhFXgyuNbSuZABZrkJgAmLdkUJEhvhWzCX2vgWg10rZrB0Ts2vdPtNaEwh7FJvODtxjW+Lq2e4W9XHYII98QlEW4n4nT1YON8EfoqvhsbRGgNoi59jOSNsji4qxlHcaQQFLDz49Z55VMXk+uvoeA0xe8ga2BGOITxudn/HrpB0xlM+T3C/WWv0oAyZvwb/J0OYqgzg7f9mESqGd0qTXfXycBqI5+uR32zMnOq2H2bQr1ZjhxZMimQ3D0iebQY5CEIQKBgQDYP6imE3hxYi2/92zVXLs6ipTOzi8YwUShERpfgTLQoKXqdTDko+SY80mIgBbhMp0CVlSbygjjPutDi6WD+7LfmCVFGaDy9edGhB6KPYhW4RY++UHSKfGXIGLmAtrYC7B5cxuInYzqLx3CSmcL4PzAjBiZbOWuFssyYxfGNd9CyQKBgQDCG/284Nu5NxDjhUjG2tYvL+IsT+LpZNFG7Ziq6753w8UGHPiDm9KSVuT7fMy1QpmUDd58SxiIKILCYyQrjRtzQ/6AeE20mO5ybUYtHmIp5bNm7ghnSiLZRDYXqiGYNzkqEQXfD6v6Lz9dnKfzGAz1NDXw1Hz+QL2Ffr0O/T+AxwKBgQDSHViCtZxrnteRFJn83jNVeF2Ka7A7P16tmW6kqWZ0bAOKQgAVyGFPc+RY6wxQF9uS78sZ7D6ifvodEUzrZt6wfqaH85T9PY1QaQM7kvosYFw7J/maeQKystclYlS9Yu4/s2ZnYZ4P1WP26lAhrKQpenZUbQjmFGOvO7VX8/RQcQKBgE3T9U/XBKJlrtLa7Qw2UCyJUXEc8slL0BFVUKIvdaYFi6jg0s/KGYrtZlBjgJyowHU5flxtq79kJtGT+LuxjzEPMSsHkXh43RpqL/oFNazA2cbKZ/oqIoDktZ+VanTip3vzaVw/p1/fs9Nv7XMt0Hw8W+hc+mTjRloRL/KjneOfAoGBANcCV1d9gF1MupNt/JAQzS+iPVuRdDyOAvy8WrD2ctmdSSVN0KAYb+4ADBYblUFt1LzjVm/Kb6jMTSlZaHytybDjABKU6qjM0F1EYgH5LaDA8EQBV4a6abPFpL2r4qXB5n68H6KYILV8UwEqTUTG5+ngaIkyeQBFfXY4Ixm871iLENDPRIVATEKEY;//aesaes//privateaes_key;
private keyiv;//privateother_public_key =”MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqVzL/VFmIrW4QZAtHZ+NShHdEAl+0QquI7u2ya2AMwMycHOvvLVI95gSM5oC0GEcAN1PhfotSAoeXKW1J3t0o/zMnPrFhsa486VJysHapWnv7DjDunN7i0OCJ+3Jit5DDM2CfSpot/4DSfeXY+s/szEsf1n0837q1UPlRyHzHWCZ3I79mUAQdU+7dr/mJ9XNnG0s79uUJxTfShyGqDONaTwj5Ebed5IrO7QMZWSNjMCeEYpy2xi46TFw/TImCkNM7c1q+28VwzgKIybx+YJbdXSlQuBJvzLh8hVIIPh8UvIiGe7LayKVywWj6Bq06Ts2X85G1oRN3X6GasdbLiOlUwIDAQAB”;
private cfg=;protectedmethod=”;

public function _initialize()
{
    parent::_initialize();
    if ( !function_exists( 'hex2bin' ) ) {
        function hex2bin( $str ) {
            $sbin = "";
            $len = strlen( $str );
            for ( $i = 0; $i < $len; $i += 2 ) {
                $sbin .= pack( "H*", substr( $str, $i, 2 ) );
            }
            return $sbin;
        }
    }
    $this->_cfg = array(
        'second_url'=>'http://tapi.hrtxpay.com/router',
        'pay_url' =>'http://testapi.xmkzry.com/router',
        'gate_url'=>'http://api.xmkzry.com/router',

// ‘notify_url’=>’111’,//支付异步回调地址
‘app_key’=>’WQ4G6HPWE05UMU47’,//’1234567890123456’,//’WQ4G6HPWE05UMU47’,
‘app_account’=>’165080754535613288’,//’123456’,//’165080754535613288’,
‘app_secret’=>’WQ4G6HPWE05UMU47’,//’1234567890123456’,//’WQ4G6HPWE05UMU47’,
‘method’=>$this->method,
‘v’=>’1.0’,
‘format’=>’json’,
‘callBack’=>’http://csqht.hespay.com/api.php/piece/callback‘,
);
}

/**
 *  生成指定长度的随机字符串(包含大写英文字母, 小写英文字母, 数字)
 */
public function random_str($length)
{
    //生成一个包含 大写英文字母, 小写英文字母, 数字 的数组
    $arr = array_merge(range(0, 9), range('a', 'z'), range('A', 'Z'));

    $str = '';
    $arr_len = count($arr);
    for ($i = 0; $i < $length; $i++)
    {
        $rand = mt_rand(0, $arr_len-1);
        $str.=$arr[$rand];
    }

    return $str;
}

/**
 * 请求处理
 * $data  请求业务数据
 * $url   请求地址
 * $n_sign不参与加密的参数数组
 * 返回数组  应答报文数组,验签失败返回 array('errorCode'=>"9999","message"=>"验签失败")
 */
public function postData($data,$url,$n_sign,$method_name = "idCard") {
    ksort($data);
    $post_string = '';
    foreach ($data as $key => $value) {
        if ($value !== '') {
            $post_string .= $key . '=' . $value . '&';
        }
    }
    $post_string = substr($post_string, 0, -1);

    //随机生成16位的aes密匙key和向量
    $this->aes_key = $this->random_str(16);//'6AAeB6eA6B9FdaAd';//$this->random_str(16);
    $this->key_iv = $this->random_str(16);//'FF0505949fE5DA86';//$this->random_str(16);

    //aes加密
    $encrypt_data = $this->encrypt($post_string,$this->aes_key,$this->key_iv);    //aes加密

    //组合aes的密匙和向量
    $aes_string = $this->aes_key.'-'.$this->key_iv;

    //用rsa公钥加密aes密匙-组合  内部包含了base64编码
    $encrypt_key = $this->publicEncrypt($this->other_public_key,$aes_string);

    //rsa密匙签名请求报文 内部包含了base64编码
    $sign_data = $this->privateEncrypt($this->private_key,$post_string);

    $this->setParameter('method',$method_name);
    $this->setParameter('appKey',$this->_cfg['app_account']);  //165080754535613288
    $this->setParameter('v','1.0');
    $this->setParameter('format','json');
    $this->setParameter('encryptData',$encrypt_data);
    $this->setParameter('encrtptKey',$encrypt_key);
    $this->setParameter('signData',$sign_data);
    $this->setParameter('sign',$this->getSign());
    //照片不参与签名
    foreach ($n_sign as $key => $value) {
        $this->setParameter($key,$value);
    }

    $this->_fileLog($this->getAllParameters(),"请求参数发送地址:".$url);
    $result = $this->requestCurl($url);

    //返回数据
    //得到返回的结果  接下来对返回结果进行解密和验证签名
    $result = json_decode($result,1);
    $this->_fileLog($result,"返回结果记录:");

    if($result['data']) {
        //平台公钥加密的结果  我方用私钥解密  得到aes**-向量
        $get_encrtpt_Key = $result['data']['encrtptKey'];
        //先获取aes的key 和 向量
        $aes_data = $this->privateDecrypt($get_encrtpt_Key, $this->private_key);
        $aes_data = explode('-', $aes_data);
        $put_aes_key = $aes_data['0'];
        $pur_aes_vi = $aes_data['1'];

        //aes解密获取报文数据
        $get_encrypt_data = $result['data']['encryptData'];
        $put_data = $this->decrypt($get_encrypt_data, $put_aes_key, $pur_aes_vi);

        //对报文数据 去掉空格
        $put_data = trim($put_data);

        //对报文数据 进行RSA签名验证
        $get_signData = $result['data']['signData'];

        $sign_info = $this->publicDecrypt($get_signData, $put_data, $this->other_public_key);
        //验证返回为true表明验证通过,否则验证没通过

        if ($sign_info) {
            $new_data = '';
            $put_data = explode('&', $put_data);
            foreach ($put_data as $key => $value) {
                $name = explode('=', $value);
                $new_data[$name['0']] = $name['1'];
            }
            $this->_fileLog($new_data,"返回解密数据:");
            return $new_data;//返回解密后的业务数据
        } else {
            return array('errorCode' => "9999", "message" => "验签解密失败");
        }
    }else{
        return $result;//返回结果 无加密数据
    }
}

public function hasstring($source,$target){
    preg_match_all("/$target/sim", $source, $strResult, PREG_PATTERN_ORDER);
    return !empty($strResult[0]);
}

/*
 * 子商户认证接口
 * 所有的参数来源将用$this->params 数组 进行存储
 */

public function auth()
{
//1组装参数数据
//2获取银行简码处理
if(this->params['bankName'] != '中国银行' &&this->hasstring(this>params[bankName],))$bank=substr($this>params[bankName],6);else$bank=$this>params[bankName];bank = D("bank_code")->where(array('bank_name'=>bank))>find();shortcode = bank[bankcode];if(!shortcode){
this->resError(“未找到对应的银行简码”);          }data = array(
‘accName’ => this>params[accName],accNo=>this->params[‘accNo’],
‘bankName’ => this>params[bankName],bankShortcode=>shortcode,
‘branchName’ => this>params[branchName],contactMobile=>this->params[‘contactMobile’],
‘contactName’ => this>params[contactName],idcard=>this->params[‘idcard’],
‘merCityCode’ => this>params[merCityCode],merDistrictCode=>this->params[‘merDistrictCode’],
‘merFullname’ => this>params[merFullname],merProvinceCode=>this->params[‘merProvinceCode’],
);

    //[email protected]请求数据保存数据库
    $add = array(
        'name' => $this->params['merFullname'],
        'idcard' => $this->params['idcard'],
        'mobile' => $this->params['contactMobile'],
        'bankno' => $this->params['accNo'],
        'channelno' => $this->params['channelno'],
    );

    $res = D("qht_user")->where(array('channelno'=>$this->params['channelno'],'idcard'=>$this->params['idcard'], 'bankno' => $this->params['accNo']))->find();
    if($res){
        //认证
        if($res['subcode'] && $res['status_auth'] == 1){
            $return = array(
                'status'=>200,
                'data'=>$res['subcode'],
            );
            exit(json_encode($return));
        }
    }else{
        D("qht_user")->add($add);
    }
    //3不验签数据
    $n_sign = array(
        'legalPhotoPos' => '[email protected]' . $this->base64EncodeImage($this->params['legalPhotoPos']),
        'legalPhotoNeg' => '[email protected]' . $this->base64EncodeImage($this->params['legalPhotoNeg']),
        'idcardPhotoHalf' => '[email protected]' . $this->base64EncodeImage($this->params['idcardPhotoHalf']),
        'idcardDebitPhoto' => '[email protected]' . $this->base64EncodeImage($this->params['idcardDebitPhoto'])
    );

    //@todo未认证false请填写变量
    $url = $this->_cfg['second_url'];

    $method_name = "certification";
    $json = $this->postData($data, $url, $n_sign, $method_name);

    if(!empty($json['subCode'])){
        $save = array(
          'subcode'=>$json['subCode'],
            'status_auth'=>1
        );
        D("qht_user")->where(array('channelno'=>$this->params['channelno'],'idcard'=>$this->params['idcard'], 'bankno' => $this->params['accNo']))->save($save);
        $return = array(
            'status'=>200,
            'data'=>$json['subCode'],
        );
        echo json_encode($return);
    }else{
        $save = array(
            'status_auth'=>2
        );
        D("qht_user")->where(array('channelno'=>$this->params['channelno'],'idcard'=>$this->params['idcard'], 'bankno' => $this->params['accNo']))->save($save);
        $return = array(
            'status'=>201,
            'messgae'=>'认证失败',
        );
        echo json_encode($return);
    }
}

/**
 *子商户进件接口
 */
public function report(){

    $data = array(
        'channelNumber'=>$this->params['channelNumber'],
        'drawalFee'=>$this->params['drawalFee'],
        'tradeRate'=>$this->params['tradeRate'],
        'subCode'=>$this->params['subcode'],
    );

    //保存进件数据
    $save = array(
        'fee'=>$this->params['drawalFee'],
        'rate'=>$this->params['tradeRate'],
        'channelno'=>$this->params['channelNumber'],
    );

    $re = D("qht_user")->where(array('channelno'=>$this->params['channelno'],'idcard'=>$this->params['idcard'], 'bankno' => $this->params['bankno']))->find();
    if($re){
        $res = D("qht_user")->where(array('channelno'=>$this->params['channelno'],'idcard'=>$this->params['idcard'], 'bankno' => $this->params['bankno']))->save($save);
        if($res['status_reg'] == 1){
            $return = array(
                'status'=>200,
                'message'=>'进件成功'
            );
            exit(json_encode($return));
        }
    }

    $url = $this->_cfg['second_url'];
    $method_name = "merchantChannel";
    $n_sign = array();

    $json = $this->postData($data, $url, $n_sign,$method_name);

    //$json['errorCode'] == 200
    if($json['errorCode'] == "200"){
        $save = array(
            'status_reg'=>1
        );
        D("qht_user")->where(array('channelno'=>$this->params['channelno'],'idcard'=>$this->params['idcard'], 'bankno' => $this->params['accNo']))->save($save);
        $return = array(
            'status'=>200,
            'message'=>'进件成功'
        );
        echo json_encode($return);
    } elseif ($json['errorCode'] == "100"){
        $return = array(
            'status'=>200,
            'message'=>$json['message']
        );
        echo json_encode($return);
    }else{
        $return = array(
            'status'=>201,
            'message'=>$json['message']
        );
        echo json_encode($return);
    }
}

/**
 *子商户支付接口
 */
public function pay(){

    $order = D('order_ftf')->where(array('orderid'=>$this->params['orderId']))->find();
    if(!$order){
        //生成订单记录
        $order = array(
            'orderid'=>$this->params['orderId'],
            'name'=>$this->params['accName'],
            'card_no'=>$this->params['idcard'],
            'bank_sub'=>$this->params['bank_sub'],
            //银行卡号
            'bank_no'=>$this->params['bank_no'],
            'bank_province'=>$this->params['bank_province'],
            'bank_city'=>$this->params['bank_city'],
            //信用卡号
            'paybanknum'=>$this->params['creditCard'],
            'mobile'=>$this->params['mobile'],
            'amount'=>$this->params['amount'],
            'notify_url'=>$this->params['notifyUrl'],
            'front_url'=>$this->params['frontUrl'],
            'addtime'=>time(),
            'partner'=>$this->params['partner'],
            'userrate'=>$this->params['userrate'],
            'fees'=>$this->params['fee']
        );
        //生成订单记录
        $order = D('order_ftf')->add($order);
    }

    //组装数据,发送请求
    $data = array(
        'accName'=>$this->params['accName'],
        'amount'=>$this->params['amount'],
        'callBackUrl'=>$this->_cfg['callBack'],
        'channelNumber'=>$this->params['channelNumber'],
        'channelTag'=>'1',
        'creditCard'=>$this->params['creditCard'],
        'frontUrl'=>$this->params['frontUrl'],
        'idcard'=>$this->params['idcard'],
        'orderId'=>$this->params['orderId'],
        'settleType'=>'1',
        'subCode'=>$this->params['subcode'],
    );

    $url = $this->_cfg['second_url'];
    $method_name = "quickPay";
    $n_sign = array();

    $result = $this->postData($data, $url, $n_sign,$method_name);

    //$result['RetCode'] == '0000'
    if($result['RetCode'] == '0000'){
        $up = D('order_ftf')->where(array('sn' => $this->params['orderId']))->save(array('payurl'=>$result['Page']));
        $rs = array(
            'status' => 200,
            'data' =>array(
                'Amount'=>$result['Amount'],
                'MerchOrderId'=>$result['MerchOrderId'],
                'MerchantId'=>$result['MerchantId'],
                'OrderId'=>$result['OrderId'],
                'Page'=>$result['Page'],
                'Sign'=>$result['Sign'],
                'TradeTime'=>$result['TradeTime'],
                'Version'=>$result['Version'],
            ),
        );
        echo json_encode($rs);
    }else{
        $rs = array(
            'status' => 201,
            'message' =>'请求失败',
        );
        echo json_encode($rs);
    }
}

/**
 *认证信息变更接口
 */
public function updateauth(){
    //1组装参数数据
    //2获取银行简码处理
    if($this->params['bankName'] != '中国银行' && $this->hasstring($this->params['bankName'],'中国')){
        $bank = substr($this->params['bankName'],6);
    }else{
        $bank = $this->params['bankName'];
    }
    $bank = D("bank_code")->where(array('bank_name'=>$bank))->find();
    $shortcode = $bank['bank_code'];
    if(!$shortcode){
        $this->resError("未找到对应的银行简码");
    }
    $data = array(
        'subCode'=>$this->params['subCode'],
        'merProvinceCode'=>$this->params['merProvinceCode'],
        'merCityCode'=>$this->params['merCityCode'],
        'merDistrictCode'=>$this->params['merDistrictCode'],
        'accNo'=>$this->params['accNo'],
        'bankShortcode'=>$shortcode,
        'bankName'=>$this->params['bankName'],
        'branchName'=>$this->params['branchName'],
    );

    $url = $this->_cfg['second_url'];
    $method_name = "updateCertification";
    $n_sign = array();

    $result = $this->postData($data, $url, $n_sign,$method_name);

    if($result['errorCode'] == 200){
        $save = array(
            'bankno'=>$this->params['accNo'],
        );
        D("qht_user")->where(array('channelno'=>$this->params['channelNumber'],'idcard'=>$this->params['idcard'],'bankno'=>$this->params['bankno']))->save($save);

        $return = array(
            'status'=>200,
            'message'=>$result['message']
        );
        echo json_encode($return);
    }else{
        $return = array(
            'status'=>201,
            'message'=>$result['message']
        );
        echo json_encode($return);
    }
}

/**
 *费率变更接口
 */
public function updaterate(){
    $data = array(
        'tradeRate'=>$this->params['tradeRate'],
        'drawalFee'=>$this->params['drawalFee'],
        'channelNumber'=>$this->params['channelNumber'],
        'subCode'=>$this->params['subCode'],
    );

    $url = $this->_cfg['second_url'];
    $method_name = "updateMerchantChannel";
    $n_sign = array();

    $result = $this->postData($data, $url, $n_sign,$method_name);

    if($result['errorCode'] == 200){
        $save = array(
            'rate'=>$this->params['tradeRate'],
    'fee'=>$this->params['drawalFee'],
        );
        D("qht_user")->where(array('channelno'=>$this->params['channelNumber'],'idcard'=>$this->params['idcard'], 'bankno' => $this->params['bankno']))->save($save);
        $return = array(
            'status'=>200,
            'message'=>$result['message']
        );
        echo json_encode($return);
    }else{
        $return = array(
            'status'=>201,
            'message'=>$result['message']
        );
        echo json_encode($return);
    }
}

private function decdata($rs){
    $rs = str_replace(' ','',$rs);

    $new_data = '';//分解后的数组数据
    $put_data = explode('&', $rs);
    foreach ($put_data as $key => $value) {
        $name = explode('=', $value);
        $new_data[$name['0']] = $name['1'];
    }
    //1先获取aes的key 和 向量

    $get_encrtpt_Key = $new_data['encrtptKey'];

    $aes_data = $this->privateDecrypt($get_encrtpt_Key, $this->private_key);

    $aes_data = explode('-', $aes_data);
    $put_aes_key = $aes_data['0'];
    $pur_aes_vi = $aes_data['1'];

    $data = $this->decrypt($new_data['encryptData'], $put_aes_key, $pur_aes_vi); //解密数据
    $this->_fileLog($data,"解密结果:");
    return $data;
}

/**
 *支付异步回调地址
 * 
 */
public function callback(){

    $rsHttp = file_get_contents('php://input');
    $bb = urldecode($rsHttp);
    $str = $this->decdata($bb);

    $params = '';//分解后的数组数据
    $put_data = explode('&', $str);
    foreach ($put_data as $key => $value) {
        $name = explode('=', $value);
        $params[$name['0']] = $name['1'];
    }

    $merchantCode = $params['merchantCode'];
    $orderId = $params['orderId'];
    $supOrderId = $params['supOrderId'];
    $status = $params['status'];
    $amount = $params['amount'];
    $incomeAmount = $params['incomeAmount'];
    $payTime = $params['payTime'];
    $message = $params['message'];
    $subcode = $params['subCode'];

    if($status==1){
        $order = M('order_ftf')->where(array('orderid'=>$orderId))->find();
        // 订单数据
        if (!$order) {
            return $this->ajaxReturn(null, '查无订单信息', 3001);
        }
        $save = array(
            'paytime'=>$payTime,
            'status'=>$status,
            'supOrderId'=>$supOrderId,
            'subcode'=>$subcode,
            'merchantcode'=>$merchantCode,
            'incomeamount'=>$incomeAmount,
            'message'=>$message,
        );

        D('order_ftf')->where(array('orderid'=>$orderId))->save($save);

        $notifyData = array(
            'orderid'  => $orderId, // 订单号
            'paytime'  => $payTime, // 支付时间
            'amount'   => $amount, // 支付金额
        );

        $notifyData = apiUtil::argSort($notifyData);
        $res = strtoupper($this->notifyClient($order, $notifyData));

        if ($res == 'SUCCESS') {
            M('order_ftf')->where(array('orderid' => $orderId))->save(array('callback' => 1)); //是否回调成功
            //商户回调成功返回字符串1
            //$this->notifySuccess();
        }
    }else{
        M('order_ftf')->where(array('orderid'=>$orderId))->save(array('status'=>'3'));
        return $this->ajaxReturn(null, '支付接口回掉数据有误!', 3001);
    }
}

/**
 *支付订单查询
 */
public function order_select($orderid){
    //1获取参数
    $order = D("order_ftf")->where(array('orderid'=>$orderid))->find();
    if($order){
        $data = array(
            'orderId'=>$order['orderid'],
            'subCode'=>$order['subcode'],
            'supOrderId'=>$order['supOrderId'],
        );

        $url = $this->_cfg['second_url'];
        $method_name = "queryOrder";
        $n_sign = array();

        $data = $this->postData($data, $url, $n_sign,$method_name);

        if(!$data){
            return false;
        }else{
            return $data;
        }
    }

}


/**
 * post请求
 */
public function requestCurl($url){
    $data = $this->getAllParameters();

    $ch = curl_init();
    // 设置curl允许执行的最长秒数
    curl_setopt($ch, CURLOPT_TIMEOUT, 500);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch, CURLOPT_URL,$url);
    //发送一个常规的POST请求。
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS,http_build_query($data));
    curl_setopt($ch, CURLOPT_HEADER,0);//是否需要头部信息(否)
    // 执行操作
    $result = curl_exec($ch);
    if($result){
        curl_close($ch);
    }else{
        $err_str=curl_error($ch);
        echo($err_str);
        curl_close($ch);
    }
    #返回数据
    return $result;
}

/**
 * 获取签名
 */

public function getSign(){
data=this->getAllParameters();

    $sign_string = '';
    if (is_array($data)) {
        ksort($data);
        foreach ($data as $key => $value) {
            $sign_string .= $key . $value;
        }
    }
    $sign_string = $this->_cfg['app_secret'].$sign_string.$this->_cfg['app_secret'];
    //echo '签名'.$sign_string."<br>";
    //$new_sign = sha1($sign_string);
    $new_sign = strtoupper(sha1($sign_string));
    //echo "<br>sign值:".$new_sign;
    //$new_sign = strtoupper('af0358995ce7e6e8fcbc8d80f0af81519561d620');
    //var_dump($new_sign);
    return $new_sign;
}

/**
 * 获取图片base64位编码
 * @param $image_file
 * @return string
 */

public function base64EncodeImage (url) {image_data = file_get_contents(url);base64_image = base64_encode(imagedata);returnbase64_image;
}

/**
 * aes解密
 */
public function decrypt($input, $key,$key_iv)
{
    $encryptedData = base64_decode($input);
    $decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $encryptedData, MCRYPT_MODE_CBC, $key_iv);
    return $decrypted;
}
/**AES加密
 * @param $input
 * @param $key
 * @return string
 */
public function encrypt($input, $key,$key_iv) {
    $data = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $input, MCRYPT_MODE_CBC, $key_iv);
    return base64_encode($data);
}

/**
 * RSA私钥加密
 * @param string $private_key 私钥
 * @param string $data 要加密的字符串
 * @return string $encrypted 返回加密后的字符串
 * @author mosishu
 */

public function privateEncrypt(privateKey,data){
// 私钥密码
// passphrase=;//key_width = 64;
// pkey=array();////1//if(!stripos(privateKey, “\n” ) ){
// i=0;//while(key_str = substr( privateKey,i * keywidth,key_width) ){
// pkey[]=key_str;
// i ++ ;  //            }  //        }else{  //            //echo ‘一行?’;  //        }  //privateKey = "-----BEGIN PRIVATE KEY-----\n" . implode("\n", pkey);//privateKey = $privateKey .”\n—–END PRIVATE KEY—–”;

    //如果秘钥是不带头和尾的 就需要用上面这个转化成 带头尾的秘钥
    //私钥
    $private_id = openssl_pkey_get_private( $privateKey);
    openssl_sign($data, $signature, $private_id, OPENSSL_ALGO_SHA1 );
    openssl_free_key( $private_id );

    //加密后的内容通常含有特殊字符,需要编码转换下
    $signature = base64_encode($signature);
    return $signature;
    //下面的不可用 应删除

// encrypted=;//pi_key = openssl_pkey_get_private(privatekeytwo);//idResourceid//opensslprivateencrypt(data,encrypted,pi_key);//私钥加密
// encrypted=base64encode(encrypted);//加密后的内容通常含有特殊字符,需要编码转换下,在网络间通过url传输时要注意base64编码是否是url安全的
// return $encrypted;

    //最大允许加密长度为117,得分段加密

// plainData=strsplit(data,1);//生成**位数 1024 bit key
// foreach(plainDataaschunk){
// partialEncrypted=;//encryptionOk = openssl_private_encrypt(chunk,partialEncrypted,privatekey);////if(encryptionOk === false){
// return false;
// }
// encrypted.=partialEncrypted;
// }
//
// encrypted=base64encode(encrypted);//加密后的内容通常含有特殊字符,需要编码转换下,在网络间通过url传输时要注意base64编码是否是url安全的
// return $encrypted;
}

/**
 * RSA公钥解密(私钥加密的内容通过公钥可以解密出来)
 * @param string $public_key 公钥
 * @param string $data 私钥加密后的字符串
 * @return string $decrypted 返回解密后的字符串
 * @author mosishu
 */

public function publicDecrypt(sign,data,public_key){key_width = 64;
pkey=array();//1privateKey = “”;
if( ! stripos( public_key, “\n” )  ){i = 0;
while( keystr=substr(public_key , ikey_width , keywidth))$pkey[]=$keystr;$i++;privateKey = "-----BEGIN PUBLIC KEY-----\n" . implode("\n", pkey);privateKey .= “\n—–END PUBLIC KEY—–”;
}else{
privateKey=public_key;
}

    $pkeyid = openssl_pkey_get_public($privateKey);
    $sign = base64_decode($sign);

    $verify = openssl_verify($data, $sign, $pkeyid);

    openssl_free_key($pkeyid);
    return $verify;
}

//RSA公钥加密

public function publicEncrypt(publickey,data){
//—–BEGIN PUBLIC KEY—– —–END PUBLIC KEY—–
passphrase=;key_width = 64;
pkey=array();//1privateKey = “”;
if( ! stripos( public_key, “\n” )  ){i = 0;
while( keystr=substr(public_key , ikey_width , keywidth))$pkey[]=$keystr;$i++;privateKey = "-----BEGIN PUBLIC KEY-----\n" . implode("\n", pkey);privateKey .= “\n—–END PUBLIC KEY—–”;
}else{
privateKey=public_key;
}

    $private_id = openssl_pkey_get_public( $privateKey);
    $encrypted = '';
    //$pu_key = openssl_pkey_get_public($privateKey);
    openssl_public_encrypt($data,$encrypted,$private_id);//公钥加密
    $encrypted = bin2hex($encrypted);
    $encrypted = base64_encode($encrypted);

    return $encrypted;
}

//RSA私钥解密

public function privateDecrypt(data,private_key){
data=base64decode(data);

    $data = hex2bin($data);
    $pi_key = openssl_pkey_get_private($private_key);
    openssl_private_decrypt($data,$output,$pi_key);
    return $output;
}
/**
 * @param 设置方法
 */

public function setMethod(methodname)$this>method=$methodname;//publicfunctiongetParameter(parameter) {
return isset(this>parameters[parameter])?this>parameters[parameter]:”;
}

/**
 *设置参数值
 */

public function setParameter(parameter,parameterValue) {
this>parameters[parameter] = $parameterValue;
}

/**
 *获取所有请求的参数
 *@return array
 */

public function getAllParameters() {
return $this->parameters;
}

/**
 * 文件日志
 * @DateTime 2017-08-18T08:52:34+0800
 * @param    [type]                   $data [description]
 * @return   [type]                         [description]
 */
protected function _fileLog($data, $tag, $task = '')
{

    $content = (is_array($data) || is_object($data)) ? var_export($data, true) : $data;

    $file = MODULE_NAME . '_' . ACTION_NAME . '_' . date('Y-m-d') . '.php';
    $tag  = ($tag ? "_{$tag}" : '') . ($task ? "_{$task}" : '');
    return flog($content, $tag, $file);
}

/**
 * 记录 请求参数 和 回调记录
 * @param $params
 * @param $rs
 */
public function log($params='', $rs='')
{
    $dir = PATH_VAR . 'runtime/Api/Logs/';
    if (!file_exists($dir)) mkdir($dir);

    $datetime = date('Y-m-d H:i:s');
    $module = MODULE_NAME;
    $action = ACTION_NAME;
    $str = "[{$datetime}]  {$module}/{$action} \n";
    $str .= (var_export($params, true) . "\n");
    $str .= (var_export($rs, true) . "\n\n\n\n");

    $date = date('Ymd');
    file_put_contents($dir . "{$date}.log", $str, FILE_APPEND);

    // 删除8天前日志
    $oldDate = date('Ymd', (time() - (60 * 60 * 24 * 8)));
    if (file_exists($dir . "{$oldDate}.log")) {
        unlink($dir . "{$oldDate}.log");
    }
}

}