热门搜索 : 电子合同   签署   产品
首页 > 文档中心 > 三网手机实名认证 > 示范代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
<?php
 
//https协议是否需要验证证书
define('SSL_VERIFYPEER', true);
 
$key = '您申请的key,在会员中心->我的数据->对应数据的下方'; //请确认您的key为新版本的key,新版本key为32位;旧版本16位;
$url="https://v.1dq.com/api/a3";
$param["appid"]="您的appid,在会员中心->安全设置->对应数据->appid";
$param['realName'] = '寻程';
$param['cardNo'] = '123456789';
$param['mobile'] = '15618181818';
 
$calldata = APIStore::curl($url,$param,$key);
 
var_dump($calldata);
 
 
 
/**
 * APIStore
 * Class APIStore
 */
class APIStore
{
 
 
    /**
     * 获取远程内容
     * @param $url
     * @param null $param
     * @param $key
     * @return mixed
     */
    static public function curl($url, $param, $key)
    {
 
        //aes
        $aes = new Aes($key);
        $sign = $aes->encrypt(json_encode($param, JSON_UNESCAPED_UNICODE));
        //重新组建数组
        $params['appid'] = $param['appid'];
        $params['sign'] = $sign;
 
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
 
        //如果是https协议
        if (stripos($url, "https://") !== FALSE) {
            /**
             * 如果需要验证证书
             */
            if (SSL_VERIFYPEER) {
                //验证交换证书
                curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
                //检查SSL证书公用名是否存在,并且是否与提供的主机名匹配
                curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);
                //设置实现协议为TLS1.0版本
                curl_setopt($curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);
                //根证书文件路径,相对路径和绝对路径均可,
                //推荐使用绝对路径;为了安全证书文件最好不要和应用代码放在一起;
                //用户请保持更新 使用https接口需要设置该证书文件为可信任根证书,
                //以最大限度满足安全性(使用信任任何证书的方式并不安全)。
                curl_setopt($curl, CURLOPT_CAINFO, dirname(__FILE__) . '/cacert.pem');
            } /**
             * 如果不需要验证证书
             */
            else {
                curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
                curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
                //CURL_SSLVERSION_TLSv1
                curl_setopt($curl, CURLOPT_SSLVERSION, 1);
            }
        }
 
        //USERAGENT
        curl_setopt($curl, CURLOPT_USERAGENT, 'APIStore');
        //超时时间
        curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 120);
        curl_setopt($curl, CURLOPT_TIMEOUT, 120);
        //通过POST方式提交
        curl_setopt($curl, CURLOPT_POST, true);
        curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($params));
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        //返回内容
        $callbcak = curl_exec($curl);
 
        //关闭
        curl_close($curl);
        //解密
        $callbcakdata = $aes->decrypt($callbcak);
        //返回内容
        return json_decode($callbcakdata ? $callbcakdata : $callbcak, true);
    }
 
}
 
/**
 * Class Aes128
 */
class Aes
{
    //密钥
    private $appkey;
 
    public function __construct($key)
    {
        $this->appkey = $key;
    }
 
    /**
     * 加密方法
     * @param string $str
     * @return string
     */
    public function encrypt($str)
    {
        //AES, 128 ECB模式加密数据
        //$screct_key = $this->appkey;
        $screct_key = hex2bin($this->appkey);
        $str = trim($str);
        $str = $this->addPKCS7Padding($str);
        $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC), MCRYPT_RAND);
        $encrypt_str = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $screct_key, $str, MCRYPT_MODE_CBC, '0000000000000000');
        return base64_encode($encrypt_str);
    }
 
    /**
     * 解密方法
     * @param string $str
     * @return string
     */
    public function decrypt($str)
    {
        //AES, 128 ECB模式加密数据
        $screct_key = hex2bin($this->appkey);
        $str = base64_decode($str);
        //$screct_key = base64_decode($screct_key);
        $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC), MCRYPT_RAND);
        $encrypt_str = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $screct_key, $str, MCRYPT_MODE_CBC, '0000000000000000');
        $encrypt_str = $this->stripPKSC7Padding($encrypt_str);
        return $encrypt_str;
    }
 
    /**
     * 填充算法
     * @param string $source
     * @return string
     */
    function addPKCS7Padding($source)
    {
        $source = trim($source);
        $block = mcrypt_get_block_size('rijndael-128', 'cbc');
        $pad = $block - (strlen($source) % $block);
        if ($pad <= $block) {
            $char = chr($pad);
            $source .= str_repeat($char, $pad);
        }
        return $source;
    }
 
    /**
     * 移去填充算法
     * @param string $source
     * @return string
     */
    function stripPKSC7Padding($source)
    {
        $char = substr($source, -1);
        $num = ord($char);
        $source = substr($source, 0, -$num);
        return $source;
    }
}