Как публиковать данные с помощью REST API в комплекте crm

Это мой файл 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.

http://www.example.com/custom/service/v4_1_custom/rest.php?method=custom_test&input_type=json&response_type=json&rest_data=

{"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 API в комплекте crm

Я не понимаю, как передать имя пользователя в rest_data

Где ваш код iOS?

Syed Qamar Abbas 18.05.2018 07:23

Я только что отредактировал свой код, пожалуйста, проверьте.

Aakanksha Singh 18.05.2018 07:37

Да, он работает с методом get, но не с post. Мы проверили его с помощью POSTMAN, но он не работает и с помощью почты

Aakanksha Singh 18.05.2018 07:44

проверьте скриншот почтальона, пожалуйста

Aakanksha Singh 18.05.2018 07:51

Я получаю ответ, но поскольку я передал значение имени пользователя через сообщение, я не получил его в ответ.

Aakanksha Singh 18.05.2018 08:00

хорошо, это означает, что ваш запрос почтальона работает нормально ... теперь вам нужно разобраться с этим динамическим $username

Mittul At TechnoBrave 18.05.2018 08:11

но сначала вам нужно проверить обновленный ответ ниже и сообщить нам, работает он или нет.

Mittul At TechnoBrave 18.05.2018 08:13

Дайте мне знать, если ответ поможет вам решить проблему, или мы можем найти другие способы.

Mittul At TechnoBrave 18.05.2018 08:20

ваша проблема решена мам? или еще какие-то проблемы?

Mittul At TechnoBrave 18.05.2018 08:55

Я обновлю .... сервер сейчас не отвечает, поэтому не могу проверить .. вот почему здесь нет обновлений

Aakanksha Singh 18.05.2018 09:11

не беспокойся мам .. спасибо

Mittul At TechnoBrave 18.05.2018 10:30
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
11
843
1

Ответы 1

ЕСЛИ вы используете 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 работает правильно.

Aakanksha Singh 18.05.2018 07:56

Другие вопросы по теме