Files
uni-fans-score/util/index.js
T

176 lines
4.5 KiB
JavaScript

import {
login,
getMyIndexInfo
} from "../config/user"
import {
URL,
appid
} from "@/config/url.js"
// 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)
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;
}