完成了基本调整调整

This commit is contained in:
2026-09-18 20:55:21 +08:00
parent 864187e105
commit 57e0854a0e
56 changed files with 3122 additions and 105 deletions
+52 -14
View File
@@ -318,16 +318,18 @@ function defaultBody($act, $orgNo)
if ($act === 'share') {
$body = [
'orgNo' => $orgNo,
'amount' => isset($_GET['amount']) ? $_GET['amount'] : '100.00',
'amount' => isset($_GET['amount']) ? trim($_GET['amount']) : '100.00',
'mobile' => $mobile,
'name' => isset($_GET['name']) ? $_GET['name'] : '张三',
'saleOrderNo' => $saleOrderNo,
'name' => isset($_GET['name']) ? trim($_GET['name']) : '张三',
// 销售单号留空则自动生成(同一单号重复提交会走幂等返回,便于测重复下单)
'saleOrderNo' => isset($_GET['saleOrderNo']) && trim($_GET['saleOrderNo']) !== '' ? trim($_GET['saleOrderNo']) : $saleOrderNo,
'oilCardType' => 'zsy_ticket',
];
// 司机身份证号:两个通道都必传。
// 加 &noIdCard=1 可故意不传,用来验证实名通道下的 0001 拒单是否生效。
if (empty($_GET['noIdCard'])) {
$body['idCard'] = isset($_GET['idCard']) ? $_GET['idCard'] : '450103199001011238';
// 页面上身份证号留空(或带 &noIdCard=1)即不传,用来验证 0001 拒单是否生效。
$idCard = isset($_GET['idCard']) ? trim($_GET['idCard']) : '450103199001011238';
if ($idCard !== '' && empty($_GET['noIdCard'])) {
$body['idCard'] = $idCard;
}
return [
'method' => 'syb.oil.oilCard.share',
@@ -349,6 +351,17 @@ function defaultBody($act, $orgNo)
'body' => ['orgNo' => $orgNo, 'oilCardNo' => $oilCardNo],
];
}
if ($act === 'refund') {
return [
'method' => 'syb.oil.oilCard.refund',
'path' => '/oilCard/refund',
'body' => [
'orgNo' => $orgNo,
'oilCardNo' => $oilCardNo,
'reason' => isset($_GET['reason']) ? $_GET['reason'] : '联调测试退款',
],
];
}
if ($act === 'sharelist') {
return [
'method' => 'syb.oil.oilCard.shareList',
@@ -383,7 +396,7 @@ try {
$platformPub = platformPublicKey($ROOT);
$qconf = qytConf($ROOT, $partner);
if (in_array($act, ['share', 'qrcode', 'status', 'sharelist'], true)) {
if (in_array($act, ['share', 'qrcode', 'status', 'sharelist', 'refund'], true)) {
$def = defaultBody($act, $partner['orgNo']);
$env = buildEnvelope($partner, $platformPub, $def['method'], $def['body']);
$url = apiUrl($def['path']);
@@ -416,7 +429,7 @@ if (PHP_SAPI === 'cli') {
";
}
if (!$result) {
echo "用法:php qyt_test.php [share|qrcode|status|sharelist]\n";
echo "用法:php qyt_test.php [share|qrcode|status|sharelist|refund](qrcode/status/refund 需带 oilCardNo,CLI 下请用浏览器方式)\n";
exit;
}
echo '接口:' . $result['def']['method'] . "\n";
@@ -459,6 +472,11 @@ $curOil = isset($_GET['oilCardNo']) ? $_GET['oilCardNo'] : '';
.ok{color:#52c41a;font-weight:600}.err{color:#ff4d4f;font-weight:600}
.tip{background:#fffbe6;border:1px solid #ffe58f;padding:10px 14px;border-radius:6px;font-size:13px;margin-bottom:16px}
.lbl{margin:12px 0 6px;color:#555}
.share-form{margin-bottom:14px;padding-bottom:14px;border-bottom:1px dashed #eee}
.share-form .fields{display:flex;flex-wrap:wrap;gap:10px 16px;margin-bottom:10px}
.share-form label{display:flex;flex-direction:column;font-size:12px;color:#666}
.share-form input{margin-top:4px;width:180px;padding:6px 8px;border:1px solid #d9d9d9;border-radius:4px;font-size:13px}
.share-form button{padding:7px 16px;background:#52c41a;color:#fff;border:0;border-radius:4px;font-size:13px;cursor:pointer;margin-right:10px}
</style>
</head>
<body><div class="wrap">
@@ -526,17 +544,36 @@ $curOil = isset($_GET['oilCardNo']) ? $_GET['oilCardNo'] : '';
<div class="card">
<h2>发起测试</h2>
<?php
// 表单回填:提交后保留上次填写的值;首次打开用默认值
$isShare = $act === 'share';
$fv = function ($key, $default) use ($isShare) {
return htmlspecialchars($isShare && isset($_GET[$key]) ? (string)$_GET[$key] : $default);
};
?>
<form method="get" class="share-form">
<input type="hidden" name="act" value="share">
<?php if (!empty($_GET['api'])): ?>
<input type="hidden" name="api" value="<?php echo htmlspecialchars($_GET['api']); ?>">
<?php endif; ?>
<div class="fields">
<label>分油金额(元)<input name="amount" value="<?php echo $fv('amount', '100.00'); ?>" placeholder="最多两位小数"></label>
<label>司机手机号<input name="mobile" value="<?php echo $fv('mobile', '13800000001'); ?>" maxlength="11"></label>
<label>司机姓名<input name="name" value="<?php echo $fv('name', '张三'); ?>"></label>
<label>身份证号<input name="idCard" value="<?php echo $fv('idCard', '450103199001011238'); ?>" maxlength="18" placeholder="留空即不传"></label>
<label>销售单号<input name="saleOrderNo" value="<?php echo $fv('saleOrderNo', ''); ?>" placeholder="留空自动生成"></label>
</div>
<button type="submit">① 下单分油 (share)</button>
<span class="sub">身份证号留空即不传,应返回 <b>0001</b> 拒单;销售单号填已用过的可测幂等返回</span>
</form>
<div class="btns">
<a class="g" href="?act=share">① 下单分油 (share)</a>
<a class="o" href="?act=qrcode&amp;oilCardNo=<?php echo urlencode($curOil); ?>">② 获取加油链接 (qrCode)</a>
<a class="p" href="?act=status&amp;oilCardNo=<?php echo urlencode($curOil); ?>">③ 订单状态 (orderStatus)</a>
<a href="?act=sharelist">④ 分油记录 (shareList)</a>
<a class="r" href="?act=share&amp;noIdCard=1">⑤ 下单但不传身份证号</a>
<a href="?act=sharelist&amp;mobile=<?php echo urlencode($isShare && isset($_GET['mobile']) ? $_GET['mobile'] : '13800000001'); ?>">④ 分油记录 (shareList)</a>
<a class="r" href="?act=refund&amp;oilCardNo=<?php echo urlencode($curOil); ?>">⑥ 退款 (refund)</a>
</div>
<div class="sub" style="margin:6px 0 0">
②③ 需要 oilCardNo:先点①拿到后会自动带上。<br>
① 可自定义参数:<code>?act=share&amp;amount=50.00&amp;mobile=13800000002&amp;name=李四&amp;idCard=110101199003071233</code><br>
⑤ 用来验证实名校验:两个通道都要求实名,应当返回 <b>0001</b> 拒单
②③⑥ 需要 oilCardNo:先下单拿到后,在下方响应区点对应按钮会自动带上。
</div>
</div>
@@ -569,6 +606,7 @@ $curOil = isset($_GET['oilCardNo']) ? $_GET['oilCardNo'] : '';
<div class="btns" style="margin-top:14px">
<a class="o" href="?act=qrcode&amp;oilCardNo=<?php echo urlencode($newOil); ?>">用 <?php echo htmlspecialchars($newOil); ?> 取加油链接</a>
<a class="p" href="?act=status&amp;oilCardNo=<?php echo urlencode($newOil); ?>">查该单状态</a>
<a class="r" href="?act=refund&amp;oilCardNo=<?php echo urlencode($newOil); ?>">退款该单(需发放成功且未加油)</a>
</div>
<?php endif; ?>
</div>
File diff suppressed because one or more lines are too long
Binary file not shown.
@@ -0,0 +1 @@
[data-v-f551b524] .ant-form-item-control{padding-left:10px}[data-v-f551b524] .ant-form-item-control .ant-form-item-control{padding-left:0}.ant-divider[data-v-f551b524]{margin-top:60px!important}.ant-input-number[data-v-f551b524]{width:160px}.input-text_right[data-v-f551b524]{margin-left:10px}.radio-item[data-v-f551b524]{margin-bottom:16px}.tips-alert[data-v-e3266188]{margin-bottom:20px}.search-form[data-v-e3266188]{display:inline-block;margin-left:16px}.sub[data-v-e3266188]{color:#999;font-size:12px;line-height:1.7}.ml-6[data-v-e3266188]{margin-left:6px}.text-red[data-v-e3266188]{color:#ff4d4f}.text-grey[data-v-e3266188]{color:#bbb}.op-actions[data-v-e3266188]{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:8px 16px}.op-actions>a[data-v-e3266188],.op-actions>span[data-v-e3266188]{white-space:nowrap}[data-v-7e59f1c6] .ant-form-item-control{padding-left:10px}[data-v-7e59f1c6] .ant-form-item-control .ant-form-item-control{padding-left:0}.tips-alert[data-v-7e59f1c6]{margin-bottom:28px}.input-short[data-v-7e59f1c6]{width:160px}.input-code[data-v-7e59f1c6]{width:30%}.input-inst[data-v-7e59f1c6]{width:70%}[data-v-01d8132a] .ant-form-item-control{padding-left:10px}[data-v-01d8132a] .ant-form-item-control .ant-form-item-control{padding-left:0}.ant-divider[data-v-01d8132a]{margin-top:60px!important}.ant-input-number[data-v-01d8132a]{width:160px}.input-text_right[data-v-01d8132a]{margin-left:10px}.radio-item[data-v-01d8132a]{margin-bottom:16px}[data-v-dd6519b2] .ant-form-item-control{padding-left:10px}[data-v-dd6519b2] .ant-form-item-control .ant-form-item-control{padding-left:0}.ant-form-item[data-v-12cd9802]{margin-bottom:10px}[data-v-12cd9802] .ant-form-item-control{padding-left:10px}[data-v-12cd9802] .ant-form-item-control .ant-form-item-control{padding-left:0}.ant-divider[data-v-12cd9802]{margin-top:50px!important}
@@ -1 +0,0 @@
[data-v-f551b524] .ant-form-item-control{padding-left:10px}[data-v-f551b524] .ant-form-item-control .ant-form-item-control{padding-left:0}.ant-divider[data-v-f551b524]{margin-top:60px!important}.ant-input-number[data-v-f551b524]{width:160px}.input-text_right[data-v-f551b524]{margin-left:10px}.radio-item[data-v-f551b524]{margin-bottom:16px}.tips-alert[data-v-4e165f10]{margin-bottom:20px}.search-form[data-v-4e165f10]{display:inline-block;margin-left:16px}.sub[data-v-4e165f10]{color:#999;font-size:12px;line-height:1.7}.ml-6[data-v-4e165f10]{margin-left:6px}.text-red[data-v-4e165f10]{color:#ff4d4f}.text-grey[data-v-4e165f10]{color:#bbb}[data-v-7e59f1c6] .ant-form-item-control{padding-left:10px}[data-v-7e59f1c6] .ant-form-item-control .ant-form-item-control{padding-left:0}.tips-alert[data-v-7e59f1c6]{margin-bottom:28px}.input-short[data-v-7e59f1c6]{width:160px}.input-code[data-v-7e59f1c6]{width:30%}.input-inst[data-v-7e59f1c6]{width:70%}[data-v-01d8132a] .ant-form-item-control{padding-left:10px}[data-v-01d8132a] .ant-form-item-control .ant-form-item-control{padding-left:0}.ant-divider[data-v-01d8132a]{margin-top:60px!important}.ant-input-number[data-v-01d8132a]{width:160px}.input-text_right[data-v-01d8132a]{margin-left:10px}.radio-item[data-v-01d8132a]{margin-bottom:16px}[data-v-dd6519b2] .ant-form-item-control{padding-left:10px}[data-v-dd6519b2] .ant-form-item-control .ant-form-item-control{padding-left:0}.ant-form-item[data-v-12cd9802]{margin-bottom:10px}[data-v-12cd9802] .ant-form-item-control{padding-left:10px}[data-v-12cd9802] .ant-form-item-control .ant-form-item-control{padding-left:0}.ant-divider[data-v-12cd9802]{margin-top:50px!important}
+1 -1
View File
@@ -1 +1 @@
<!DOCTYPE html><html lang="zh-cmn-Hans"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><title>商家管理中心</title><style>#loading-mask{position:fixed;left:0;top:0;height:100%;width:100%;background:#fff;user-select:none;z-index:9999;overflow:hidden}.loading-wrapper{position:absolute;top:50%;left:50%;transform:translate(-50%,-100%)}.loading-dot{animation:antRotate 1.2s infinite linear;transform:rotate(45deg);position:relative;display:inline-block;font-size:64px;width:64px;height:64px;box-sizing:border-box}.loading-dot i{width:22px;height:22px;position:absolute;display:block;background-color:#1890ff;border-radius:100%;transform:scale(.75);transform-origin:50% 50%;opacity:.3;animation:antSpinMove 1s infinite linear alternate}.loading-dot i:nth-child(1){top:0;left:0}.loading-dot i:nth-child(2){top:0;right:0;-webkit-animation-delay:.4s;animation-delay:.4s}.loading-dot i:nth-child(3){right:0;bottom:0;-webkit-animation-delay:.8s;animation-delay:.8s}.loading-dot i:nth-child(4){bottom:0;left:0;-webkit-animation-delay:1.2s;animation-delay:1.2s}@keyframes antRotate{to{-webkit-transform:rotate(405deg);transform:rotate(405deg)}}@-webkit-keyframes antRotate{to{-webkit-transform:rotate(405deg);transform:rotate(405deg)}}@keyframes antSpinMove{to{opacity:1}}@-webkit-keyframes antSpinMove{to{opacity:1}}</style><link href="css/card.83fb7f11.css" rel="prefetch"><link href="css/card~content~goods~manage~market~order~page~setting~store~user.bd86e290.css" rel="prefetch"><link href="css/card~content~goods~manage~market~page~store~user.06d71c34.css" rel="prefetch"><link href="css/client.6fbe4ba8.css" rel="prefetch"><link href="css/content.c53a1699.css" rel="prefetch"><link href="css/exception.37940980.css" rel="prefetch"><link href="css/goods.50f80ed8.css" rel="prefetch"><link href="css/index.ff363719.css" rel="prefetch"><link href="css/market.cc3678af.css" rel="prefetch"><link href="css/order.6124dbc9.css" rel="prefetch"><link href="css/page.2d2d2056.css" rel="prefetch"><link href="css/passport.68f7ba8b.css" rel="prefetch"><link href="css/setting.a8d19305.css" rel="prefetch"><link href="css/store.3d002fc4.css" rel="prefetch"><link href="css/user.21b3449e.css" rel="prefetch"><link href="js/card.c3d0e7b1.js" rel="prefetch"><link href="js/card~content~goods~manage~market~order~page~setting~store~user.193a5813.js" rel="prefetch"><link href="js/card~content~goods~manage~market~page~store~user.a13c007a.js" rel="prefetch"><link href="js/client.58c03cfb.js" rel="prefetch"><link href="js/content.fd60d4aa.js" rel="prefetch"><link href="js/exception.d3b6b1e8.js" rel="prefetch"><link href="js/goods.e491ade3.js" rel="prefetch"><link href="js/goods~order.d9a20aa1.js" rel="prefetch"><link href="js/index.874a9e0d.js" rel="prefetch"><link href="js/lang-zh-CN.303b0ef5.js" rel="prefetch"><link href="js/manage.3485dc4a.js" rel="prefetch"><link href="js/market.db25da7c.js" rel="prefetch"><link href="js/order.bc3eac19.js" rel="prefetch"><link href="js/page.24dbd519.js" rel="prefetch"><link href="js/passport.4036de85.js" rel="prefetch"><link href="js/setting.c3c97868.js" rel="prefetch"><link href="js/store.e6d3d371.js" rel="prefetch"><link href="js/user.dde70d3c.js" rel="prefetch"><link href="css/app.77281994.css" rel="preload" as="style"><link href="css/chunk-vendors.eb75505e.css" rel="preload" as="style"><link href="js/app.b2cf6a22.js" rel="preload" as="script"><link href="js/chunk-vendors.d8af00dc.js" rel="preload" as="script"><link href="css/chunk-vendors.eb75505e.css" rel="stylesheet"><link href="css/app.77281994.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but vue-antd-pro doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"><div id="loading-mask"><div class="loading-wrapper"><span class="loading-dot loading-dot-spin"><i></i><i></i><i></i><i></i></span></div></div></div><script src="config.js"></script><script src="js/chunk-vendors.d8af00dc.js"></script><script src="js/app.b2cf6a22.js"></script></body></html>
<!DOCTYPE html><html lang="zh-cmn-Hans"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><title>商家管理中心</title><style>#loading-mask{position:fixed;left:0;top:0;height:100%;width:100%;background:#fff;user-select:none;z-index:9999;overflow:hidden}.loading-wrapper{position:absolute;top:50%;left:50%;transform:translate(-50%,-100%)}.loading-dot{animation:antRotate 1.2s infinite linear;transform:rotate(45deg);position:relative;display:inline-block;font-size:64px;width:64px;height:64px;box-sizing:border-box}.loading-dot i{width:22px;height:22px;position:absolute;display:block;background-color:#1890ff;border-radius:100%;transform:scale(.75);transform-origin:50% 50%;opacity:.3;animation:antSpinMove 1s infinite linear alternate}.loading-dot i:nth-child(1){top:0;left:0}.loading-dot i:nth-child(2){top:0;right:0;-webkit-animation-delay:.4s;animation-delay:.4s}.loading-dot i:nth-child(3){right:0;bottom:0;-webkit-animation-delay:.8s;animation-delay:.8s}.loading-dot i:nth-child(4){bottom:0;left:0;-webkit-animation-delay:1.2s;animation-delay:1.2s}@keyframes antRotate{to{-webkit-transform:rotate(405deg);transform:rotate(405deg)}}@-webkit-keyframes antRotate{to{-webkit-transform:rotate(405deg);transform:rotate(405deg)}}@keyframes antSpinMove{to{opacity:1}}@-webkit-keyframes antSpinMove{to{opacity:1}}</style><link href="css/card.83fb7f11.css" rel="prefetch"><link href="css/card~content~goods~manage~market~order~page~setting~store~user.bd86e290.css" rel="prefetch"><link href="css/card~content~goods~manage~market~page~store~user.06d71c34.css" rel="prefetch"><link href="css/client.6fbe4ba8.css" rel="prefetch"><link href="css/content.c53a1699.css" rel="prefetch"><link href="css/exception.37940980.css" rel="prefetch"><link href="css/goods.5e999d2c.css" rel="prefetch"><link href="css/index.ff363719.css" rel="prefetch"><link href="css/market.cc3678af.css" rel="prefetch"><link href="css/order.6124dbc9.css" rel="prefetch"><link href="css/page.2d2d2056.css" rel="prefetch"><link href="css/passport.68f7ba8b.css" rel="prefetch"><link href="css/setting.37110db2.css" rel="prefetch"><link href="css/store.3d002fc4.css" rel="prefetch"><link href="css/user.21b3449e.css" rel="prefetch"><link href="js/card.c3d0e7b1.js" rel="prefetch"><link href="js/card~content~goods~manage~market~order~page~setting~store~user.193a5813.js" rel="prefetch"><link href="js/card~content~goods~manage~market~page~store~user.a13c007a.js" rel="prefetch"><link href="js/client.58c03cfb.js" rel="prefetch"><link href="js/content.fd60d4aa.js" rel="prefetch"><link href="js/exception.d3b6b1e8.js" rel="prefetch"><link href="js/goods.19f5e8e7.js" rel="prefetch"><link href="js/goods~order.d9a20aa1.js" rel="prefetch"><link href="js/index.874a9e0d.js" rel="prefetch"><link href="js/lang-zh-CN.303b0ef5.js" rel="prefetch"><link href="js/manage.3485dc4a.js" rel="prefetch"><link href="js/market.db25da7c.js" rel="prefetch"><link href="js/order.bc3eac19.js" rel="prefetch"><link href="js/page.24dbd519.js" rel="prefetch"><link href="js/passport.4036de85.js" rel="prefetch"><link href="js/setting.02914954.js" rel="prefetch"><link href="js/store.e6d3d371.js" rel="prefetch"><link href="js/user.dde70d3c.js" rel="prefetch"><link href="css/app.77281994.css" rel="preload" as="style"><link href="css/chunk-vendors.43940245.css" rel="preload" as="style"><link href="js/app.76ad6bca.js" rel="preload" as="script"><link href="js/chunk-vendors.d8af00dc.js" rel="preload" as="script"><link href="css/chunk-vendors.43940245.css" rel="stylesheet"><link href="css/app.77281994.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but vue-antd-pro doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"><div id="loading-mask"><div class="loading-wrapper"><span class="loading-dot loading-dot-spin"><i></i><i></i><i></i><i></i></span></div></div></div><script src="config.js"></script><script src="js/chunk-vendors.d8af00dc.js"></script><script src="js/app.76ad6bca.js"></script></body></html>
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.