| package main | package main | ||||
| import "time" | |||||
| import ( | |||||
| "encoding/json" | |||||
| "io/ioutil" | |||||
| "log" | |||||
| "net/http" | |||||
| "time" | |||||
| ) | |||||
| type crmLeadInfo struct { | type crmLeadInfo struct { | ||||
| ID string `json:"id"` | ID string `json:"id"` | ||||
| func (m *crmLeadInfo) getTimeLayout() string { | func (m *crmLeadInfo) getTimeLayout() string { | ||||
| return "2006-01-02 15:04:05" | 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 | |||||
| } |
| r := crmLeadInfo{} | r := crmLeadInfo{} | ||||
| err := json.Unmarshal([]byte(msg), &r) | 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, err, nil, "Decode CRM Lead Json shold be correct") | ||||
| AssertEqual(t, r.ID, "58f4aa0682ea74bb8", "ID mismatch ") | AssertEqual(t, r.ID, "58f4aa0682ea74bb8", "ID mismatch ") | ||||
| }` | }` | ||||
| r := crmLeadInfo{} | r := crmLeadInfo{} | ||||
| err := json.Unmarshal([]byte(msg), &r) | err := json.Unmarshal([]byte(msg), &r) | ||||
| log.Println(r) | |||||
| //log.Println(r) | |||||
| AssertEqual(t, err, nil, "") | AssertEqual(t, err, nil, "") | ||||
| AssertEqual(t, r.ID, "58f4aa0682ea74bb8", "ID mismatch ") | AssertEqual(t, r.ID, "58f4aa0682ea74bb8", "ID mismatch ") | ||||
| AssertEqual(t, len(r.List), 2, "") | AssertEqual(t, len(r.List), 2, "") | ||||
| AssertEqual(t, r.List[0].ID, "58f4aa0682ea74bb8", "") | AssertEqual(t, r.List[0].ID, "58f4aa0682ea74bb8", "") | ||||
| AssertEqual(t, r.List[1].ID, "58f4a849502da6f33", "") | 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) | |||||
| } | } |