| @@ -1,6 +1,12 @@ | |||
| package main | |||
| import "time" | |||
| import ( | |||
| "encoding/json" | |||
| "io/ioutil" | |||
| "log" | |||
| "net/http" | |||
| "time" | |||
| ) | |||
| type crmLeadInfo struct { | |||
| ID string `json:"id"` | |||
| @@ -88,3 +94,64 @@ func (m *crmLeadInfo) setModifiedAt(v time.Time) string { | |||
| func (m *crmLeadInfo) getTimeLayout() string { | |||
| return "2006-01-02 15:04:05" | |||
| } | |||
| func crmFindOpenID(openID string) (info crmLeadInfo, found bool, err error) { | |||
| found = false | |||
| req, err := http.NewRequest("GET", "https://c.hitxy.org.au/api/v1/Lead", nil) | |||
| if err != nil { | |||
| log.Println("crmGetRecord: cannot form good http Request") | |||
| log.Print(err) | |||
| return | |||
| } | |||
| //auth header | |||
| req.Header.Set("Authorization", crmAuthHeader()) | |||
| req.Header.Set("Accept", "application/json, text/javascript, */*; q=0.01") | |||
| req.Header.Set("Content-Type", "application/json") | |||
| //query string | |||
| q := req.URL.Query() | |||
| q.Add("maxSize", "20") | |||
| q.Add("maxSize", "0") | |||
| q.Add("sortBy", "createdAt") | |||
| q.Add("asc", "false") | |||
| q.Add("where[0][type]", "equals") | |||
| q.Add("where[0][attribute]", "wechat_hitxy_id") | |||
| q.Add("where[0][value]", openID) | |||
| req.URL.RawQuery = q.Encode() | |||
| // dump, err := httputil.DumpRequest(req, true) | |||
| // if err != nil { | |||
| // log.Fatal(err) | |||
| // } | |||
| // fmt.Printf("dump : %q", dump) | |||
| client := &http.Client{} | |||
| r, err := client.Do(req) | |||
| if err != nil { | |||
| return | |||
| } | |||
| defer r.Body.Close() | |||
| b, _ := ioutil.ReadAll(r.Body) | |||
| search := crmSearchLead{} | |||
| err = json.Unmarshal(b, &search) | |||
| if err != nil || search.Total <= 0 { | |||
| return | |||
| } | |||
| if search.Total > 1 { | |||
| log.Printf("ERROR It's wrong to have multiple record for same wechat id %s", openID) | |||
| for _, v := range search.List { | |||
| log.Println(v) | |||
| } | |||
| return | |||
| } | |||
| //we successfully reach here | |||
| info = search.List[0] | |||
| found = true | |||
| return | |||
| } | |||
| @@ -56,7 +56,7 @@ func TestDecodeLeadInfo(t *testing.T) { | |||
| r := crmLeadInfo{} | |||
| err := json.Unmarshal([]byte(msg), &r) | |||
| log.Println(r) | |||
| //log.Println(r) | |||
| AssertEqual(t, err, nil, "Decode CRM Lead Json shold be correct") | |||
| AssertEqual(t, r.ID, "58f4aa0682ea74bb8", "ID mismatch ") | |||
| @@ -204,7 +204,7 @@ func TestCrmLeadInfoByCompleteInfo(t *testing.T) { | |||
| }` | |||
| r := crmLeadInfo{} | |||
| err := json.Unmarshal([]byte(msg), &r) | |||
| log.Println(r) | |||
| //log.Println(r) | |||
| AssertEqual(t, err, nil, "") | |||
| AssertEqual(t, r.ID, "58f4aa0682ea74bb8", "ID mismatch ") | |||
| @@ -378,4 +378,22 @@ func TestSearchResult(t *testing.T) { | |||
| AssertEqual(t, len(r.List), 2, "") | |||
| AssertEqual(t, r.List[0].ID, "58f4aa0682ea74bb8", "") | |||
| AssertEqual(t, r.List[1].ID, "58f4a849502da6f33", "") | |||
| AssertEqual(t, r.List[1].AssignedUserName, "Admin", "") | |||
| } | |||
| func TestSearchResultZero(t *testing.T) { | |||
| msg := `{"total":0,"list":[]}` | |||
| r := crmSearchLead{} | |||
| err := json.Unmarshal([]byte(msg), &r) | |||
| AssertEqual(t, err, nil, "") | |||
| AssertEqual(t, r.Total, 0, "") | |||
| AssertEqual(t, len(r.List), 0, "") | |||
| } | |||
| func TestFindOpenIDOnline(t *testing.T) { | |||
| SetupConfig() | |||
| info, found, err := crmFindOpenID("weid1") | |||
| log.Println(info) | |||
| log.Println(found) | |||
| log.Println(err) | |||
| } | |||