From 65784b83fa260946cdf1a9bec65612eec6405ee0 Mon Sep 17 00:00:00 2001 From: Patrick Peng Sun Date: Sat, 24 Jun 2017 18:02:43 +1000 Subject: [PATCH] search lead with a specific openID is implemented and tested. --- crmLead.go | 69 ++++++++++++++++++++++++++++++++++++++++++++++++- crmLead_test.go | 22 ++++++++++++++-- 2 files changed, 88 insertions(+), 3 deletions(-) diff --git a/crmLead.go b/crmLead.go index 8689e39..27795df 100644 --- a/crmLead.go +++ b/crmLead.go @@ -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 +} diff --git a/crmLead_test.go b/crmLead_test.go index 91b8eb0..c5d1eee 100644 --- a/crmLead_test.go +++ b/crmLead_test.go @@ -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) }