import Taro from '@tarojs/taro'; import { ProductType, QrCodeType } from '@/constants/product'; import http from '@/http'; import { API } from '@/http/api'; import { ProductInfo, GetProductDetailRequest, GetProductIsUnlockRequest, PostUseProductRequest, GetProductIsUnlockResponse, CustomerServiceInfo, CreatePayInfoRequest, CreatePayInfoResponse, CreatePayOrderParams, GetOrderInfoRequest, OrderInfo, } from '@/types/product'; import { getUserId } from '@/utils/user'; export const isCancelPay = err => err?.errMsg === 'requestPayment:fail cancel'; export const getOrderPrice = (price: number) => { // return 1; return price * 100; }; export async function requestProductList() { const data = { userId: getUserId() }; const list = await http.post(API.GET_PRODUCT_LIST, { data }); return list; } // 判断某个产品是否已经解锁 export async function requestProductUseRecord( productCode: ProductType, params: Omit = {} ) { const data: GetProductIsUnlockRequest = { ...params, productCode, userId: getUserId() }; // 返回结果不是空对象则是已经解锁 return await http.post(API.PRODUCT_USE_RECORD, { data, contentType: 'application/x-www-form-urlencoded', }); } // 使用某一个产品 export async function requestUseProduct( productCode: ProductType, params: Omit = {} ) { const data: PostUseProductRequest = { ...params, productCode, userId: getUserId() }; return await http.post(API.USE_PRODUCT, { data }); } // 获取某个产品的剩余解锁次数 export async function requestProductBalance(productCode: ProductType): Promise<[number, boolean | undefined]> { const data: GetProductDetailRequest = { productCode, userId: getUserId() }; const { balance, isPaidVip } = await http.post(API.GET_PRODUCT_DETAIL, { data, contentType: 'application/x-www-form-urlencoded', }); return [balance, isPaidVip]; } // 是否可以购买某一个产品 export async function requestAllBuyProduct(productCode: ProductType) { const data: GetProductDetailRequest = { productCode, userId: getUserId() }; const enable = await http.post(API.ALLOW_BUY_PRODUCT, { data, contentType: 'application/x-www-form-urlencoded', }); return enable; } export async function requestCsQrCode(_type: QrCodeType) { const result = await http.post(API.CS_QR_CODE); return 'https://publiccdn.neighbourhood.com.cn/img/bzQrcode.jpg'; // return `${DOMAIN}/${result.vxQrCode}`; } export async function requestCreatePayInfo(params: Omit) { const data: CreatePayInfoRequest = { ...params, payChannel: 1, payType: 1, userId: getUserId() }; const result = await http.post(API.CREATE_PAY_ORDER, { data }); const createPayInfo = JSON.parse(result.createPayInfo) as CreatePayOrderParams; return { ...result, createPayInfo } as CreatePayInfoResponse & { createPayInfo: CreatePayOrderParams }; } export async function requestOrderInfo(params: Omit) { const data: GetOrderInfoRequest = { ...params, userId: getUserId() }; const result = await http.post(API.GET_PAY_ORDER, { data, contentType: 'application/x-www-form-urlencoded', }); return result; } export async function requestPayment(params: Taro.requestPayment.Option) { return new Promise((resolve, reject) => Taro.requestPayment({ ...params, fail: reject, success: res => { params.success?.(res); resolve(res); }, }) ); }