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

import {AsyncStorage, NativeModules} from 'react-native';
import config from './../config';
import MD5 from "md5"
import URI from 'urijs'
import {_getPassport} from "./AppService";
import Toast from 'react-native-simple-toast'
export let passportId = ""
export let identityId = ""
export let ownerUserId = ""
export let tenantId=""
export let ownerUserName=""
class ResponseError extends Error {
	constructor(message, code, origin) {
		super(message);
		this.code = code;
		this.origin = origin;
	}
}

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

export async function getPassportId() {
	if (NativeModules.security) {
		try{
			const getPassportIdPromise = new Promise((resolve, reject) => {
				NativeModules.security.getPassportId().then((result) => {
						resolve(result);
					}
				)
			})
			passportId = await getPassportIdPromise
			const data = await _getPassport({id: passportId})
			const {passport,errors, firstErrorMessage,}=data
			if(errors.length>0){
				Toast.show(firstErrorMessage)
			}else{
				console.log("passport",passport)
				ownerUserId = passport.userId
				ownerUserName=passport.userName
				tenantId=passport.tenantId
			}
		}catch (e){
			console.warn(e)
		}

		return
	}
	passportId = "938954575413907456"
	ownerUserId = "532768031404068864"
	ownerUserName="路人甲"
}

export async function getIdentityId() {
	if (NativeModules.security) {
		try{
			const getIdentityIdPromise = new Promise((resolve, reject) => {
				NativeModules.security.getIdentityId().then((result) => {
						resolve(result);
					}
				);
			})
			identityId = await getIdentityIdPromise
		}catch(e){
			console.warn(e)
		}
		return
	}
	identityId = "938957499942703104"
}

// appKey需要提供给商城使用,保持export
export const app_key = config.app_key; //dev
export const secret = config.secret; //dev

async function getPostParameter(request) {
	var post_data = '';
	var param_array = new Object();
	// this.passportId = await getPassportId();
	// this.identityId = await identityId();

	// 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.sessionId = passportId;
	param_array.session = passportId;
	param_array.passportId = passportId,
		param_array.identityId = identityId,
		param_array.format = 'json';
	param_array.sign_method = 'md5';
	param_array.timestamp = Date.parse(new Date());
	param_array.app_key = app_key;
	param_array.v = '1.0';

	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 = 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 + secret;
		param_sign = MD5(strTemp).toString().toUpperCase();
		post_data = 'sign=' + param_sign.toUpperCase();
		//escape or encodeURI
		for (var i = 0; i < arrayKeyTemp.length; i++) {
			if (isArray(param_array[arrayKeyTemp[i]])) {
				post_data = post_data + '&' + arrayKeyTemp[i] + '=' + escape(JSON.stringify(param_array[arrayKeyTemp[i]]));
			} else {
				post_data = post_data + '&' + arrayKeyTemp[i] + '=' + escape(param_array[arrayKeyTemp[i]]);
			}
		}
	}
	console.log(post_data)
	return post_data;
}

async function request(url, data, _options) {

	const options = _options || {};
	options.method = options.method || 'GET';
	options.headers = options.headers || {};
	options.body = await getPostParameter(data)

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


}

//post
export function post(data, options) {
	console.log(config.apiUrl)
	return request(config.apiUrl, data, {
		method: 'POST',
		mode: "cors",
		headers: {
			'Content-Type': 'application/x-www-form-urlencoded',
		},
		...options,
	});
}

//上传
export async function upload(uri) {
	const body = new FormData();
	body.append('File', {
		uri,
		type: 'image/jpeg',
		name: new URI(uri).filename()
	});
	body.append("Type", "ATTACHMENT");
	body.append("Ext", "jpg")
	const options = {
		method: 'POST',
		headers: {
			'Content-Type': 'multipart/form-data',
		},
		body,
	};
	const resp = await fetch(config.uploadUrl + "?passportId=" + passportId, 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);
	}
	return json;
}