Это мой файл rest.php
<?php
chdir('../../..');
require_once 'SugarWebServiceImplv4_1_custom.php';
$webservice_path = 'service/core/SugarRestService.php';
$webservice_class = 'SugarRestService';
$webservice_impl_class = 'SugarWebServiceImplv4_1_custom';
$registry_path = 'custom/service/v4_1_custom/registry.php';
$registry_class = 'registry_v4_1_custom';
$location = 'custom/service/v4_1_custom/rest.php';
require_once 'service/core/webservice.php';
Это мой файл SugarWebServiceImplv4_1_custom.php, в котором я написал собственные методы.
<?php
header("Access-Control-Allow-Origin: *");
header("Access-Control-Max-Age: 3600");
header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");
if (!defined('sugarEntry')){
define('sugarEntry', true);
}
require_once 'service/v4_1/SugarWebServiceImplv4_1.php';
class SugarWebServiceImplv4_1_custom extends SugarWebServiceImplv4_1
{
public function custom_test($username)
{
$arr = array ('a'=>$username,'b'=>22,'c'=>32,'d'=>44,'e'=>55);
return json_encode($arr);
die;
}
}
Это мой файл registry.php, в котором я зарегистрировал свой собственный метод
<?php
require_once 'service/v4_1/registry.php';
class registry_v4_1_custom extends registry_v4_1
{
protected function registerFunction()
{
parent::registerFunction();
$this->serviceClass->registerFunction('custom_test',
array(
'username'=>'xsd:string),
array(
'return'=>'tns:get_array')
);
}
}
Проблема в том, что я передаю данные через метод get.
{"username":"some username"}
Я получаю результат, но не знаю, как передать его методом отправки через приложение IOS. Я пытался передать его, но ничего не получаю от имени пользователя. Я также проверил ответ через curl, он работает с помощью curl, но мне нужно подключить его к IOS. Помощь будет оценена
На самом деле мы создаем гибридное приложение для IOS с использованием Angular 5 и Ionic 3. Вот код auth-services.ts
public login(credentials){
if (credentials.username === null || credentials.password === null){
return Observable.throw("Please enter credentials");
} else {
this.username1 = credentials.username;
this.password1 = credentials.password;
return Observable.create(observer =>{
// At this point make a request to your backend to make a real check!
this.method1 = "custom_test";
this.inputType = "JSON";
this.responseType = "JSON";
this.encryptionValue = "PLAIN";
this.bodyData = {}; //get method calling
console.info(JSON.stringify(this.bodyData));
//Sending the Username and Password to the Web Server for authentication. Change the URL Get the response message
this.servicesProvider.restApi("post","http://exmaple.com/custom/service/v4_1_custom/rest.php",this.bodyData).then(
(res) => {
console.info("Response stringify :",JSON.stringify(res));
console.info("Response parse :", res);
console.info("Status :",res.status);
this.response = res.status; //TODO: Replace res.username with res.message as we have to check for user exist or not.
if (this.response == "success out") {
this.success = true;
this.storage.set("status",this.response); //Username value stored in localstorage
this.currentUser = new User('Simon', '[email protected]');
observer.next(this.success);
observer.complete();
} else {
this.success = false;
observer.next(this.success);
observer.complete();
}
}
);
}
Вот файл services.ts. это общий файл rest api для отправки запросов rest api.
restApi(method,url,data) {
console.info("inside restApi");
switch(method) {
case 'post' : {
console.info("Inside Post Method");
/*
return this.httpClient.post(url,data)
.subscribe(
(res:any) => {
console.info("POST response below");
console.info(res.username);
this.responseData = JSON.stringify(res);
console.info("ResponseData Value");
console.info(this.responseData);
return this.responseData;
}); */
let headers = new Headers({'content-type':'application/json'});
let options = new RequestOptions({ headers:this.headers });
this.responseFromFunction = this.http.post(url,data).toPromise()
.then(this.extractData)
.catch(this.handleError);
break;
}
case 'get' : {
console.info("Inside Get Method");
let headers = new Headers({'content-type':'application/json'});
let options = new RequestOptions({ headers:this.headers });
this.responseFromFunction = this.http.get(url, options).toPromise()
.then(this.extractData)
.catch(this.handleError);
break;
}
case 'put' : {
console.info("Inside Put Method");
this.responseFromFunction = this.httpClient.put(url,data)
.subscribe((res:any) => {
console.info(res);
});
break;
}
case 'delete' : {
console.info("Inside Delete Method");
this.responseFromFunction = this.httpClient.delete(url)
.subscribe((res:any) => {
console.info(res);
});
break;
}
default : {
this.responseFromFunction = {"message":"error"};
console.info("Unknow Method Entered. Or write method in small lowercase only");
// return "Invalid Method";
}
}
console.info("Outside switch case");
console.info(this.responseFromFunction);
return this.responseFromFunction;
}
private extractData(res: Response) {
// console.info("Resp :", res.json());
// console.info("Stringy :", JSON.stringify(res));
return res.json();
}
private handleError(error: any): Promise<any> {
console.error('An error occurred', error);
return Promise.reject(error.message || error);
}
}
Я не понимаю, как передать имя пользователя в rest_data
Я только что отредактировал свой код, пожалуйста, проверьте.
Да, он работает с методом get, но не с post. Мы проверили его с помощью POSTMAN, но он не работает и с помощью почты
проверьте скриншот почтальона, пожалуйста
Я получаю ответ, но поскольку я передал значение имени пользователя через сообщение, я не получил его в ответ.
хорошо, это означает, что ваш запрос почтальона работает нормально ... теперь вам нужно разобраться с этим динамическим $username
но сначала вам нужно проверить обновленный ответ ниже и сообщить нам, работает он или нет.
Дайте мне знать, если ответ поможет вам решить проблему, или мы можем найти другие способы.
ваша проблема решена мам? или еще какие-то проблемы?
Я обновлю .... сервер сейчас не отвечает, поэтому не могу проверить .. вот почему здесь нет обновлений
не беспокойся мам .. спасибо






ЕСЛИ вы используете Angular 5, тогда:
Выполнение запроса POST
Приложения часто отправляют данные POST на сервер. Они отправляют POST при отправке формы. В следующем примере HeroesService публикует сообщения при добавлении героя в базу данных. приложение / герои / heroes.service.ts (addHero)
/** POST: add a new hero to the database */
addHero (hero: Hero): Observable<Hero> {
return this.http.post<Hero>(this.heroesUrl, hero, httpOptions)
.pipe(
catchError(this.handleError('addHero', hero))
);
}
Метод HttpClient.post() похож на метод get () в том, что он имеет параметр типа (вы ожидаете, что сервер вернет нового героя) и принимает URL-адрес ресурса.
Требуется еще два параметра:
hero - the data to POST in the body of the request.
`httpOptions` - the method options which, in this case, specify required headers.
Конечно, он выявляет ошибки примерно так же, как описано выше.
HeroesComponent инициирует фактическую операцию POST, подписавшись на Observable, возвращаемый этим методом службы.
приложение / герои / heroes.component.ts (addHero)
this.heroesService.addHero(newHero)
.subscribe(hero => this.heroes.push(hero));
Когда сервер успешно отвечает новым добавленным героем, компонент добавляет этого героя в отображаемый список героев.
Отредактированный ответ:
Я видел скриншот вашего почтальона, вы передаете имя пользователя
Он работает, когда я отправляю запрос POST на URL-адрес jsonplaceholder.typicode.com/posts и получаю те же данные, что и ответ, который я отправляю в запросе POST. Итак, мой код Angular работает правильно.
Где ваш код iOS?