rpc.js 8.13 KB
/**
 * Created by tdzl2003 on 6/18/16.
 */

import {AsyncStorage, NativeModules} from 'react-native';
import {EventEmitter} from 'fbemitter';
import URI from 'urijs';
import {observable} from 'mobx';

const MD5 = require("crypto-js/md5");

// import {apiUrl,tenantId,uploadUrl,uploadUrl2} from '../config';
// import { tenant } from '../../../index';

export let config={
	apiUrl:null,
	app_key:null,
	secret:null,
	uploadUrl:null,
	tenantId:null,
	htmlUrl:null
}

class ResponseError extends Error {
	constructor(message, code, origin) {
		super(message);
		this.code = code;
		this.origin = origin;
	}
}

const RPC = new EventEmitter();
const emit = RPC.emit.bind(RPC);
export default RPC;
const tenantid = 300029
const KEY_TOKEN = 'accessToken';
const ROOT_URL = '';
const UPLOAD_TOKEN_URL = 'upload';
const token = observable.box(null);

export function getToken() {
	return token.get();
}

export function saveToken(_token) {
	token.set(_token);
	return AsyncStorage.setItem(KEY_TOKEN, token);
}

export function mobShare(p1, p2, p3, p4) {
	p3 = 'http://192.168.1.30:9010/app.html';
	if (__ANDROID__) {
		const {MobLogin} = NativeModules;
		MobLogin.showShare(p1, p2, p3, p4);
	}
	else {
		var customShare = NativeModules.CustomShare;
		customShare.showShare(p1, p2, p3, p4);
	}
}

export async function loadToken() {
	token.set(await AsyncStorage.getItem(KEY_TOKEN));
	return token.get();
}

export async function clearToken() {
	await AsyncStorage.removeItem(KEY_TOKEN);
	token.set(null);
}

export const isArray = (o) => {
	return Object.prototype.toString.call(o) === '[object Array]';
}

const getPassportId = () => {
	if (global.cache.passport) {
		return global.cache.passport.id;
	}
	return 0;
}
const getIdentity = () => {
	return global.cache.identityId;
}

// appKey需要提供给商城使用,保持export
export const app_key = '0617CA8376F9901F28FF46B69BF9CF44'; //dev
export const secret = '28570C9D069ED51226DD9F028BD5E6DD'; //dev

// if(require('electron').remote.getGlobal('isDev') != true)
// {//生产
//     app_key = '0617CA8376F9901F28FF46B69BF9CF47';//
//     secret = '28570C9D069ED51226DD9F028BD5E6DC';
// }
// else
// {
//     app_key = '0617CA8376F9901F28FF46B69BF9CF44'; //dev
//     secret = '28570C9D069ED51226DD9F028BD5E6DD'; //dev
// }

const getPostParameter = async (request) => {

	var post_data = '';
	var param_array = new Object();
	// this.passportId = getPassportId();
	// this.identityId = getIdentity();

	// if (this.passportId != undefined && this.passportId != null && this.passportId > 0) {
	// 	param_array.passportId = this.passportId;
	// }
	// if (this.identityId != undefined && this.identityId != null && this.identityId > 0) {
	// 	param_array.identityId = this.identityId;
	// }
	param_array.format = 'json';
	param_array.sign_method = 'md5';
	param_array.timestamp = Date.parse(new Date());
	param_array.app_key = config.app_key;
	param_array.v = '1.0';
	const session=await AsyncStorage.getItem("session")
	if(session){
		param_array.session=session
	}
	for (var p in request) { // 方法
		if (request[p] != null && request[p] != undefined && typeof (request[p]) != "function") {

			param_array[p] = request[p];
		}
	}
	{
		var param_sign;
		var arrayKey = [];
		var strTemp;
		var arrayKeyTemp = [];
		for (var p in param_array) { // 方法
			if (typeof (param_array[p]) != "function") {
				arrayKeyTemp.push(p);
			}
		}
		// 最后显示所有的属性
		arrayKeyTemp.sort();
		var strTemp = config.secret;
		for (var i = 0; i < arrayKeyTemp.length; i++) {
			if (isArray(param_array[arrayKeyTemp[i]])) {
				strTemp = strTemp + arrayKeyTemp[i] + JSON.stringify(param_array[arrayKeyTemp[i]]);
			} else {
				strTemp = strTemp + arrayKeyTemp[i] + param_array[arrayKeyTemp[i]];
			}
		}
		strTemp = strTemp + config.secret;
		param_sign = MD5(strTemp).toString().toUpperCase();
		post_data = 'sign=' + param_sign.toUpperCase();
		for (var i = 0; i < arrayKeyTemp.length; i++) {
			if (isArray(param_array[arrayKeyTemp[i]])) {
				post_data = post_data + '&' + arrayKeyTemp[i] + '=' + encodeURI(JSON.stringify(param_array[arrayKeyTemp[i]]));
			} else {
				post_data = post_data + '&' + arrayKeyTemp[i] + '=' + encodeURI(param_array[arrayKeyTemp[i]]);
			}
		}
	}

	// // 本地环境
	// const LOCAL_URL = "http://192.168.80.8:9010/router?";
	// // 开发环境
	// const DEV_URL = "https://api-daily.xiniunet.com/router?";
	// // 测试环境
	// const TEST_URL = "http://www-test.herentech.com:9010/router?";
	// // 生产环境
	// const ONLINE_URL = "http://www.herentech.com:9010/router?";

	return {
		url: config.apiUrl,    // 切换环境
		data: post_data
	};
}

// const uploadUrl = 'https://my-daily.xiniunet.com/api/fileUpload.do';
// const uploadUrl2="https://my-daily.xiniunet.com/api/attachmentUpload.do"
async function request(url, _options) {
	const uri = new URI(ROOT_URL + url);

	const options = _options || {};
	options.method = options.method || 'GET';
	options.headers = options.headers || {};
	if (token) {
		options.headers['x-accesstoken'] = token.get();
	}
	// console.log(__DEV__,'>>>>>')
	if (__DEV__) {
		console.log(`${options.method} ${uri}`);
		if (options.body) {
			console.log(options.body);
		}
	}

	const resp = await fetch(uri.toString(), options);
	const text = await resp.text();
	console.log('RESP:', text);
	const json = JSON.parse(text);

	// 如果请求失败
	if (resp.status !== 200) {
		if (resp.status === 401) {
			// HTTP 401 表示授权验证失败(通常是token已过期)
			emit('invalidToken');
			token.set(null);
		}

		throw new ResponseError(json.message, resp.status, json);
	}
	console.log(json)
	return json;
}

// file: {uri}
//上传
export async function upload(type,uri) {
	const body = new FormData();
	body.append('File', {
		uri,
		type:  'image/jpeg',
		name: new URI(uri).filename()});
	body.append("Type", type);
	// body.append("Ext", "png");
	// body.append("FileName", "1111");
	const options = {
		method: 'POST',
		headers: {

		},
		body,
	};

	const passportId=await AsyncStorage.getItem("session")
	const url =`${config.uploadUrl}?passportId=${passportId}`
	console.log(url)
	const resp = await fetch(url, options);
	const text = await resp.text();
	console.log('RESP:', text);
	const json = JSON.parse(text);
	// 如果请求失败
	if (resp.status !== 200) {
		throw new ResponseError(json.message, resp.status, json);
	}
	console.log(json)
	return json;
}

export async function upload2(uri,id,type,category) {
	const body = new FormData();
	body.append('file', {
		uri,
		type:  'image/jpeg',
		name: new URI(uri).filename()});
	body.append("method", "api.foundation.attachment.upload");
	body.append("businessId",id);
	body.append("businessType",type);
	body.append("Ext","jpg")
	if(category){
		body.append("businessCategory",category);
	}
	console.log(body)
	const options = {
		method: 'POST',
		headers: {

		},
		body,
	};

	const passportId=await AsyncStorage.getItem("session")
	const url =`${config.uploadUrl2}?passportId=${passportId}`
	console.log(url)
	const resp = await fetch(url, options);
	const text = await resp.text();
	console.log('RESP:', text);
	const json = JSON.parse(text);
	// 如果请求失败
	if (resp.status !== 200) {
		throw new ResponseError(json.message, resp.status, json);
	}
	console.log(json)
	return json;
}

export async function post(data, options) {
	// if(data.loginPassword){
	// 	data.loginPassword=MD5(data.loginPassword).toString()
	// }
	if(data.password){
		data.password=MD5(data.password).toString()
	}
	if(data.transactionPassword){
		data.transactionPassword=MD5(data.transactionPassword).toString()
	}
	// data.tenantNumber="300044";
	data.tenantid=config.tenantId;
	data.tenantId=config.tenantId;
	data.mobileType="MOBILE"
	// if(!data.tenantid||!!data.tenantid){
	// 	data.tenantId="658896334535139328"
	// }
	if(!data.systemType){
		data.systemType="B2C"
	}
	if(!data.deviceType){
		data.deviceType="MOBILE"
	}else if(data.deviceType==="null"){
		data.deviceType=null
	}

	var postParameter = await getPostParameter(data);
	return request(postParameter.url, {
		method: 'POST',
		mode: "cors",
		headers: {
			'Content-Type': 'application/x-www-form-urlencoded',
		},
		body: postParameter.data,
		...options,
	});
}

export const  init=function (data) {
	config=data
};

export const mallRpc={
	init:init,

}