修复孔夫子搜索接口: keyword/list + PHPSESSID + 正确字段映射(与zhizhu一致)

This commit is contained in:
97694732@qq.com 2026-06-03 16:08:51 +08:00
parent bc4f43756c
commit a5bb2e3b9b
2 changed files with 46 additions and 26 deletions

View File

@ -210,10 +210,13 @@
<!-- 商品列表 -->
<view class="product-grid" v-else>
<view class="grid-item" v-for="(item, index) in sortedProductList.slice(0, 12)" :key="index">
<image class="grid-image" :src="item.image" mode="aspectFill" @click="previewProductImage(index)" v-if="item.image"></image>
<text class="grid-book-name">{{ item.bookName || '未知书名' }}</text>
<text class="grid-author">{{ item.author || item.shopName || '' }}</text>
<text class="grid-total-price">{{ item.totalPrice }}</text>
<text class="grid-condition">{{ item.condition || item.pubDate || '' }}</text>
<text class="grid-price-detail" v-if="item.shippingFee && item.shippingFee > 0">{{ item.shippingFee }}</text>
<text class="grid-condition">{{ item.condition || '' }}</text>
<text class="grid-shop">{{ item.shopName || '' }}</text>
</view>
<!-- 无数据提示 -->
@ -934,7 +937,8 @@ export default {
})
// 2. -
searchProducts(this.isbn).then(data => {
const phpsessid = this.kongfzToken || uni.getStorageSync('kongfz_phpsessid') || ''
searchProducts(this.isbn, { phpsessid }).then(data => {
this.isLoading = false
if (data && data.total > 0) {
//
@ -947,16 +951,16 @@ export default {
// 12
const list = (data.list || []).slice(0, 12)
this.productList = list.map(item => ({
image: '',
totalPrice: item.prodNum + '本在售',
bookPrice: '',
shippingFee: '',
condition: item.binding || '',
shopName: item.press || '',
bookName: item.bookName || '',
image: item.imgBigUrl || '',
totalPrice: item.priceText || '',
bookPrice: (item.priceText || '0').replace(/[^\d.]/g, ''),
shippingFee: item.postage && item.postage.shippingList && item.postage.shippingList.length > 0 ? item.postage.shippingList[0].shippingFee || '0' : '0',
condition: item.qualityText || '',
shopName: item.shopName || '',
bookName: item.title || '',
author: item.author || '',
pubDate: item.pubDate || '',
bookId: item.bookId || ''
pubDate: item.pubDateText || '',
bookId: item.id || ''
}))
} else {
this.marketData = { onSale: 0, old: 0, new: 0, sold: 0 }
@ -1870,6 +1874,13 @@ export default {
width: 100%;
}
.grid-price-detail {
font-size: 18rpx;
color: #909399;
display: block;
text-align: center;
}
.grid-book-name {
font-size: 24rpx;
color: #303133;

View File

@ -146,30 +146,39 @@ export default {
}
/**
* 搜索孔夫子商品公开搜索API需登录
* 搜索孔夫子在售商品登录Cookie
* @param {string} keyword ISBN或书名
* @param {number} page 页码
* @param {object} options {phpsessid, page}
* @returns {Promise<{total: number, list: Array}>}
* list中每项: {id, title, author, press, priceText, imgBigUrl, shopName, qualityText, pubDateText, postage}
*/
export function searchProducts(keyword, page = 1) {
export function searchProducts(keyword, options = {}) {
const { phpsessid = '', page = 1 } = options
return new Promise((resolve, reject) => {
uni.request({
url: `https://search.kongfz.com/pc-gw/search-web/client/pc/product/keyword/isbnList?dataType=0&keyword=${encodeURIComponent(keyword)}&page=${page}`,
url: 'https://search.kongfz.com/pc-gw/search-web/client/pc/product/keyword/list',
method: 'GET',
data: {
dataType: 0,
keyword: keyword,
page: page,
userArea: '13003000000'
},
header: {
'Accept': 'application/json, text/plain, */*',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36',
'Referer': `https://search.kongfz.com/product/?keyword=${encodeURIComponent(keyword)}`,
'sec-ch-ua': '"Chromium";v="148", "Google Chrome";v="148", "Not/A)Brand";v="99"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"'
'Cookie': phpsessid ? `PHPSESSID=${phpsessid}` : ''
},
success: (res) => {
console.log('孔夫子搜索响应:', res.statusCode, res.data)
if (res.statusCode === 200 && res.data && res.data.status === 1 && res.data.data) {
resolve(res.data.data)
} else if (res.statusCode === 200 && res.data && res.data.data) {
resolve(res.data.data)
console.log('孔夫子在售搜索响应:', res.statusCode, res.data)
if (res.statusCode === 200 && res.data && res.data.status === 1) {
const itemResp = res.data.data && res.data.data.itemResponse
if (itemResp) {
resolve({
total: itemResp.total || 0,
list: itemResp.list || []
})
} else {
resolve({ total: 0, list: [] })
}
} else {
resolve({ total: 0, list: [] })
}