> For the complete documentation index, see [llms.txt](https://tobyisme.gitbook.io/laravel/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://tobyisme.gitbook.io/laravel/callwai-bu-mo-zu-de-api-fang-shi.md).

# Call API方式

如果你一個網站有很多個模組，有時候你可能會需要跨模組去call API有時候會需要call自己的API，以下我只是就我經歷過的專案來做介紹。

如果我們有很多個模組API要管理的話，我會在\app\Services\這底下建立不同的模組service，分別管理不同模組要call的API，像是我們iscar專案有很多個模組(ex:member、pm、brand、app、temple...等等)，所以就會有不同的service來管理我要去那個模組call API的function。

以下是memberservice的一小部分，看看就好。

```php
<?php
namespace App\Services;

define('QueryMember', config('global.query_member'));
define('ModifyMember', config('global.modify_member'));
define('Modacc', config('global.modacc'));
define('Modvrf', config('global.modvrf'));

class MemberService {

    /**
     * call member模組的API [QueryMember]
     * @param  [type] $md_mobile      [會員手機號碼]
     * @param  [type] $md_contactmail [會員電子信箱]
     * @global route  QueryMember     [member模組的API]
     * @global string Modacc          [模組帳號]
     * @global string Modvrf          [模組驗證碼]
     */
    public function callApiQueryMember($md_mobile,$md_contactmail){
        // 編輯要call API所需要傳入的值
        $arraydata['md_mobile'] = $md_mobile;
        $arraydata['md_contactmail'] = $md_contactmail;
        $arraydata['modacc'] = Modacc;
        $arraydata['modvrf'] = Modvrf;
        $url = QueryMember;
        // call API
        $request = \App\Library\CommonTools::curlModule($arraydata,$url);
        $request = $request['query_memberresult'];
        return $request;
    }

    /**
     * call member模組的API [ModifyMember]
     * @param  [type] $md_id          [會員代號]
     * @param  [type] $md_clienttype  [會員類型]
     * @global route  ModifyMember    [member模組的API]
     * @global string Modacc          [模組帳號]
     * @global string Modvrf          [模組驗證碼]
     */
    public function callApiModifyMember($md_id,$md_clienttype){
        // 編輯要call API所需要傳入的值
        $arraydata['md_id'] = $md_id;
        $arraydata['md_clienttype'] = $md_clienttype;
        $arraydata['modacc'] = Modacc;
        $arraydata['modvrf'] = Modvrf;
        $url = ModifyMember;
        // call API
        $request = \App\Library\CommonTools::curlModule($arraydata,$url);
        $request = $request['modify_memberresult'];
        return $request;
    }

}
```

上面的arraydata變數就是你api所需要傳入的值得陣列，然後url就是你要call的那隻api的route

然後大家應該會看到了我call API的方式是用Curl，cURL是一個利用URL語法在命令列下工作的檔案傳輸工具。

以下是我call API的curl function

```php
/**
 * Curl模組化使用
 * @param type array $post 傳送資料
 * @param type string $route 傳送route
 * @return array or null
 */
public static function curlModule ($post, $route){
    try {
        $curl = curl_init();
        curl_setopt_array($curl, array(
            CURLOPT_URL => $route,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING => "",
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 30,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => "POST",
            CURLOPT_POSTFIELDS => json_encode(json_encode($post)),
            CURLOPT_HTTPHEADER => array(
              "cache-control: no-cache",
              "content-type: application/json",
            ),
        ));
        $response = curl_exec($curl);
        $err = curl_error($curl);
        curl_close($curl);
        if ($err) {
            throw new \Exception($err);
        } else {
            // 將得到的回應(json字串)轉成陣列
            return \App\library\CommonTools::ConvertStringToArray($response);
        }
    } catch(\Exception $ex) {
        CommonTools::writeErrorLogByException($ex);
        return false;
    }
}
```

這樣就大功告成了喔。
