getConfig(); // var_dump('
', $config);

	// 接口URL(测试)
	$api_url = $config['pay_url'];

	// 加个body字段传中文试试

	// 组装交易报文
	$reqsn_prefix = date('Ymd');
	// var_dump("uniq_id(reqsn)");
	// echo "\r\n";
	// var_dump(uniqid($reqsn_prefix));
	$trade_data = array(
		'orgid' => $config['org_num'],
		'cusid' => $config['cusid'],
		'branchno' => $config['branchno'],
		'termcode' => $config['termcode'],
		'version' => $config['version'],
		'trxamt' => '1',
		'reqsn' => uniqid($reqsn_prefix),
		'producp' => 'JX0002',
		'transtype' => 'JSP511',
		'paytype' => 'W01',
		'randomstr' => md5( uniqid() ),
		'body' => 'pages'
	);

    	// 生成签名
	$sign = $Base->Crypt->makeSign($trade_data);
	if($sign === false)
	{
		echo $Base->Crypt->err_msg;
		die();
	}
	// echo "\r\n";
	// echo "[sign]: {$sign}";
	// die();

	// 加密交易报文
	$crypted_trade_data = $Base->Crypt->encryptTradeData($trade_data);
	if($crypted_trade_data === false)
	{
		echo $Base->Crypt->err_msg;
		die();
	}
	// echo "\r\n";
	// echo "[crypted message]: {$crypted_trade_data}";
	// die();

	// 发送报文
	// echo "\r\n";
	// var_dump($api_url);
	$response = $Base->Request->send($api_url, $crypted_trade_data, $sign);
	if($response === false)
	{
		echo $Base->Request->err_msg;
		die();
	}

	// echo "\r\n";
	// echo "[response message]: {$response}";

	// 解析响应报文
	$response = json_decode($response, true);
	$response_data_crypted = $response['data'];
	$response_sign = $response['sign'];
	// echo "\r\n";
	// echo "[response sign]: {$response_sign}";
	// echo "\r\n";
	// echo "[response data (ciphertext)]: {$response_data_crypted}";

	// 解密响应密文
	$response_data = $Base->Crypt->decryptTradeData($response_data_crypted);
	if($response_data === false)
	{
		echo $Base->Crypt->err_msg;
		die();
	}
	// echo "\r\n";
	// echo "[response data(clear text)]: {$response_data}";
	// die();
    }


    /**
     * 生成支付代码
     * @param   array $order 订单信息
     * @param   array $payment 支付方式信息
     */
    public function get_code($order, $payment)
    {
        if (! defined('CHARSET')) {
            $charset = 'utf-8';
        } else {
            $charset = CHARSET;
        }
        include_once(BASE_PATH.'helpers/payment_helper.php');
        // $gateway = 'http://wappaygw.alipay.com/service/rest.htm?';
        // // 请求业务数据
        // $req_data = '' .
        // '' . $order['order_sn'] . '' .
        // '' . $order['order_sn'] . 'O' . $order['log_id'] . '' .
        // '' . $order['order_amount'] . '' .
        // '' . $payment['alipay_account'] . '' .
        // '' . return_url(basename(__FILE__, '.php')) . '' .
        // '' . __URL__.'alipay.php' . '' .
        // '' . $order['consignee'] . '' .
        // ''.__URL__.'' .
        // '3600' .
        // '';

        $parameter = array(
            'service' => 'alipay.wap.trade.create.direct', // 接口名称
            'format' => 'xml', // 请求参数格式
            'v' => '2.0', // 接口版本号
            'partner' => $payment['alipay_partner'], // 合作者身份ID
            'req_id' => $order['order_sn'] . $order['log_id'], // 请求号,唯一
            'sec_id' => 'MD5', // 签名方式
            'req_data' => $req_data, // 请求业务数据
            "_input_charset" => $charset
        );

        ksort($parameter);
        reset($parameter);
        $param = '';
        $sign = '';

        foreach ($parameter as $key => $val) {
            $param .= "$key=" . urlencode($val) . "&";
            $sign .= "$key=$val&";
        }

        $param = substr($param, 0, - 1);
        $sign = substr($sign, 0, - 1) . $payment['alipay_key'];

        // 请求授权接口
        $result = \libraries\Http::doPost($gateway, $param . '&sign=' . md5($sign));
        $result = urldecode($result); // URL转码
        $result_array = explode('&', $result); // 根据 & 符号拆分

        // 重构数组
        $new_result_array = $temp_item = array();
        if (is_array($result_array)) {
            foreach ($result_array as $vo) {
                $temp_item = explode('=', $vo, 2); // 根据 & 符号拆分
                $new_result_array[$temp_item[0]] = $temp_item[1];
            }
        }
        $xml = simplexml_load_string($new_result_array['res_data']);
        $request_token = (array) $xml->request_token;

        // 请求交易接口
        $parameter = array(
            'service' => 'alipay.wap.auth.authAndExecute', // 接口名称
            'format' => 'xml', // 请求参数格式
            'v' => $new_result_array['v'], // 接口版本号
            'partner' => $new_result_array['partner'], // 合作者身份ID
            'sec_id' => $new_result_array['sec_id'],
            'req_data' => '' . $request_token[0] . '',
            'request_token' => $request_token[0],
            '_input_charset' => $charset
        );

        ksort($parameter);
        reset($parameter);
        $param = '';
        $sign = '';

        foreach ($parameter as $key => $val) {
            $param .= "$key=" . urlencode($val) . "&";
            $sign .= "$key=$val&";
        }

        $param = substr($param, 0, - 1);
        $sign = substr($sign, 0, - 1) . $payment['alipay_key'];

        /* 生成支付按钮 */
        $button = '微信大连支付';

        return $button;
    }

    /**
     * 同步通知
     * @param $data
     * @return mixed
     */
    public function callback($data)
    {
        if (! empty($_GET)) {
            include_once(BASE_PATH.'helpers/payment_helper.php');
            $out_trade_no = explode('O', $_GET['out_trade_no']);
            $log_id = $out_trade_no[1];
            $payment = get_payment($data['code']);

            /* 检查数字签名是否正确 */
            ksort($_GET);
            reset($_GET);

            $sign = '';
            foreach ($_GET as $key => $val) {
              if ($key != 'sign' && $key != 'sign_type' && $key != 'code') {
                $sign .= "$key=$val&";
              }
            }
            $sign = substr($sign, 0, - 1) . $payment['alipay_key'];
            if (md5($sign) != $_GET['sign']) {
              return false;
            }

            if ($_GET['result'] == 'success') {
              /* 改变订单状态 */
              order_paid($log_id, 2);
              return true;
            } else {
              return false;
            }
        }else{
            return false;
        }
    }

    /**
     * 异步通知
     * @param $data
     * @return mixed
     */
    public function notify($data)
    {
        if (! empty($_POST)) {
            include_once(BASE_PATH.'helpers/payment_helper.php');
            $payment = get_payment($data['code']);
            // 支付宝系统通知待签名数据构造规则比较特殊,为固定顺序。
            $parameter['service'] = $_POST['service'];
            $parameter['v'] = $_POST['v'];
            $parameter['sec_id'] = $_POST['sec_id'];
            $parameter['notify_data'] = $_POST['notify_data'];
            // 生成签名字符串
            $sign = '';
            foreach ($parameter as $key => $val) {
                $sign .= "$key=$val&";
            }
            $sign = substr($sign, 0, - 1) . $payment['alipay_key'];
            // 验证签名
            if (md5($sign) != $_POST['sign']) {
                exit("fail");
            }
            // 解析notify_data
            $data = (array) simplexml_load_string($parameter['notify_data']);
            // 交易状态
            $trade_status = $data['trade_status'];
            // 获取支付订单号log_id
            $out_trade_no = explode('O', $data['out_trade_no']);
            $log_id = $out_trade_no[1]; // 订单号log_id
            if ($trade_status == 'TRADE_FINISHED' || $trade_status == 'TRADE_SUCCESS') {
                /* 改变订单状态 */
                order_paid($log_id, 2);
                /*if(method_exists('WechatController', 'do_oauth')){
                    //如果需要,微信通知
                    $order_id = model()->table('order_info')->field('order_id')->where(array('order_sn'=>$out_trade_no[0]))->one();
                    $order_url = U('user/order/detail', array('order_id'=>$order_id), true);
                    $order_url = urlencode(base64_encode($order_url));
                    //send_wechat_message('pay_remind', '', $out_trade_no[0].' 订单已支付', $order_url, $out_trade_no[0]);
                }*/
                exit("success");
            } else {
                exit("fail");
            }
        } else {
            exit("fail");
        }
    }

    /**
     * 订单查询
     * @return mixed
     */
    public function query($order, $payment)
    {

    }


}