3 Star 5 Fork 0

wlphp / jiamiapi

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
client.php 9.29 KB
一键复制 编辑 原始数据 按行查看 历史
wlphp 提交于 2017-08-22 18:01 . no commit message
<?php
header("Content-type: text/html; charset=utf-8");
/*封装调取加密接口方法*/
/*******拼接接口url开始********/
$php_self=$_SERVER['PHP_SELF'];
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
$fronturl=$protocol.$_SERVER['HTTP_HOST'].substr($php_self,0,strrpos($php_self,'/'));
$sendurl =$fronturl."/api.php/Api/index"; //接口地址入口
/*******拼接接口url结束********/
$sendjson = '[{"action":"test","username":"zhangsan","password":"1111111"}]';
$sendfile['img1'] = "@D:/WWW/jiamiapi/img1.jpg"; //上传的文件切记不要忘记加@
$sendfile['img2'] = "@D:/WWW/jiamiapi/img2.jpg";
//$returnjson = sendtointerface($sendurl, $sendjson, $sendfile); //文件上传示例,文件不采用加密模式
$returnjson = sendtointerface($sendurl, $sendjson); //不包含文件上传示例
echo $returnjson;
/**
* @param $sendurl 接口url
* @param array $sendjson 发送json数据
* @param array $sendfile 发送的文件
* @return mixed|string
*/
function sendtointerface($sendurl, $sendjson = array(), $sendfile = array())
{
$private_key = '-----BEGIN RSA PRIVATE KEY-----
MIICWwIBAAKBgQCwL+LZS88pi8wb5yrTqvBnJPlFa//gLHcQcogyqzpimtE9yDxf
8QpABXs4+fay6iWQz3ogCI/UxTHjn/FwVfIhoHZVQtdti9tSb9fqMtNTCWp/xw89
iIriP10RQkz34UvT9rvz0grSWoSu/k4pCcUhFxFntmWNdc5HTxkYYVM6UQIDAQAB
AoGAZ1MN9GVTDohfoRWGti+PYM38KcxWeP9arBie6ygjy2QDxfnB/nn7iuQsCZP+
K5rJgQ1MD7E1uJAU2+sWysx8fGYOctXp0fzNEAGcTYPC3F1dueUdZRKyi887OK2L
eQsykC4FG8w5KyveQMjwYguhpiPew942/U0OJdNouAvJoukCQQDmm1avcW5PZdDv
uK2YiA+YI4eRScsLNfJX5RN0ccHBpLARBP1thzWUT9rhJLlDM4bdiMRj3v7a37xZ
wcQcf5NbAkEAw5Z9OKJpLaAJQXtqDizxWolotG/r9GphpRt161ljnLs/H2bVqoMp
2xJchL4LjsDoo3Xo3hpc3L5u0BqSwb60wwJACaxIZZGPe/scWYHYnkZOySXsYNbE
kpLPuIoeV8sRwoqi7APWkYqTX8Y9uyXsM3ps1MwQ2NOYwxuRbf5nuH5NcwJABN4W
6bTpBzCnalDG9+lYbFdlGrB6X8/R9Ej1q1DDMOBcFsz5Xk/7V69iTA9qvDfC0maZ
0AU58Ghw2479vgKf/wJARJ5bX9h5ihZGmh3hh0aaIHKDilg3k2B3vwumzkLKVxCd
8i6l/dRjO3JvdBnTHC11Jt2zQ9LkHklfVzfx8dGvqw==
-----END RSA PRIVATE KEY-----';
$public_key = '-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCwL+LZS88pi8wb5yrTqvBnJPlF
a//gLHcQcogyqzpimtE9yDxf8QpABXs4+fay6iWQz3ogCI/UxTHjn/FwVfIhoHZV
Qtdti9tSb9fqMtNTCWp/xw89iIriP10RQkz34UvT9rvz0grSWoSu/k4pCcUhFxFn
tmWNdc5HTxkYYVM6UQIDAQAB
-----END PUBLIC KEY-----';
$private_key_pkcs8 = '-----BEGIN PRIVATE KEY-----
MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBALAv4tlLzymLzBvn
KtOq8Gck+UVr/+AsdxByiDKrOmKa0T3IPF/xCkAFezj59rLqJZDPeiAIj9TFMeOf
8XBV8iGgdlVC122L21Jv1+oy01MJan/HDz2IiuI/XRFCTPfhS9P2u/PSCtJahK7+
TikJxSEXEWe2ZY11zkdPGRhhUzpRAgMBAAECgYBnUw30ZVMOiF+hFYa2L49gzfwp
zFZ4/1qsGJ7rKCPLZAPF+cH+efuK5CwJk/4rmsmBDUwPsTW4kBTb6xbKzHx8Zg5y
1enR/M0QAZxNg8LcXV255R1lErKLzzs4rYt5CzKQLgUbzDkrK95AyPBiC6GmI97D
3jb9TQ4l02i4C8mi6QJBAOabVq9xbk9l0O+4rZiID5gjh5FJyws18lflE3RxwcGk
sBEE/W2HNZRP2uEkuUMzht2IxGPe/trfvFnBxBx/k1sCQQDDln04omktoAlBe2oO
LPFaiWi0b+v0amGlG3XrWWOcuz8fZtWqgynbElyEvguOwOijdejeGlzcvm7QGpLB
vrTDAkAJrEhlkY97+xxZgdieRk7JJexg1sSSks+4ih5XyxHCiqLsA9aRipNfxj27
JewzemzUzBDY05jDG5Ft/me4fk1zAkAE3hbptOkHMKdqUMb36VhsV2UasHpfz9H0
SPWrUMMw4FwWzPleT/tXr2JMD2q8N8LSZpnQBTnwaHDbjv2+Ap//AkBEnltf2HmK
FkaaHeGHRpogcoOKWDeTYHe/C6bOQspXEJ3yLqX91GM7cm90GdMcLXUm3bND0uQe
SV9XN/Hx0a+r
-----END PRIVATE KEY-----';
$content = $sendjson;
$randstr = random(16);
$iv = $randstr;
$encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $randstr, $content, MCRYPT_MODE_CBC, $iv);
$msg = base64_encode($encrypted);
$pu_key = openssl_pkey_get_public($public_key);//这个函数可用来判断公钥是否是可用的
openssl_public_encrypt($randstr, $encrypted, $pu_key);//公钥加密
$encrypted = base64_encode($encrypted);
$code = $encrypted;
$pi_key = openssl_pkey_get_private($private_key);//这个函数可用来判断私钥是否是可用的,可用返回资源id Resource id
openssl_private_encrypt($msg, $encrypted, $pi_key);//私钥加密
$encrypted = base64_encode($encrypted);//加密后的内容通常含有特殊字符,需要编码转换下,在网络间通过url传输时要注意base64编码是否是url安全的
$sign = $encrypted;
$sign = sign($msg, $private_key); //签名函数
$url = $sendurl;
$data = $sendfile; //文件数据
$data['msg'] = urlencode($msg);
$data['sign'] = urlencode($sign);
$data['code'] = urlencode($code);
$content = curlPost($url, $data); //通过curl发送数据到接口
$content = str_replace(array("\r\n", "\r", "\n", "\0"), "", $content); //替换掉特殊字符
$arr = json_decode($content, 1);
//获取接口返回的加密sign、code、msg
$resign = $arr['sign'];
$recode = $arr['code'];
$remsg = $arr['msg'];
openssl_private_decrypt(base64_decode($recode), $decrypted, $pi_key);//私钥解密
$returnrandstr = $decrypted;
$encryptedData = base64_decode($remsg);
@$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $returnrandstr, $encryptedData, MCRYPT_MODE_CBC, $returnrandstr);
$returnjson = $decrypted;
$returnjson = str_replace(array("\r\n", "\r", "\n", "\0"), "", $returnjson);
$sign = sign($remsg, $private_key);
if ($sign != $resign) {
$returnjson = '[{"sta":"0","msg":"签名验证失败客户端!"}]';
return $returnjson;
}
return $returnjson;
}
/**
* 发送http的get请求
* @param $url 请求地址
* @return mixed
*/
function httpGet($url)
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 500);
// 为保证第三方服务器与微信服务器之间数据传输的安全性,所有微信接口采用https方式调用,必须使用下面2行代码打开ssl安全校验。
// 如果在部署过程中代码在此处验证失败,请到 http://curl.haxx.se/ca/cacert.pem 下载新的证书判别文件。
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_URL, $url);
$res = curl_exec($curl);
curl_close($curl);
return $res;
}
/**
* @param $url 发送post请求的url
* @param $data 发送的数据
* @return mixed
*/
function curlPost($url, $data)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); //Problem (2) in the Chunked-Encoded data
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
@curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false); //php5.6.0开始,需要加上这行代码方可上传,否则取不到文件
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$tmpInfo = curl_exec($ch);
$errorno = curl_errno($ch);
if ($errorno) {
$rt['sta'] = "0";
$rt['msg'] = "curl错误:$errorno";
return json_encode($rt);
die;
}
return $tmpInfo;
}
/**
* 随机字符
* @param number $length 长度
* @param string $type 类型
* @param number $convert 转换大小写
* @return string
*/
function random($length = 6, $type = 'string', $convert = 0)
{
$config = array(
'number' => '1234567890',
'letter' => 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
'string' => 'abcdefghjkmnpqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ23456789',
'all' => 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'
);
if (!isset($config[$type])) $type = 'string';
$string = $config[$type];
$code = '';
$strlen = strlen($string) - 1;
for ($i = 0; $i < $length; $i++) {
$code .= $string{mt_rand(0, $strlen)};
}
if (!empty($convert)) {
$code = ($convert > 0) ? strtoupper($code) : strtolower($code);
}
return $code;
}
/**
*签名数据:
*data:utf-8编码的订单原文,
*privatekeyFile:私钥路径
*passphrase:私钥密码
*返回:base64转码的签名数据
*/
function sign($data, $privatekey)
{
$signature = '';
$res = openssl_get_privatekey($privatekey);
openssl_sign($data, $signature, $res);
openssl_free_key($res);
return base64_encode($signature);
}
/**
* 验证签名:
*data:原文
*signature:签名
*publicKeyPath:公钥路径
*返回:签名结果,true为验签成功,false为验签失败
*/
function verity($data, $signature, $pubKey)
{
$res = openssl_get_publickey($pubKey);
$result = (bool)openssl_verify($data, base64_decode($signature), $res);
openssl_free_key($res);
return $result;
}
/**
* 文本记录函数
* @param string $word 输入记录的值
*/
function logRes($word = '')
{
$logname = "./log/" . date("Ymd") . ".txt";
$fp = fopen($logname, "a");
flock($fp, LOCK_EX);
fwrite($fp, "执行日期:" . strftime("%Y-%m-%d %H:%M:%S", time()) . "\r\n" . $word . "\r\n");
flock($fp, LOCK_UN);
fclose($fp);
}
PHP
1
https://gitee.com/wlphp/jiamiapi.git
git@gitee.com:wlphp/jiamiapi.git
wlphp
jiamiapi
jiamiapi
master

搜索帮助