227 lines
6.4 KiB
JavaScript
227 lines
6.4 KiB
JavaScript
import {
|
|
login,
|
|
getMyIndexInfo
|
|
} from "../config/api/user"
|
|
import {
|
|
URL,
|
|
appid
|
|
} from "@/config/url.js"
|
|
import { getCommonByBrand } from "@/config/api/system"
|
|
import { HELP_CONTENT } from "@/constants/help"
|
|
// import { GET_PHONE_NUMBER_URL } from "../config/url"
|
|
|
|
// 微信登录方法
|
|
export const wxLogin = () => {
|
|
return new Promise((resolve, reject) => {
|
|
// 1. 获取微信登录凭证
|
|
uni.login({
|
|
provider: 'weixin',
|
|
success: async (loginRes) => {
|
|
|
|
try {
|
|
if (loginRes.code) {
|
|
// 2. 发送 code 到后端换取 token
|
|
const result = await login({
|
|
code: loginRes.code,
|
|
appid: "wx2165f0be356ae7a9"
|
|
})
|
|
|
|
if (result.code === 200) {
|
|
// 3. 保存token和用户信息
|
|
|
|
uni.setStorageSync('token', result.data.LoginWxVo.access_token)
|
|
uni.setStorageSync('client_id', result.data.LoginWxVo.client_id)
|
|
|
|
// 4. 登录成功后获取并缓存客服电话
|
|
fetchAndCacheCustomerPhone().catch(err => {
|
|
console.error('获取客服电话失败,但不影响登录', err)
|
|
})
|
|
|
|
resolve(result.data)
|
|
} else {
|
|
throw new Error(result.message || '登录失败')
|
|
}
|
|
} else {
|
|
throw new Error('获取微信登录凭证失败')
|
|
}
|
|
} catch (error) {
|
|
|
|
uni.showToast({
|
|
title: error.message || '登录失败',
|
|
icon: 'none'
|
|
})
|
|
reject(error)
|
|
}
|
|
},
|
|
fail: (error) => {
|
|
uni.showToast({
|
|
title: '微信登录失败',
|
|
icon: 'none'
|
|
})
|
|
reject(error)
|
|
}
|
|
})
|
|
})
|
|
}
|
|
|
|
// 检查登录状态
|
|
// export const checkLogin = () => {
|
|
// const token = uni.getStorageSync('token')
|
|
// return !!token
|
|
// }
|
|
|
|
// 获取用户信息
|
|
export const getUserInfo = () => {
|
|
return new Promise(async (res, rej) => {
|
|
const result = await getMyIndexInfo({
|
|
isHide: false,
|
|
})
|
|
res(result)
|
|
})
|
|
}
|
|
|
|
// 获取用户手机号
|
|
export const getUserPhoneNumber = (code) => {
|
|
return new Promise(async (resolve, reject) => {
|
|
try {
|
|
// 获取登录态信息
|
|
const token = uni.getStorageSync('token')
|
|
|
|
if (!token) {
|
|
reject(new Error('用户未登录'))
|
|
return
|
|
}
|
|
|
|
console.log('开始请求获取手机号,code=', code, '请求地址=', URL + '/app/user/getPhoneNumber')
|
|
|
|
// 发送请求到后端获取手机号
|
|
uni.request({
|
|
url: URL + '/app/user/getPhoneNumber',
|
|
method: 'POST',
|
|
header: {
|
|
'Authorization': 'Bearer ' + token,
|
|
'clientId': uni.getStorageSync('client_id'),
|
|
'Content-Type': 'application/json'
|
|
},
|
|
data: {
|
|
code: code, // 微信获取手机号授权后的临时code
|
|
appid: appid
|
|
},
|
|
success: (res) => {
|
|
console.log('请求获取手机号接口成功,原始响应:', JSON.stringify(res))
|
|
|
|
// 检查HTTP状态码
|
|
if (res.statusCode !== 200) {
|
|
reject(new Error(`HTTP错误: ${res.statusCode}`))
|
|
return
|
|
}
|
|
|
|
// 确保响应体存在
|
|
if (!res.data) {
|
|
reject(new Error('服务器返回空数据'))
|
|
return
|
|
}
|
|
|
|
// 正常返回响应数据,不做额外判断,由调用方处理业务状态码
|
|
resolve(res.data)
|
|
},
|
|
fail: (err) => {
|
|
console.error('请求获取手机号接口网络错误:', err)
|
|
reject(new Error('请求获取手机号接口失败: ' + (err.errMsg || JSON.stringify(err))))
|
|
}
|
|
})
|
|
} catch (error) {
|
|
console.error('获取手机号过程中出现异常:', error)
|
|
reject(new Error('获取手机号异常: ' + (error.message || JSON.stringify(error))))
|
|
}
|
|
})
|
|
}
|
|
|
|
// 调用微信支付分接口
|
|
export const initiateWeChatScorePayment = (paymentData) => {
|
|
return new Promise((resolve, reject) => {
|
|
// 确保paymentData包含所需数据
|
|
if (!paymentData || !paymentData.data || !paymentData.data.package) {
|
|
reject(new Error('支付参数不完整'));
|
|
return;
|
|
}
|
|
|
|
// 使用wx.openBusinessView打开微信支付分小程序
|
|
wx.openBusinessView({
|
|
businessType: 'wxpayScoreUse',
|
|
extraData: {
|
|
mch_id: paymentData.data.mch_id,
|
|
package: paymentData.data.package
|
|
},
|
|
success: (businessRes) => {
|
|
// 根据返回结果判断是否完成支付
|
|
if (businessRes.errMsg === 'openBusinessView:ok') {
|
|
resolve(businessRes);
|
|
} else {
|
|
reject(new Error('支付流程未完成'));
|
|
}
|
|
},
|
|
fail: (error) => {
|
|
console.error('微信支付分小程序调用失败', error);
|
|
uni.showToast({
|
|
title: error.errMsg || '支付分接口调用失败',
|
|
icon: 'none'
|
|
});
|
|
reject(error);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
export const getQueryString = function(url, name) {
|
|
var reg = new RegExp('(^|&|/?)' + name + '=([^&|/?]*)(&|/?|$)', 'i')
|
|
var r = url.substr(1).match(reg)
|
|
if (r != null) {
|
|
return r[2]
|
|
}
|
|
return null;
|
|
}
|
|
|
|
// 获取并缓存客服电话
|
|
export const fetchAndCacheCustomerPhone = async () => {
|
|
try {
|
|
// 获取当前语言
|
|
const locale = uni.getLocale ? uni.getLocale() : uni.getSystemInfoSync().language
|
|
const isEnglish = locale && (locale.toLowerCase().startsWith('en') || locale.toLowerCase().includes('en'))
|
|
|
|
// 根据语言设置品牌名称
|
|
const brandName = isEnglish ? 'fdzpower' : '风电者'
|
|
|
|
console.log('获取客服电话,当前语言:', locale, '品牌名称:', brandName)
|
|
|
|
// 调用接口获取客服电话
|
|
const res = await getCommonByBrand(brandName)
|
|
|
|
if (res.code === 200 && res.data && res.data.servicePhone) {
|
|
const phone = res.data.servicePhone
|
|
// 缓存客服电话
|
|
uni.setStorageSync('customerPhone', phone)
|
|
console.log('客服电话已缓存:', phone)
|
|
return phone
|
|
} else {
|
|
console.warn('获取客服电话失败,使用内置默认电话')
|
|
// 使用内置默认电话并缓存
|
|
const defaultPhone = HELP_CONTENT.CONTACT.PHONE.VALUE
|
|
uni.setStorageSync('customerPhone', defaultPhone)
|
|
return defaultPhone
|
|
}
|
|
} catch (error) {
|
|
console.error('获取客服电话出错,使用内置默认电话:', error)
|
|
// 使用内置默认电话并缓存
|
|
const defaultPhone = HELP_CONTENT.CONTACT.PHONE.VALUE
|
|
uni.setStorageSync('customerPhone', defaultPhone)
|
|
return defaultPhone
|
|
}
|
|
}
|
|
|
|
// 从缓存获取客服电话
|
|
export const getCustomerPhone = () => {
|
|
const phone = uni.getStorageSync('customerPhone')
|
|
// 如果没有缓存,返回内置默认值
|
|
return phone || HELP_CONTENT.CONTACT.PHONE.VALUE
|
|
} |