+ jdapi.SaveQualify

This commit is contained in:
gazebo
2019-08-15 12:22:01 +08:00
parent b338b87a02
commit da1ee8f496
2 changed files with 217 additions and 8 deletions

View File

@@ -1,9 +1,13 @@
package jdapi
import (
"bytes"
"crypto/md5"
"fmt"
"io/ioutil"
"mime/multipart"
"net/http"
"net/url"
"regexp"
"strings"
@@ -136,14 +140,56 @@ type PageShopInfo struct {
StoreShareURL string `json:"storeShareUrl"`
}
var (
monthSaleNumReg = regexp.MustCompile(`(\d+)([千|万])`)
const (
LincenceEconKindPerson = "个体工商户"
QualifyTypePerson = "25" // 营业执照
QualifyTypeCompany = "22" // 身份证,个体工商户要求填
QualifyTypeAddInfo = "31" // 附加信息,如果身份证是长期有效,要求身份证背面信息
SaveQualifyActionTypeCommit = 0 // 提交
SaveQualifyActionTypeSave = 1 // 暂时保存
)
func (a *API) AccessStorePage(fullURL string, params map[string]interface{}, isPost bool) (retVal map[string]interface{}, err error) {
type QualifyItem struct {
QualifyURL string `json:"qualifyUrl"`
QualifyType string `json:"qualifyType"`
QualifyExpireForever int `json:"qualifyExpireForever"` // 0永久有性1非永久有效需要填QualifyExpireEnd
QualifyExpireStart string `json:"qualifyExpireStart"`
QualifyExpireEnd string `json:"qualifyExpireEnd,omitempty"`
QualifyName string `json:"qualifyName,omitempty"`
QualifyOwner string `json:"qualifyOwner,omitempty"`
LicenceType string `json:"licenceType,omitempty"` // -1
QualifyNumber string `json:"qualifyNumber,omitempty"`
QualifyAddress string `json:"qualifyAddress,omitempty"`
LicenceName string `json:"licenceName,omitempty"`
EconKind string `json:"econKind,omitempty"`
Scope string `json:"scope,omitempty"`
}
var (
monthSaleNumReg = regexp.MustCompile(`(\d+)([千|万])`)
pageExceedLimitCodes = map[string]int{
"403": 1,
}
)
const (
KeyImgData = "imgData"
KeyImgName = "imgName"
ResultKeyData = "data"
ResultKeyResult = "result"
)
func (a *API) AccessStorePage2(fullURL string, params map[string]interface{}, isPost bool, resultKey string) (retVal interface{}, err error) {
if a.GetCookieCount() == 0 {
return nil, fmt.Errorf("需要设置Store Cookie才能使用此方法")
}
imgData := params[KeyImgData]
if imgData != nil {
delete(params, KeyImgData)
}
err = platformapi.AccessPlatformAPIWithRetry(a.client,
func() *http.Request {
var request *http.Request
@@ -151,8 +197,26 @@ func (a *API) AccessStorePage(fullURL string, params map[string]interface{}, isP
request, _ = http.NewRequest(http.MethodGet, utils.GenerateGetURL(fullURL, "", params), nil)
} else {
request, _ = http.NewRequest(http.MethodPost, fullURL, strings.NewReader(utils.Map2URLValues(params).Encode()))
if params[KeyImgName] == nil {
request.Header.Set("Content-Type", "application/x-www-form-urlencoded")
} else {
var b bytes.Buffer
w := multipart.NewWriter(&b)
if fw, err := w.CreateFormFile("uploadFile", params[KeyImgName].(string)); err != nil {
panic(err.Error())
} else {
fw.Write(imgData.([]byte))
}
for k, v := range params {
fmt.Println(k, " ", v)
w.WriteField(k, url.QueryEscape(fmt.Sprint(v)))
}
w.Close()
// b.WriteString(utils.Map2URLValues(params).Encode())
request, _ = http.NewRequest(http.MethodPost, fullURL, &b)
request.Header.Set("Content-Type", w.FormDataContentType())
}
request.Header.Set("charset", "UTF-8")
request.Header.Set("Content-Type", "application/x-www-form-urlencoded")
}
if err != nil {
return nil
@@ -166,13 +230,18 @@ func (a *API) AccessStorePage(fullURL string, params map[string]interface{}, isP
return platformapi.ErrLevelRecoverableErr, fmt.Errorf("mapData is nil")
}
retVal = jsonResult1
code := jsonResult1["code"].(string)
code, ok := jsonResult1["code"].(string)
if !ok {
return platformapi.ErrLevelGeneralFail, utils.NewErrorCode(utils.Format4Output(jsonResult1, true), "999")
}
if code == ResponseCodeSuccess {
retVal, _ = jsonResult1["result"].(map[string]interface{})
if resultKey != "" {
retVal = jsonResult1[resultKey]
}
return platformapi.ErrLevelSuccess, nil
}
newErr := utils.NewErrorCode(jsonResult1["msg"].(string), code)
if _, ok := exceedLimitCodes[code]; ok {
if _, ok := pageExceedLimitCodes[code]; ok {
return platformapi.ErrLevelExceedLimit, newErr
} else if _, ok := canRetryCodes[code]; ok {
return platformapi.ErrLevelRecoverableErr, newErr
@@ -184,6 +253,14 @@ func (a *API) AccessStorePage(fullURL string, params map[string]interface{}, isP
return retVal, err
}
func (a *API) AccessStorePage(fullURL string, params map[string]interface{}, isPost bool) (retVal map[string]interface{}, err error) {
result, err := a.AccessStorePage2(fullURL, params, isPost, ResultKeyResult)
if err == nil {
retVal = result.(map[string]interface{})
}
return retVal, err
}
func (a *API) GetRealMobile4Order(orderId, stationNo string) (mobile string, err error) {
retVal, err := a.GetStoreOrderInfo(orderId, stationNo)
if err == nil {
@@ -346,3 +423,47 @@ func MonthSaleNum2Int(monthSaleNumStr string) (monthSaleNum int) {
}
return monthSaleNum
}
func (a *API) StoreUploadImg(imgFileName string, imgBin []byte) (imgURL string, err error) {
result, err := a.AccessStorePage2("https://sta-store.jddj.com/store/uploadImg.json", map[string]interface{}{
KeyImgData: imgBin,
KeyImgName: imgFileName,
}, true, ResultKeyData)
if err == nil {
imgURL = result.(string)
}
return imgURL, err
}
func (a *API) StoreUploadImgByURL(inImgURL string) (imgURL string, err error) {
response, err := http.Get(inImgURL)
if err == nil {
defer func() {
response.Body.Close()
}()
if response.StatusCode == http.StatusOK {
bodyData, err2 := ioutil.ReadAll(response.Body)
if err = err2; err == nil {
imgName := utils.GetUUID()
if lastSlashIndex := strings.LastIndex(inImgURL, "/"); lastSlashIndex >= 0 {
imgName = inImgURL[lastSlashIndex+1:]
}
return a.StoreUploadImg(imgName, bodyData)
}
} else {
err = platformapi.ErrHTTPCodeIsNot200
}
}
return "", err
}
func (a *API) SaveQualify(stationNo string, actionType int, qualifyList []*QualifyItem) (err error) {
_, err = a.AccessStorePage2("https://sta-store.jddj.com/store/saveQualify.o2o", map[string]interface{}{
"stationNo": stationNo,
"actionType": actionType,
"qualifyList": qualifyList,
"type": 1,
"degrade": "no",
}, true, "")
return err
}

View File

@@ -56,7 +56,7 @@ func TestGetSkuPageImageInfo(t *testing.T) {
}
func TestGetCorporationInfo(t *testing.T) {
imgList, err := api.GetCorporationInfo("", "915101003431062533")
imgList, err := api.GetCorporationInfo("", "92330104MA28XPXH5G")
if err != nil {
t.Fatal(err)
}
@@ -101,3 +101,91 @@ func TestMonthSaleNum2Int(t *testing.T) {
t.Fatalf("num3:%d", num3)
}
}
func TestStoreUploadImgByURL(t *testing.T) {
outImgURL, err := api.StoreUploadImgByURL("http://image.jxc4.com/940c151db7e396f2ceaec0304597836f.jpg")
t.Log(outImgURL)
if err != nil {
t.Fatal(err)
}
}
func TestSaveQualify(t *testing.T) {
jsonStr := `
[
{
"qualifyUrl":"http://img30.360buyimg.com/vendersettle/jfs/t1/69834/24/6602/68812/5d4d35fdEaaf373c6/5c1c50e7bb6330e4.jpg",
"qualifyType":"25",
"qualifyExpireForever":0,
"qualifyExpireStart":"2017-09-07 00:00:00",
"qualifyName":"刘男",
"licenceType":"-1",
"qualifyNumber":"92330104MA28XPXH5G",
"qualifyAddress":"浙江省杭州市江干区八堡家园5排10号一楼102",
"licenceName":"杭州市江干区刘男便利店",
"econKind":"个体工商户",
"scope":"食品经营(凭有效许可证经营);零售:卷烟、雪茄烟(凭有效许可证经营);批发、零售:日用百货,五金。(依法须经批准的项目,经相关部门批准后方可开展经营活动)"
},
{
"qualifyUrl":"http://img30.360buyimg.com/vendersettle/jfs/t1/58554/26/7134/19343/5d4d3639E57b14138/bcce25e1eac11be8.jpg",
"qualifyType":"22",
"qualifyExpireForever":1,
"qualifyExpireStart":"2013-07-22 16:59:38",
"qualifyExpireEnd":"2033-07-22 16:59:50",
"qualifyOwner":"刘男",
"qualifyNumber":"420621198110303336"
},
{
"qualifyUrl":"",
"qualifyType":"33",
"qualifyExpireForever":1,
"qualifyExpireStart":"",
"qualifyExpireEnd":""
},
{
"qualifyUrl":"",
"qualifyType":"8",
"qualifyExpireForever":1,
"qualifyExpireStart":"",
"qualifyExpireEnd":""
},
{
"qualifyUrl":"",
"qualifyType":"9",
"qualifyExpireForever":1,
"qualifyExpireStart":"",
"qualifyExpireEnd":""
},
{
"qualifyUrl":"",
"qualifyType":"10",
"qualifyExpireForever":1,
"qualifyExpireStart":"",
"qualifyExpireEnd":""
},
{
"qualifyUrl":"",
"qualifyType":"29",
"qualifyExpireForever":1,
"qualifyExpireStart":"",
"qualifyExpireEnd":""
},
{
"qualifyUrl":"",
"qualifyType":"31",
"qualifyExpireForever":1,
"qualifyExpireStart":"",
"qualifyExpireEnd":""
}
]
`
var qualityList []*QualifyItem
err := utils.UnmarshalUseNumber([]byte(jsonStr), &qualityList)
if err != nil {
t.Fatal(err)
}
err = api.SaveQualify("11902261", SaveQualifyActionTypeSave, qualityList)
if err != nil {
t.Fatal(err)
}
}