初始上传

This commit is contained in:
2026-04-04 17:27:12 +08:00
parent 4d80d28eb4
commit b7e11774ee
11191 changed files with 1588469 additions and 0 deletions

197
extend/Kdniao.php Executable file
View File

@@ -0,0 +1,197 @@
<?php
namespace extend;
class Kdniao
{
private $EBusinessID; // 授权key
private $AppKey; // 快递100分配的公司编码
private $order_url = 'https://api.kdniao.com/api/Eorderservice'; //电子面单url
private $print_url = 'https://www.kdniao.com/External/PrintOrder.aspx'; //电子面单批量打印url
public function __construct($config)
{
$this->EBusinessID = $config[ "EBusinessID" ];
$this->AppKey = $config[ "AppKey" ];
}
/**
* Json方式 调用电子面单接口
*/
public function submitEOrder($requestData)
{
$jsonParam = json_encode($requestData, JSON_UNESCAPED_UNICODE);
$datas = array (
'EBusinessID' => $this->EBusinessID,
'RequestType' => '1007',
'RequestData' => urlencode($jsonParam),
'DataType' => '2',
);
$datas[ 'DataSign' ] = $this->encrypt($jsonParam, $this->AppKey);
$result = $this->sendPost($this->order_url, $datas);
return $result;
}
/**
* 批量打印电子面单
* @param $data
*/
public function build_form($data)
{
// OrderCode:需要打印的订单号和调用快递鸟电子面单的订单号一致PortName本地打印机名称请参考使用手册设置打印机名称。支持多打印机同时打印。
// $request_data = '[{"OrderCode":"2020051919550001","PortName":"HP LaserJet Pro MFP M125-M126 PCLmS"},{"OrderCode":"2020052009440001","PortName":"HP LaserJet Pro MFP M125-M126 PCLmS"}]';
$request_data_encode = urlencode($data);
// 如果报数据验证失败 请检查此处get_ip()返回的IP 是否与调用打印的【客户机】IP一致 可以写死IP尝试
$data_sign = $this->encrypt($this->get_ip() . $data, $this->AppKey);
$is_priview = '0'; //是否预览0-不预览 1-预览
// 组装表单
$form = '<form id="form1" method="POST" action="' . $this->print_url . '"><input type="text" name="RequestData" value="' . $request_data_encode . '"/><input type="text" name="EBusinessID" value="' . $this->EBusinessID . '"/><input type="text" name="DataSign" value="' . $data_sign . '"/><input type="text" name="IsPriview" value="' . $is_priview . '"/></form><script>form1.submit();</script>';
print_r($form);
}
/**
* post提交数据
* @param string $url 请求Url
* @param array $datas 提交的数据
* @return url响应返回的html
*/
public function sendPost($url, $datas)
{
$temps = array ();
foreach ($datas as $key => $value) {
$temps[] = sprintf('%s=%s', $key, $value);
}
$post_data = implode('&', $temps);
$url_info = parse_url($url);
if (empty($url_info[ 'port' ])) {
$url_info[ 'port' ] = 80;
}
$httpheader = "POST " . $url_info[ 'path' ] . " HTTP/1.0\r\n";
$httpheader .= "Host:" . $url_info[ 'host' ] . "\r\n";
$httpheader .= "Content-Type:application/x-www-form-urlencoded\r\n";
$httpheader .= "Content-Length:" . strlen($post_data) . "\r\n";
$httpheader .= "Connection:close\r\n\r\n";
$httpheader .= $post_data;
$fd = fsockopen($url_info[ 'host' ], $url_info[ 'port' ]);
fwrite($fd, $httpheader);
$gets = "";
while (!feof($fd)) {
if (( $header = @fgets($fd) ) && ( $header == "\r\n" || $header == "\n" )) {
break;
}
}
while (!feof($fd)) {
$gets .= fread($fd, 128);
}
fclose($fd);
return $gets;
}
/**
* 电商Sign签名生成
* @param data 内容
* @param appkey Appkey
* @return DataSign签名
*/
public function encrypt($data, $appkey)
{
return urlencode(base64_encode(md5($data . $appkey)));
}
/**************************************************************
*
* 使用特定function对数组中所有元素做处理
* @param string &$array 要处理的字符串
* @param string $function 要执行的函数
* @return boolean $apply_to_keys_also 是否也应用到key上
* @access public
*
*************************************************************/
public function arrayRecursive(&$array, $function, $apply_to_keys_also = false)
{
static $recursive_counter = 0;
if (++$recursive_counter > 1000) {
die('possible deep recursion attack');
}
foreach ($array as $key => $value) {
if (is_array($value)) {
$this->arrayRecursive($array[ $key ], $function, $apply_to_keys_also);
} else {
$array[ $key ] = $function($value);
}
if ($apply_to_keys_also && is_string($key)) {
$new_key = $function($key);
if ($new_key != $key) {
$array[ $new_key ] = $array[ $key ];
unset($array[ $key ]);
}
}
}
$recursive_counter--;
}
/**************************************************************
*
* 将数组转换为JSON字符串兼容中文
* @param array $array 要转换的数组
* @return string 转换得到的json字符串
* @access public
*
*************************************************************/
public function JSON($array)
{
$this->arrayRecursive($array, 'urlencode', true);
$json = json_encode($array);
return urldecode($json);
}
/**
* 判断是否为内网IP
* @param string IP
* @return boolean 是否内网IP
*/
public function is_private_ip($ip)
{
return filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE);
}
/**
* 获取客户端IP(非用户服务器IP)
* @return string 客户端IP
*/
public function get_ip()
{
$ip = null;
// 获取客户端IP
if (getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {
$ip = getenv('HTTP_CLIENT_IP');
} elseif (getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {
$ip = getenv('HTTP_X_FORWARDED_FOR');
} elseif (getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {
$ip = getenv('REMOTE_ADDR');
} elseif (isset($_SERVER[ 'REMOTE_ADDR' ]) && $_SERVER[ 'REMOTE_ADDR' ] && strcasecmp($_SERVER[ 'REMOTE_ADDR' ], 'unknown')) {
$ip = $_SERVER[ 'REMOTE_ADDR' ];
}
// 判断是否获取到 如果获取到本地IP地址 需要从外网获取本机地址
if ($ip == '' || $this->is_private_ip($ip) == false) {
die('无法正确获取当前机器IP');
} else {
return trim(strip_tags($ip));
}
}
}