公司接了个广联达实名制对接的活,今天分享一下代码。代码为thinkphp框架开发,请家人们多多指教。
# 对接网址
protected static $apiurl = 'https://glm.glodon.com';
// protected static $apiurl = 'https://glm-test.glodon.com/';
# 请求封装成一个方法
public static function postdata($appid, $secret, $projectCode,$body, $posturl)
{
$headers = [
"Content-Type: application/json; charset=utf-8",
];
# 查询数据库获取appid等信息
# 时间戳
$timestamp = date('YmdHis', time());
# 随机字符
$nonce = self::randstrpay();
$strdata = json_encode($body);
# 加密请求数据
$aesdata = (new Aes())->gldencrypt($strdata,$secret,substr($secret,0,16));
$data=[
"appId" => $appid,
"projectCode" => $projectCode,
"nonce" => $nonce,
"timestamp" => $timestamp,
"sign" => self::sign($appid, $secret, $projectCode, $aesdata, $nonce, $timestamp),
"data" => $aesdata
];
$url = self::$apiurl.$posturl;
// var_dump($data);
//向该URL,发送Post请求
$data = json_encode($data);
// var_dump($data);
$result = self::get_curl_request($url,$data,"POST" ,$headers);
// var_dump($result);
// sleep(10);
return $result;
}
# 签名方法
public static function sign($appid, $secret, $projectCode, $data, $nonce, $timestamp)
{
$string = $secret.'appId='.$appid.'&data='.$data.'&nonce='.$nonce.'&projectCode='.$projectCode.'×tamp='.$timestamp.''.$secret;
$str = md5(strtolower($string));
return $str;
}
# 生成随机32位字符
public static function randstrpay($length=32) {
$rand='';
$randstr= 'abcdefghijklmnopqrstuvwxyz0123456789';
$max = strlen($randstr)-1;
mt_srand((double)microtime()*1000000);
for($i=0;$i<$length;$i++) {
$rand.=$randstr[mt_rand(0,$max)];
}
return $rand;
}
# 请求方法重写
public static function get_curl_request($url, $param = [], $mothod = 'POST', $headers = [], $return_status = 0, $flag = 0)
{
$ch = curl_init();
if (!$flag) {
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
}
//内网需要开启代理
//curl_setopt($ch, CURLOPT_PROXY, "127.0.0.1");
//curl_setopt($ch, CURLOPT_PROXYPORT, 12639);
curl_setopt($ch, CURLOPT_TIMEOUT, 6);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
if (strtolower($mothod) == 'post') {
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $param);
} else {
$url = $url . "?" . http_build_query($param);
}
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 2);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$ret = curl_exec($ch);
$code = curl_getinfo($ch);
curl_close($ch);
if ($return_status == "1") {
return array($ret, $code);
}
return $ret;
}