增加docke部署

This commit is contained in:
2026-04-10 16:44:13 +08:00
parent e2f8054794
commit cd4ddb606d
5076 changed files with 701092 additions and 0 deletions

View File

@@ -0,0 +1,359 @@
<?php
define('USEDCHARSET', 'utf-8');
/// 这里定义公共变量
//$app_id = '14936872341446'; /// appid
//$dev_key = '14915485974028'; /// 开发者key
$app_id = '14992192722868'; /// appid
$dev_key = '14915485974028'; /// 开发者key
$market_key = '0000'; /// 门店key
$sign_key = '0000'; /// 签名key(暂时支付时不校验签名, 但是退款时将校验这个签名)
/// 接口返回用的信息类
class ResultObject
{
public $error; /// 返回值: 0成功; 非0失败;
public $error_code; /// 错误号
public $msg; /// 错误信息
public $data; /// 返回的数据
public function ResultObject($string)
{
$this->error = 0;
$this->error_code = 0;
$this->msg = null;
$this->data = null;
$this->from_string($string);
}
public function to_array()
{
return (array)$this;
}
public function to_string()
{
return json_encode($this, JSON_UNESCAPED_UNICODE);
}
public function from_array($array)
{
foreach ($array as $key => $value)
{
if (property_exists($this, $key))
{
$this->$key = $value;
}
}
return true;
}
public function from_string($string)
{
return $this->from_array((array)json_decode($string));
}
}
/**
* @note 获取当前页面的完整连接
* @return string
*/
function getLocaleUrl()
{
$is_https =
(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ||
(isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') ||
(isset($_SERVER['REQUEST_SCHEME']) && $_SERVER['REQUEST_SCHEME'] == 'https');
$request_scheme = $is_https ? 'https://' : 'http://';
$hostname = $_SERVER['SERVER_NAME'];
$hostport = (($is_https && '443' == $_SERVER['SERVER_PORT']) || (!$is_https && '80' == $_SERVER['SERVER_PORT'])) ? '' : ':' . intval($_SERVER['SERVER_PORT']);
return $request_scheme . $hostname . $hostport . $_SERVER['PHP_SELF'];
}
/**
* @date 2017-03-04
* @note 给参数按key的顺序排序。支持递归
* @param mixed $parameter 要排序的参数
* @return array
* @auth 应俊
*/
function SortParam($parameter)
{
$parameter = (array)$parameter;
foreach ($parameter as $k => $v)
{
if (is_array($v) || is_object($v))
{
$parameter[$k] = SortParam($v);
}
}
// 调用strcmp函数来排序该函数区分大小写。
uksort($parameter, 'strcmp');
return $parameter;
}
/**
* @date 2017-03-06
* @note 转换参数成字符串形式按key=value的形式用&分隔)。
* @param mixed $parameter 要转换的参数
* @return string
* @auth 应俊
*/
function ConvertParam($parameter)
{
$parameter = (array)$parameter;
$return = '';
foreach ($parameter as $k => $v)
{
if (is_array($v) || is_object($v))
{
$return .= sprintf('&%s={%s}', $k, ConvertParam($v));
}
else
{
$return .= sprintf('&%s=%s', $k, $v);
}
}
$sublen = mb_strlen('&', USEDCHARSET);
$retlen = mb_strlen($return, USEDCHARSET);
$return = mb_substr($return, $sublen, $retlen - $sublen, USEDCHARSET);
return $return;
}
/**
* @date 2017-03-04
* @note 为参数生成签名
* @param mixed $parameter 要签名的参数
* @param string $signkey 签名key
* @return string
* @auth 应俊
*/
function SignParameter($parameter, $signkey = '')
{
// 1先把参数按参数名key从小到大排序
$parameter = SortParam($parameter);
// 2连接参数成一个字符串按key=value的形式用&分隔)。
$return = ConvertParam($parameter);
// 3结尾加上key=签名key
$return .= '&key=' . $signkey;
// 4md5加密这个字符串
return md5($return);
}
/**
* @param mixed $data
* @return array|mixed
*/
function ChangePostData($data)
{
switch (gettype($data))
{
case 'array':
{
foreach ($data as $key => $value)
{
$data[$key] = ChangePostData($value);
}
break;
}
case 'object':
{
$array = (array)$data;
foreach ($array as $key => $value)
{
$data->$key = ChangePostData($value);
}
break;
}
default:
{
$data = preg_replace_callback('/\+/', function ($r) { return '%2B'; }, $data);
$data = preg_replace_callback('/\&/', function ($r) { return '%26'; }, $data);
break;
}
}
return $data;
}
/**
* @note 发送post请求
* @param string $url
* @param mixed $data
* @return string
*/
function SendPost($url, $data)
{
$data = http_build_query(ChangePostData($data));
$opts = array(
'http' => array(
'method' => 'POST',
'header' => "Content-type: application/x-www-form-urlencoded\r\n" . "Content-Length: " . strlen($data) . "\r\n",
'content' => $data,
),
);
$context = stream_context_create($opts);
$ret = file_get_contents($url, false, $context);
$ret = trim($ret, "\xEF\xBB\xBF");
return $ret;
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>退款测试</title>
<meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no">
<link href="css/style.css" rel="stylesheet">
<script src="js/jquery-2.1.4.min.js"></script>
<script src="js/common.js"></script>
</head>
<body id="mainbody">
<?php
/// 尝试获取sid和scode
$sid = isset($_GET['sid']) ? $_GET['sid'] : '';
$scode = isset($_GET['scode']) ? $_GET['scode'] : '';
/// 判断是否有sid和scode, 什么数据都没有则先跳转到登录页面授权
if (empty($sid) || empty($scode))
{
if (strpos($_SERVER['HTTP_USER_AGENT'],"MicroMessenger "))
{
$url = "https://api2.daoqijuyou77.cn/source/login/login.php?app_id={$app_id}&dev_key={$dev_key}&market_key={$market_key}&redirect_uri=" . rawurlencode(getLocaleUrl());
header("Location: {$url}");
exit;
}
else
{
/// 登录
$url = 'https://api2.daoqijuyou77.cn/api/login/ylnn';
$data = array(
'appid' => $app_id, /// appid
'devkey' => $dev_key, /// 开发者key
'market_key' => $market_key, /// 门店key
'scode' => md5(date('Ymdhis') . rand(1000, 9999)), /// 随机数
'agent_key' => 'i33v0llvp0euhd1n9qo1fM2RV8vtog4y', /// 代理号
'game_key' => '7N0e0z2u2098pf1M2fj0kyB1D4n4ylkA', /// 渠道号
'user_key' => '100000', /// 用户号
'headImg' => '', /// 头像
'nickname' => '100000', /// 昵称
);
$ret = SendPost($url, $data);
$ret = new ResultObject($ret);
if ($ret->error)
die($ret->msg);
$sid = $ret->data->sid;
$scode = $ret->data->scode;
}
}
if (!isset($_POST['refund_fee'])) /// 有 sid 和 scode 但是 没有 refund_fee 则要求页面输入并提交 refund_fee 参数
{
$url = getLocaleUrl();
$html = <<<EOF
<script>
function submit() {
var transaction_id = document.getElementById('transaction_id').value;
var out_trade_no = document.getElementById('out_trade_no').value;
var refund_fee = document.getElementById('refund_fee').value;
if ('' == refund_fee || undefined == refund_fee) {
alert('请输入要退款的金额(单位为分)');
return;
}
var script =
"<form style='display:none;' id='frm' name='frm' method='post' action=''>" +
" <input name='transaction_id' type='text' value='" + transaction_id + "' />\\r\\n" + /// 三方订单号(微信等)
" <input name='out_trade_no' type='text' value='" + out_trade_no + "' />\\r\\n" + /// 平台订单号
" <input name='refund_fee' type='text' value='" + refund_fee + "' />\\r\\n" + /// 退款金额
"</form>";
$('#mainbody').append(script);
$('#frm').submit();
}
</script>
<section>
<header class="header"><span>退款测试</span></header>
<div class="neirong">
<ul>
<li><span class="name">三方订单号:</span><input type="text" id="transaction_id" placeholder="长度32" class="input"></li>
<li><span class="name">平台订单号:</span><input type="text" id="out_trade_no" placeholder="长度32" class="input"></li>
<li><span class="name">退款金额:</span><input type="text" id="refund_fee" placeholder="单位:分 整型" class="input"><sapn class="red">*</sapn></li>
</ul>
<footer class="text-center">
<a href="javascript:;" onclick="submit();" class="btn btn-blue foot_btn">确定</a>
</footer>
</div>
</section>
EOF;
}
else /// 有refund_fee参数表示已提交页面中输入的退款金额
{
$data = array(
'appid' => $app_id,
'devkey' => $dev_key,
'sid' => $sid,
'scode' => $scode,
'transaction_id' => $_POST['transaction_id'],
'out_trade_no' => $_POST['out_trade_no'],
'refund_fee' => $_POST['refund_fee'],
'version' => 1,
);
$data['sign'] = SignParameter($data, $sign_key);
$result = new ResultObject(rawurldecode(SendPost('https://api.daoqijuyou77.cn/api/newpay/refund/', $data)));
if (0 != $result->error) /// error不为0表示有错误发生
{
$html = <<<EOL
<script>
alert('{$result->msg}');
</script>
EOL;
}
else /// 调用成功, 则把图片显示在前台中
{
$html = <<<EOL
<script>
alert('申请退款成功!');
</script>
EOL;
}
}
echo $html;
?>
</body>
</html>