fix: submit 改为 AJAX POST 到 buy/add,base64 编码 goods_data,修复非法访问错误

- ticket_detail.html: form.submit() → jQuery AJAX POST
  - 改为 POST 到 ?s=buy/add(直接走 OrderInsert)
  - goods_data 用 CryptoJS.base64 编码(ShopXO BuyGoods 期望格式)
  - 显式传 buy_type=goods, address_id=0, site_model=2
  - 成功跳转 jump_url,code=-400 走登录页,失败 alert 提示
- footer.html: 追加 base64csvtojson.js + common.js(修正 JS 加载顺序)

⚠️ CHECKPOINT 已解决:submit() 报"非法访问"问题已修复
⚠️ 注意:base64csvtojson.js 由 ShopXO Docker 容器生成,需同步到 public/static/
⚠️ Phase 3 待完成:订单确认页/支付/观演人信息存储
pull/19/head
Council 2026-04-22 01:02:57 +08:00
parent a97e5fd0d3
commit 6688a10d95
2 changed files with 33 additions and 14 deletions

View File

@ -68,4 +68,10 @@ $security_desc = $shopxo_config['security_desc'] ?? '';
<?php echo Config('shopxo.is_close_website_footer_js') != 1 ? '<script src="' . Config('shopxo.host_url') . 'static/common/js/footer.js?v=' . ($shopxo_config['version'] ?? '1.0.0') . '"></script>' : ''; ?> <?php echo Config('shopxo.is_close_website_footer_js') != 1 ? '<script src="' . Config('shopxo.host_url') . 'static/common/js/footer.js?v=' . ($shopxo_config['version'] ?? '1.0.0') . '"></script>' : ''; ?>
<script type='text/javascript' <script type='text/javascript'
src="<?php echo Config('shopxo.host_url'); ?>static/common/lib/jquery/jquery-2.2.4.min.js"></script> src="<?php echo Config('shopxo.host_url'); ?>static/common/lib/jquery/jquery-2.2.4.min.js"></script>
<!-- ⚠️ CryptoJS 定义文件,必须先于 common.js 引入 -->
<script type='text/javascript'
src="<?php echo Config('shopxo.host_url'); ?>static/common/lib/base64/base64csvtojson.js"></script>
<!-- ⚠️ 引入 common.js -->
<script type='text/javascript'
src="<?php echo Config('shopxo.host_url'); ?>static/common/js/common.js"></script>

View File

@ -475,19 +475,32 @@
return; return;
} }
// 5. 隐藏表单 POST 到 ShopXO Buy 链路 // 5. AJAX POST 到 ShopXO Buy 链路
var form = document.createElement('form'); $.ajax({
form.method = 'POST'; url: requestUrl + '?s=buy/add&system_type=default',
form.action = requestUrl + '?s=index/buy/index'; type: 'POST',
document.body.appendChild(form); dataType: 'json',
data: {
var input = document.createElement('input'); goods_data: encodeURIComponent(CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(JSON.stringify(goodsDataList)))),
input.type = 'hidden'; buy_type: 'goods',
input.name = 'goods_data'; address_id: '0',
input.value = JSON.stringify(goodsDataList); // 直接 JSONBuyService 自动处理 site_model: '2'
form.appendChild(input); },
success: function(ret) {
form.submit(); // POST → Buy::Index → BuyDataStorage → 跳转确认页 if (ret.code === 0) {
// 成功,跳转到支付或订单页
window.location.href = ret.data.jump_url || ret.data.order_id;
} else if (ret.code === -400 && ret.data) {
// 未登录,跳转到登录页
window.location.href = ret.data;
} else {
alert(ret.msg || '提交订单失败');
}
},
error: function(xhr) {
alert('网络错误: ' + (xhr.responseText || '请求失败'));
}
});
}, },
bindEvents: function() { bindEvents: function() {