EC-CUBEの顧客情報を、SugarCRMの取引担当者に変換して移行してみた
わりとタイトルのままですが、EC-CUBEの顧客情報をSugarCRMを使って管理したいという要望が結構あるようなので試してみました。
実際にはプラグイン化して、EC-CUBEの登録時にSugarCRMに同期する感じかな?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 |
<?php //SugarCRMのURLとDBのID/PASS $url = "http://www.sample.com/sugarcrm/soap.php?wsdl"; $username = "admin"; $password = "admin"; //SOAPのライブラリファイルをダウンロードして require_once("./lib/nusoap.php"); //WSDLで通信オブジェクトを生成 $client = new nusoap_client($url, 'wsdl'); //エラーがあったら表示して終了 $err = $client->getError(); if ($err) { echo '<h2>Constructor error</h2><pre>' . $err . '</pre>'; echo '<h2>Debug</h2><pre>' . htmlspecialchars($client->getDebug(), ENT_QUOTES) . '</pre>'; exit(); } //ログイン配列を生成 $login_parameters = array( 'user_auth' => array( 'user_name' => $username, 'password' => md5($password), 'version' => '1' ), 'application_name' => 'SoapTest', 'name_value_list' => array( ), ); //ログイン $login_result = $client->call('login', $login_parameters); //ログイン結果を表示 echo '<pre>'; print_r($login_result); echo '</pre>'; //ログイン成功ならセッションIDが返ってくるので、それを使ってDB操作 $session_id = $login_result['id']; //DB接続情報を読み込む require_once "./dsn.php"; //EC-CUBEのデータベースにログインする。 try { $pdo = new PDO('mysql:dbname='. $dsn['dbname'] .";host=" . $dsn['host'], $dsn['user'], $dsn['pass']); } catch (PDOException $e) { exit('データベースに接続できませんでした。' . $e->getMessage()); } $stmt = $pdo->query('SET NAMES utf8'); if (!$stmt) { $info = $pdo->errorInfo(); exit($info[2]); } //EC-CUBEの全個客情報を持ってくる $stmt = $pdo->prepare('SELECT * FROM dtb_customer'); $stmt->execute(); if (!$stmt) { $info = $pdo->errorInfo(); exit($info[2]); } while ($data = $stmt->fetch(PDO::FETCH_ASSOC)) { //ループ毎に顧客情報を配列にPUSHしていく $arr_data[] = array( //対応するフィールドが無かったらコメントアウトしておく。 //array('name' =>'id', 'value' => $data['']), array('name' =>'date_entered', 'value' => $data['create_date']), array('name' =>'date_modified', 'value' => $data['update_date']), //array('name' =>'modified_user_id', 'value' => $data['']), //array('name' =>'created_by', 'value' => $data['']), array('name' =>'description', 'value' => $data['note']), //array('name' =>'deleted', 'value' => $data['']), //array('name' =>'assigned_user_id', 'value' => $data['']), //array('name' =>'salutation', 'value' => $data['']), array('name' =>'last_name', 'value' => $data['name01']), array('name' =>'first_name', 'value' => $data['name02']), //array('name' =>'title', 'value' => $data['']), //array('name' =>'department', 'value' => $data['']), //array('name' =>'do_not_call', 'value' => $data['']), //array('name' =>'phone_home', 'value' => $data['']), //array('name' =>'phone_mobile', 'value' => $data['']), array('name' =>'phone_work', 'value' => $data['tel01'].$data['tel02'].$data['tel03']), //array('name' =>'phone_other', 'value' => $data['']), array('name' =>'phone_fax', 'value' => $data['fax01'].$data['fax02'].$data['fax03']), array('name' =>'primary_address_street', 'value' => $data['addr02']), array('name' =>'primary_address_city', 'value' => $data['addr01']), array('name' =>'primary_address_state', 'value' => $data['pref']), array('name' =>'primary_address_postalcode', 'value' => $data['zip01'].$data['zip02']), //array('name' =>'primary_address_country', 'value' => $data['']), //array('name' =>'alt_address_street', 'value' => $data['']), //array('name' =>'alt_address_city', 'value' => $data['']), //array('name' =>'alt_address_state', 'value' => $data['']), //array('name' =>'alt_address_postalcode', 'value' => $data['']), //array('name' =>'alt_address_country', 'value' => $data['']), //array('name' =>'assistant', 'value' => $data['']), //array('name' =>'assistant_phone', 'value' => $data['']), //array('name' =>'lead_source', 'value' => $data['']), //array('name' =>'reports_to_id', 'value' => $data['']), array('name' =>'birthdate', 'value' => $data['birth']), //array('name' =>'portal_name', 'value' => $data['']), //array('name' =>'portal_active', 'value' => $data['']), //array('name' =>'portal_app', 'value' => $data['']), //array('name' =>'campaign_id', 'value' => $data['']), ); } //SugarCRMに送るデータを、配列に入れる。 $set_entry_params = array( 'session' => $session_id, 'module_name' => 'Contacts', 'name_value_lists' => $arr_data ); //複数のINSERT文を、配列で一気に送る $set_entry_result = $client->call('set_entries', $set_entry_params); echo "set_entries_result="; print_r($set_entry_result); //PDOを廃棄(DBログアウト) $pdo = null; //最後にちゃんとログアウト操作をする $result = $client->call('logout', array('session'=>$session_id)); //ログアウト結果を表示 echo "logout_result="; print_r($result); ?> |