From 7c849e50f595967f5af39b16f10f78cc11535606 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Mon, 9 Mar 2020 14:56:17 +0800 Subject: [PATCH] =?UTF-8?q?=E7=89=A9=E6=96=99=E4=B8=8B=E5=8D=95=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=EF=BC=8C=E5=BE=AE=E4=BF=A1=E5=8F=91=E7=A5=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- platformapi/jdeclpapi/jdeclpapi.go | 78 +++++++++++++++--------------- platformapi/weixinapi/card.go | 5 ++ platformapi/weixinapi/card_test.go | 1 + platformapi/weixinapi/cgibin.go | 22 +++++++++ 4 files changed, 68 insertions(+), 38 deletions(-) create mode 100644 platformapi/weixinapi/card.go create mode 100644 platformapi/weixinapi/card_test.go diff --git a/platformapi/jdeclpapi/jdeclpapi.go b/platformapi/jdeclpapi/jdeclpapi.go index ac058ca2..3e1fd159 100644 --- a/platformapi/jdeclpapi/jdeclpapi.go +++ b/platformapi/jdeclpapi/jdeclpapi.go @@ -26,16 +26,16 @@ const ( // CustomerCode2 = "028K588716" - state = "1212" - orderType10 = "10" //订单号类型(10:代表ECLP订单号, 20:代表商家订单号) - orderType20 = "20" + state = "1212" + orderType10 = "10" //订单号类型(10:代表ECLP订单号, 20:代表商家订单号) + orderType20 = "20" + SalePlatformSource = "6" ) type API struct { accessToken string appKey string appSecret string - redirectUri string client *http.Client config *platformapi.APIConfig } @@ -131,7 +131,7 @@ type SearchShopStockResult struct { PageNumber string `json:"pageNumber"` } -func New(accessToken, appKey, appSecret, redirectUri string, config ...*platformapi.APIConfig) *API { +func New(accessToken, appKey, appSecret string, config ...*platformapi.APIConfig) *API { curConfig := platformapi.DefAPIConfig if len(config) > 0 { curConfig = *config[0] @@ -140,7 +140,6 @@ func New(accessToken, appKey, appSecret, redirectUri string, config ...*platform accessToken: accessToken, appKey: appKey, appSecret: appSecret, - redirectUri: redirectUri, client: &http.Client{Timeout: curConfig.ClientTimeout}, config: &curConfig, } @@ -177,10 +176,12 @@ func (a *API) AccessAPI(action string, url string, bizParams map[string]interfac params["access_token"] = a.accessToken params["app_key"] = a.appKey params["timestamp"] = utils.Time2Str(time.Now()) + params["method"] = action + params["v"] = "2.0" params = utils.MergeMaps(params, bizParams) signStr := a.signParam(params) params["sign"] = signStr - fullURL = utils.GenerateGetURL(url, "method="+action, nil) + fullURL = utils.GenerateGetURL(url, "", nil) } err = platformapi.AccessPlatformAPIWithRetry(a.client, func() *http.Request { @@ -210,22 +211,22 @@ func (a *API) AccessAPI(action string, url string, bizParams map[string]interfac //获取销售平台信息 //https://open.jd.com/home/home#/doc/api?apiCateId=138&apiId=947&apiName=jingdong.eclp.master.querySpSource -func (a *API) QuerySpSource() (querySpSourceResult *QuerySpSourceResult, err error) { +func (a *API) QuerySpSource() (querySpSourceResult []*QuerySpSourceResult, err error) { result, err := a.AccessAPI("jingdong.eclp.master.querySpSource", prodURL, nil) if err == nil { - utils.Map2StructByJson(result, &querySpSourceResult, false) + utils.Map2StructByJson(result["jingdong_eclp_master_querySpSource_responce"].(map[string]interface{})["queryspsource_result"], &querySpSourceResult, false) } return querySpSourceResult, err } //销售出库单下发 //https://open.jd.com/home/home#/doc/api?apiCateId=138&apiId=928&apiName=jingdong.eclp.order.addOrder -func (a *API) AddOrder(addOrderParam *AddOrderParam) (addOrderResult *AddOrderResult, err error) { +func (a *API) AddOrder(addOrderParam *AddOrderParam) (eclpSoNo string, err error) { result, err := a.AccessAPI("jingdong.eclp.order.addOrder", prodURL, utils.Struct2FlatMap(addOrderParam)) if err == nil { - utils.Map2StructByJson(result, &addOrderResult, false) + return result["eclpSoNo"].(string), err } - return addOrderResult, err + return "", err } //销售出库单取消 @@ -278,32 +279,33 @@ func (a *API) SearchShopStock(searchShopStockParam *SearchShopStockParam) (searc //获取tokenCode //https://oauth.jd.com/oauth/authorize?response_type=code&client_id=YOUR_APP_KEY&redirect_uri=YOUR_REGISTERED_REDIRECT_URI&state=YOUR_CUSTOM_CODE -func (a *API) GetTokenInfo() (code string, err error) { - result, err := a.AccessAPI("authorize", prodURL2, map[string]interface{}{ - "response_type": "code", - "client_id": a.appKey, - "redirect_uri": a.redirectUri, - "state": state, - }) - if err == nil { - code = result["code"].(string) - } - return code, err -} +//https://oauth.jd.com/oauth/authorize?response_type=code&client_id=YOUR_APP_KEY&redirect_uri=urn:ietf:wg:oauth:2.0:oob&state=1212 +// func (a *API) GetTokenInfo() (code string, err error) { +// result, err := a.AccessAPI("authorize", prodURL2, map[string]interface{}{ +// "response_type": "code", +// "client_id": a.appKey, +// "redirect_uri": a.redirectUri, +// "state": state, +// }) +// if err == nil { +// code = result["code"].(string) +// } +// return code, err +// } //获取token //https://oauth.jd.com/oauth/token?grant_type=authorization_code&client_id=YOUR_APP_KEY&redirect_uri=YOUR_REGISTERED_REDIRECT_URI&code=GET_CODE&state=YOUR_CUSTOM_CODE&client_secret= YOUR_APP_SECRET -func (a *API) GetToken() (token string, err error) { - code, err := a.GetTokenInfo() - result, err := a.AccessAPI("token", prodURL2, map[string]interface{}{ - "grant_type": "authorization_code", - "client_id": a.appKey, - "redirect_uri": a.redirectUri, - "code": code, - "state": state, - }) - if err == nil { - token = result["token"].(string) - } - return token, err -} +// func (a *API) GetToken() (token string, err error) { +// code, err := a.GetTokenInfo() +// result, err := a.AccessAPI("token", prodURL2, map[string]interface{}{ +// "grant_type": "authorization_code", +// "client_id": a.appKey, +// "redirect_uri": a.redirectUri, +// "code": code, +// "state": state, +// }) +// if err == nil { +// token = result["token"].(string) +// } +// return token, err +// } diff --git a/platformapi/weixinapi/card.go b/platformapi/weixinapi/card.go new file mode 100644 index 00000000..92bb256f --- /dev/null +++ b/platformapi/weixinapi/card.go @@ -0,0 +1,5 @@ +package weixinapi + +func GetAuthUrl() { + +} diff --git a/platformapi/weixinapi/card_test.go b/platformapi/weixinapi/card_test.go new file mode 100644 index 00000000..82c49f31 --- /dev/null +++ b/platformapi/weixinapi/card_test.go @@ -0,0 +1 @@ +package weixinapi diff --git a/platformapi/weixinapi/cgibin.go b/platformapi/weixinapi/cgibin.go index 1814a00b..dbc5a1a7 100644 --- a/platformapi/weixinapi/cgibin.go +++ b/platformapi/weixinapi/cgibin.go @@ -4,6 +4,9 @@ import "git.rosy.net.cn/baseapi/utils" const ( MaxRemarkByteCount = 30 + + ticketType = "wx_card" + authType = 0 //Int 是 授权类型,0:开票授权,1:填写字段开票授权,2:领票授权 ) type CBUserInfo struct { @@ -25,6 +28,13 @@ type CBUserInfo struct { QRSceneStr string `json:"qr_scene_str"` } +type CBTicketInfo struct { + Errcode int `json:"errcode"` + Errmsg string `json:"errmsg"` + Ticket string `json:"ticket"` + ExpiresIn int `json:"expires_in"` +} + func (a *API) CBSetToken(newToken string) bool { curToken := a.CBGetToken() if curToken != newToken { @@ -93,3 +103,15 @@ func (a *API) CBGetUserInfo(userOpenID string) (userInfo *CBUserInfo, err error) } return userInfo, err } + +//获取授权页ticket +func (a *API) CBGetTicketInfo() (ticketInfo *CBTicketInfo, err error) { + bodyJson := map[string]interface{}{ + "type": ticketType, + } + result, err := a.AccessAPI("cgi-bin/ticket/getticket", bodyJson, "") + if err == nil { + err = utils.Map2StructByJson(result, &ticketInfo, false) + } + return ticketInfo, err +}