whalecloud-dxp-api-react-native
Version:
This section explains how to use the SDK and illustrates it with an example: - This chapter is essential to learn - For specific business development, see [Bussiness Scenario](https://www.digchan.info/en-US/dxp/user-sso/sign-up) - The Business Scenario pr
100 lines (92 loc) • 3.38 kB
text/typescript
import 'react-native-url-polyfill/auto';
import axios, { AxiosInstance, AxiosResponse, InternalAxiosRequestConfig } from 'axios';
import { Configuration } from './src/index';
import * as dxp from './src/api';
// 创建 Axios 实例
const axiosInstance: AxiosInstance = axios.create();
// 动态 headers 的存储
let dynamicHeaders: Record<string, string> = {};
// 动态打开log 输出
let openConfigLog: boolean = false;
// 动态打开log 输出
let accessToken: string = '';
export const setDXPRequestHeaders = (headers: Record<string, string>): void => {
dynamicHeaders = headers;
};
export const setDXPConfigLog = (configLog: boolean): void => {
openConfigLog = configLog;
};
const getDXPAccessToken = () => {
return accessToken
};
// 添加请求拦截器
axiosInstance.interceptors.request.use(
(config: InternalAxiosRequestConfig): InternalAxiosRequestConfig => {
// 在发送请求之前将动态属性添加到请求头
config.headers = {
...config.headers,
...dynamicHeaders,
} as any;
if (openConfigLog) {
console.log('====================================');
console.log('config info', config);
console.log('====================================');
}
return config;
},
(error: any): Promise<any> => {
return Promise.reject(error);
}
);
// 添加响应拦截器
axiosInstance.interceptors.response.use(
(response: AxiosResponse): AxiosResponse => {
if(response.data.token){
accessToken = response.data.token
}
return response;
},
(error: any): any => {
return {
code: error?.code || '',
message: error?.message || '',
data: error?.response?.data || '',
status: error?.response?.status || 404,
responseURL: error?.response?.request?.responseURL || '',
};
}
);
// 创建配置对象
export const configuration = new Configuration({
basePath: '', // 替换为您的 API 基础 URL
baseOptions: {
axiosInstance,
},
});
// 使用泛型来定义 createApiInstance 的返回类型
const createApiInstance = <T>(ApiClass: new (config: Configuration) => T): T => {
const apiInstance = new ApiClass(configuration);
(apiInstance as any).axios = axiosInstance; // 将 axiosInstance 直接赋值给 API 实例
return apiInstance;
};
// 创建 API 实例对象
export const DXPApi = {
AgreementManagementApi: createApiInstance(dxp.AgreementManagementApi),
CommonManagementApi: createApiInstance(dxp.CommonManagementApi),
ContentManagementApi: createApiInstance(dxp.ContentManagementApi),
CustomerBalanceManagementApi: createApiInstance(dxp.CustomerBalanceManagementApi),
CustomerBillManagementApi: createApiInstance(dxp.CustomerBillManagementApi),
CustomerManagementApi: createApiInstance(dxp.CustomerManagementApi),
PackageAdvantageApi: createApiInstance(dxp.PackageAdvantageApi),
ProductCatalogManagementApi: createApiInstance(dxp.ProductCatalogManagementApi),
ProductOrderingApi: createApiInstance(dxp.ProductOrderingApi),
PromotionManagementApi: createApiInstance(dxp.PromotionManagementApi),
SubscriberManagementApi: createApiInstance(dxp.SubscriberManagementApi),
UserManagementApi: createApiInstance(dxp.UserManagementApi),
UserManagementLinkApi: createApiInstance(dxp.UserManagementLinkApi),
axiosInstance,
setDXPRequestHeaders,
setDXPConfigLog,
configuration,
getDXPAccessToken
};