Openapi.php
6.8 KB
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
<?php
namespace app\api\controller\tieta;
use app\common\controller\Api;
use lib\SM4;
use think\Controller;
use think\Db;
use think\Request;
use app\common\helper\HttpHelper;
/**
* 铁塔Openapi对接
*/
class Openapi extends Api
{
protected $noNeedLogin = ['*'];//*无需验证登陆
protected $noNeedRight = ['*'];
protected $jiemi_key = "975C7238C3824FB0";
protected $appid = "df92a75c6a62bxxx";//服务商在铁塔平台的唯一标识
protected $bizContent = "3vb+juxxxWxxHlW+WxZ9yg==";//Json格式字符串sm4加密后的密文,具体加密方式见1.6章节
protected $encryptType = "SM4";//加密方式名称
protected $requestId = "fbc66379-52d4-4d9d-91d7-c2f5b21e7e43";//请求标识
protected $signType = "签名方式名称";//SM2
protected $timestamp = "1640741365952";//获取时间戳(毫秒)
protected $sign = "MEUCIQCoeDP9nkpqkLv05aN9CitEWEAbqzUv8KRx84paa464DAIgK0os3gu9wd9N1l05Wm/EzvEj7bN8v5mptbft5pq6Nus=";//通过sm2加签计算出来的签名值,具体加签方法见1.5章节
//注:公共参数在请求时拼接成querystring形式后注意使用URL编码。
//参数示例:appId=df92a75c6a62bxxx&bizContent=3vb%2xxxZuSWxxHlW%2BWxZ9yg%3D%3D&encryptType=SM4&requestId=fbc66379-52d4-4d9d-91d7-c2f5b21e7e43&sign=MEUxxxxxxDP9nkpqkLv05aN9CitEWEAbqzUv8KRx84paa464DAIgK0os3gu9wd9N1l05Wm%2FEzvEj7bN8v5mptbft5pq6Nus%3D&signType=SM2×tamp=1640741365952
public function _initialize()
{
$this->timestamp = $this->getMillisecond();
//公共请求参数
$header_data = [
"appId" => $this->appid,
"bizContent" => $this->bizContent,
"encryptType" => $this->encryptType,
"requestId" => $this->requestId,
"signType" => $this->signType,
"timestamp" => $this->timestamp,
];
//获取sign值
$this->sign = $this->sign_sm2_base64($header_data);
$header_data["sign"] = $this->sign;
dump($this->sign);
$post_string = $this->format_param($header_data);
dump($post_string);
die;
$param = $this->request->param();
parent::_initialize();
}
/**
* test
*/
public function test()
{
require_once '../extend/lib/SM4.php';
$json = '{"BUSINESS":{"BUSICODE":"10014","BUSINAME":"不动产产权数据接口"},"PARAMETER":"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"}';
$arr = json_decode($json, true);
$key = $this->jiemi_key;//解密key(16位)
$data = $arr['PARAMETER'];
$sm4 = new SM4();
// echo "\n 加密key:" . $key . "\n";
// echo "加密结果:" . $data . "\n";
$b = $sm4->decrypt($key, $data);
// echo "解密结果:" . $b . "\n";
$b = json_decode($b, true);
$this->success("解密成功", $b);
// echo "\n 加密key:" . $key . "\n";
// echo "明文:" . $data . "\n";
//// $a = $sm4->encrypt($key, $data);
// echo "加密结果:" . $a . "\n";
// $b = $sm4->decrypt($key, $a);
// echo "解密结果:" . $b . "\n";
}
/**
* 测试铁塔接口
*/
public function testrequest()
{
$url = "https://testdjyopenapi.zgscdx.cn/api/v1/hy/testrequest";
$json = [
"key1" => 1,
"key2" => 2
];
$res = HttpHelper::curl($url, 'POST', $json);
dump($res);
die;
$res = json_decode($res, true);
$this->success("", $res);
}
/**
* 国密sm2方式加签
* 所有接口在请求时需要对除sign外的所有公共参数进行字典排序后以key=value&key=value的形式,
* 例如:appId=xxx&bizContent=xxx&encryptType=SM4&requestId=xxx&signType=SM2×tamp=1640741365952
*/
public function sign_sm2_base64($data)
{
$data = $this->format_param($data);
dump($data);
die;
}
/**
* 将数组 字典升序排列 后 用&拼接
*/
public function format_param($header_data)
{
ksort($header_data);
//构造传递的参数
$post_params = [];
foreach ($header_data as $k => &$v) {
if (is_array($v)) {
$v = implode(',', $v);
}
$post_params[] = $k . '=' . urlencode($v);
}
$post_string = implode('&', $post_params);
return $post_string;
}
/**
* 获取毫秒时间戳
*/
public static function getMillisecond()
{
list($msec, $sec) = explode(' ', microtime());
$msectime = (float)sprintf('%.0f', (floatval($msec) + floatval($sec)) * 1000);
return $msectimes = substr($msectime, 0, 13);
}
}