From 6f5644325db41ac3b26c2b03c9188b2a4224aec8 Mon Sep 17 00:00:00 2001 From: suyl <770236076@qq.com> Date: Mon, 2 Aug 2021 11:13:10 +0800 Subject: [PATCH] aa --- platformapi/alipayapi/alipayapi.go | 11 +++-- platformapi/alipayapi/alipayapi_test.go | 4 +- platformapi/alipayapi/member.go | 2 +- platformapi/alipayapi/pay.go | 57 ++++++++++++++++++++++ platformapi/alipayapi/pay_test.go | 47 ++++++++++++++++++ platformapi/alipayapi/utils.go | 6 +-- platformapi/autonavi/autonavi_page_test.go | 4 +- platformapi/jdapi/finance.go | 14 ++++++ platformapi/jdapi/finance_test.go | 8 +++ platformapi/jdapi/jdapi_test.go | 2 +- platformapi/jdapi/order.go | 11 +++-- platformapi/mtwmapi/order_test.go | 2 +- 12 files changed, 151 insertions(+), 17 deletions(-) create mode 100644 platformapi/alipayapi/pay.go create mode 100644 platformapi/alipayapi/pay_test.go diff --git a/platformapi/alipayapi/alipayapi.go b/platformapi/alipayapi/alipayapi.go index 381b5d98..ef6170f7 100644 --- a/platformapi/alipayapi/alipayapi.go +++ b/platformapi/alipayapi/alipayapi.go @@ -110,7 +110,7 @@ func method2ResponseKey(method string) (responseKey string) { return responseKey } -func (a *API) AccessAPI(method string, params, bizContent map[string]interface{}) (retVal map[string]interface{}, err error) { +func (a *API) AccessAPI(method string, params, bizContent map[string]interface{}, isPost bool) (retVal map[string]interface{}, err error) { params = utils.MergeMaps(map[string]interface{}{ "app_id": a.GetAppID(), "method": method, @@ -126,11 +126,16 @@ func (a *API) AccessAPI(method string, params, bizContent map[string]interface{} err = platformapi.AccessPlatformAPIWithRetry(a.client, func() *http.Request { + var request *http.Request params["timestamp"] = utils.GetCurTimeStr() params[signKey] = a.signParams(params) fullURL := utils.GenerateGetURL(prodURL, "", params) - request, _ := http.NewRequest(http.MethodGet, fullURL, nil) - // request, _ := http.NewRequest(http.MethodPost, prodURL, bytes.NewReader(utils.MustMarshal(params))) + if isPost { + request, _ = http.NewRequest(http.MethodPost, prodURL, strings.NewReader(utils.Map2URLValues(params).Encode())) + } else { + request, _ = http.NewRequest(http.MethodGet, fullURL, nil) + + } return request }, a.config, diff --git a/platformapi/alipayapi/alipayapi_test.go b/platformapi/alipayapi/alipayapi_test.go index cddf41ee..6df5aca1 100644 --- a/platformapi/alipayapi/alipayapi_test.go +++ b/platformapi/alipayapi/alipayapi_test.go @@ -16,5 +16,7 @@ func init() { sugarLogger = logger.Sugar() baseapi.Init(sugarLogger) - api = New("2019110769024042", []byte(`MIIEpAIBAAKCAQEAjI46NiIj+Z19+ll4FFR+xss2N69jD5b31LtZVONM8CqNKCe7eBYx6y2pfslgg8R9Xj67PEmc/30euoG7bW23ow6QCj2fS0K2AZBA+TuEbtDpSFr0CUqS+tc/4nEurSyLOOt53ijNFPfVTT56Kl2h0mXLBDA5nvEKlzZTNimJcM/r4yyz4N72zXqfjT7cVTE/3cx6f4fkD3EsYdrxzIAruAYEywqraexLI1oIotGqufBemUhHdcOJquJJtxRLfYC000nEovHFtq1RhtakKRz8j80Edp0X+Dk1vA6JY1sVXnIFh/9QFyT70uFc77GPgwh7OT/qWvWnkBIbY+TGO7+dVQIDAQABAoIBAHQ0do4g5ctO2UOsyqlMPlBO2/Fn8KeH8jgP+MhE8GwzUebcCpM7DmRYqSRoi4IFZn0Psi8i0UktgcVC0tmi90s5E/9TeSp46g8a24zzFwejcutePxqbbC803N1zI9sK08PocyYoZ32pdNFbEReLt+lCPXmmAU2WDWJ9CIjkCHyaO+eadwqckc8VDGuBZU44pKrDDjlYfaWJk3bi7DJ2YqIGL+i0rm+1vVuK7qFTX9fHeeedperVwuBjjA5SPC6xn8I0Uq55fUQ36KQok53VIOzk5HrtiFw9GRBmULthY4/WT7mh44uG93hb+dzFvFNaK1tqgpPwqQTcGuYCNPTkmLUCgYEA4klP52ho3A4+VWXznjblzL2T/uzQPTTbeLUtLoLfKNGg+JiCTc8rJsVFalTyRXPEK8UHveM3/rR0aCc10mh07XHFG6XD7Md20jtTdHoag4HF+aubW2jY6SmbUXlWDxe7FcxRvaP8R2XxacFyIOT41ehphsS1tghU/ipbEDf01N8CgYEAnwMMIfp0ZGNm0IgYVHHKVmqfTC/ZW6epHGyfr/6mQ8hiU5arp2rHWtGUdF3EQFEJu69n8tUYK8hAoCOoPXrnEzMQdLhi389u+2dh8bKuliFzpJy0Ug0z9y4AIzdvCcuKoBMPGV4Db6adXFEHRgR1NIdsQegrtSjvuzgbGIZiwEsCgYEAxX805QRkmMM5tjEgOlMxp8tCUvl/Ghx6/NQsFe8VNDwZ4T7CY4TP5avBVPfE58cNTSJPCnU41u3Kt2iZegW/H8nvPZ0k7hB87SnoQb2cTHDESI91LYfJ4V5199sNuGh+2ZyVLw3jzrDzzdiPcpRFdfS9vWkMK08EVzzCc9pSrkMCgYBkO4iHVpfNu/bQVil3+W6BAJ6/aJ4Lr2jjOPmD9/IYYhTQ+fXkB2P4tIluvLh7jlmjTFMq9/ZPiuBp0XA4qONF7/dci+oPiHM92BIeR/LTQezig8EKw7XRBtchW80LkJkmhD0NUXy7AXzJ922tThwPa5nrBY2fmVlcW2aBFBzldwKBgQCl7y3eMG77BwD0nHxPHopWL6jsowNwxwMyN9eg40yemhfYol8+AhfouRuzaMCzROY9p5nY1N/jmPRa1dM7lXvZuij0ugwIebQXFhEjRtxtENbY5nRU4wlS7Y69oLSqFrQmW/MZbiCuIa6yXirSbEPIUojhHBI17yqq5yRD1vEHGQ==`)) + api = New("2021002159677003", []byte(` +MIIEpAIBAAKCAQEApAsn4U1ivnXsBoR52uKjq5E51i708Q2NYo+0vf3wsL9HjQSDP2iXolHtvXPwWltkDymh5+SeH+RSJph2DJ7rvmeYFiAEI3FTSaL/QRBtQS4wJvpPRXQiqH7GeTV0ApwfEaKaBbVfAA0iNtT/zdxZkELYmIEfv14vvVhiUV7mXkw/zb94HR/QfXazF7py6ePg8Xn/F/Hjurn+f9pY1ns4LzPZXKH07x8Q42eFJMUIxupofGJWf9pZ8jFDxvliDhmk4W28GHenfcUa3d8+4YgYqMBfel94UySitrnBYuQpH+DXw4AejND5uSDObKh1EQTG5RbkwnmOerjsOpJVf9VnzQIDAQABAoIBAQCR5NINELQXS+0kRsHRJ+wEdF6J3K0/jZwG4mQO7UAZEaVjB3Zq+GyTkmXsLqa+1bUBvzcddDgliPx/Eu06gESNzLh4RPUpSGqYfPyjMybX52ov4EKMNKN2U3nU5vNMNuly17hAB3R8KTIargjrX2PQZ4MW7w/7NJskvOyEDfC4P453jYENEIYAiARUC+muK4zriNF2+OCYb2S/WIz3SEBIf+966/QlDJu/GYscE+w2ZKVlA34oZGlWMzeskukKm69k63jw8oSyQRQrEZlGl6Z1LBLNSfphfyt56aS8COezUmxbjc18P2NLHOsTBJxIZlB4X9dkDHeEUndrofNMWJZBAoGBAN4JaulE/Tv47+YtjCjpBqTagl6wTl5UBXYvotQHFbGvDxao/3u/t90h2cUpsEu6eySPCKKcUGhYv9hElIQOyoUpzX/Fqhgf3idNrttTrfnE1qAxsAIlMY9n5BKlWLSTikJ9lGKsJlkxowqZxuuUTkEsNKUVFdP9ceFMdFG5c4CZAoGBAL0i0qUOpLJlqtaqP3IqKZUzjW3cbtN/EqRXOJSPoo93S//+nGPVwZ+7zZoUDNcTMdr94yUgmsaNxC1YD18ekbDrKxAXwenk5Bp8Vmxa6HF1dRMbMm/Cr89bWyye0+Z6rCkuyoiYRYEqzrhOz5XH3Bs+unT/kSmiHmqko7vN2X1VAoGBALucmYmhkZgrMAn+Un/+5m5FdAMuVgm+VR8YAS3HDr2kfctX4QhfZqyi/a9rGlvipkqt0U4VZpvE4dWLnTI4jUcXm1xrWN4pjz0GlskcW9TATdnuIhqt8sKJtl1K+TkbsaedFNSLQZv8JRe/+CT2m2jWQWV7+4W0kZUdVOv5F2+BAoGABL6W4iUX5JHAU1o59Tcxi9ibN6JL9Wo+oXi+pptjzI2FjopoieiWztb7NV5DZDHLEl9ED25d85Ui0rBe0lgF95Yuoly2NJPVVQTBdj5hjlcP9Ma94SfVGTKFev0Q+7sgDnhqBDstoyvbu6vecTduQhC0xLKUhaLXeH1gzhk/13ECgYBbmU0pp7HIHm5hf4/oJoXXW2kMAfYWGQnGW9pkvP0nt1fvGS+ju6Z8vbw/51mmfNWM66kag5Z3O6U8UKZX6RT38xynmleH1w5VicwaRazL+ar+I6YAj8hZkoByseS23kYZCv6gbpUR5bMhUAE3Y6R8G27mXM9IEGm8Y1flBqaB0g== +`)) } diff --git a/platformapi/alipayapi/member.go b/platformapi/alipayapi/member.go index 22225db3..71cdd4bf 100644 --- a/platformapi/alipayapi/member.go +++ b/platformapi/alipayapi/member.go @@ -21,7 +21,7 @@ func (a *API) UserInfoShare(accessToken string) (userInfo *UserInfo, err error) params := map[string]interface{}{ "auth_token": accessToken, } - retVal, err := a.AccessAPI("alipay.user.info.share", params, nil) + retVal, err := a.AccessAPI("alipay.user.info.share", params, nil, false) if err == nil { err = utils.Map2StructByJson(retVal, &userInfo, false) } diff --git a/platformapi/alipayapi/pay.go b/platformapi/alipayapi/pay.go new file mode 100644 index 00000000..66acd989 --- /dev/null +++ b/platformapi/alipayapi/pay.go @@ -0,0 +1,57 @@ +package alipayapi + +import "git.rosy.net.cn/baseapi/utils" + +type CreatePayParam struct { + OutTradeNo string `json:"out_trade_no"` //商户订单号。 由商家自定义,64个字符以内,仅支持字母、数字、下划线且需保证在商户端不重复。 + TotalAmount float64 `json:"total_amount"` // 订单总金额。 单位为元,精确到小数点后两位,取值范围:[0.01,100000000] 。 + Subject string `json:"subject"` //订单标题。 注意:不可使用特殊字符,如 /,=,& 等。 + StoreID string `json:"store_id"` //商户门店编号。指商户创建门店时输入的门店编号。 + BuyerID string `json:"buyer_id"` //买家支付宝用户ID。 2088开头的16位纯数字,小程序场景下获取用户ID请参考:用户授权; 其它场景下获取用户ID请参考:网页授权获取用户信息; 注:交易的买家与卖家不能相同。 +} + +func (a *API) CreatePay(createPayParam *CreatePayParam) (retVal map[string]interface{}, err error) { + retVal, err = a.AccessAPI("alipay.trade.create", map[string]interface{}{ + "notify_url": "http://print.jxc4.com/callback/msg", + "app_auth_token": "202107BB5163b293ce9e4758bd579adcfa8deX10", + }, utils.Struct2FlatMap(createPayParam), true) + return retVal, err +} + +type CreatePayParam2 struct { + OutTradeNo string `json:"out_trade_no"` //商户订单号。 由商家自定义,64个字符以内,仅支持字母、数字、下划线且需保证在商户端不重复。 + TotalAmount float64 `json:"total_amount"` // 订单总金额。 单位为元,精确到小数点后两位,取值范围:[0.01,100000000] 。 + Subject string `json:"subject"` //订单标题。 注意:不可使用特殊字符,如 /,=,& 等。 + StoreID string `json:"store_id"` //商户门店编号。指商户创建门店时输入的门店编号。 + //BuyerID string `json:"buyer_id"` //买家支付宝用户ID。 2088开头的16位纯数字,小程序场景下获取用户ID请参考:用户授权; 其它场景下获取用户ID请参考:网页授权获取用户信息; 注:交易的买家与卖家不能相同。 + QuitURL string `json:"quit_url,omitempty"` //用户付款中途退出返回商户网站的地址 + ProductCode string `json:"product_code"` //商家和支付宝签约的产品码。 枚举值(点击查看签约情况): QUICK_WAP_WAY:无线快捷支付产品。 +} + +type ExtendParams struct { + SysServiceProviderID string `json:"sys_service_provider_id"` //系统商编号 该参数作为系统商返佣数据提取的依据,请填写系统商签约协议的PID +} + +func (a *API) CreatePay2(createPayParam *CreatePayParam2) (retVal map[string]interface{}, err error) { + retVal, err = a.AccessAPI("alipay.trade.wap.pay", map[string]interface{}{ + "notify_url": "http://print.jxc4.com/callback/msg", + "app_auth_token": "202107BB5163b293ce9e4758bd579adcfa8deX10", + }, utils.Struct2FlatMap(createPayParam), false) + return retVal, err +} + +type CreatePayParam3 struct { + OutTradeNo string `json:"out_trade_no"` //商户订单号。 由商家自定义,64个字符以内,仅支持字母、数字、下划线且需保证在商户端不重复。 + TotalAmount float64 `json:"total_amount"` //订单总金额。 单位为元,精确到小数点后两位,取值范围:[0.01,100000000] 。 + //Subject string `json:"subject"` //订单标题。 注意:不可使用特殊字符,如 /,=,& 等。 + StoreID string `json:"store_id"` //商户门店编号。指商户创建门店时输入的门店编号。 + //BuyerID string `json:"buyer_id"` //买家支付宝用户ID。 2088开头的16位纯数字,小程序场景下获取用户ID请参考:用户授权; 其它场景下获取用户ID请参考:网页授权获取用户信息; 注:交易的买家与卖家不能相同。 +} + +func (a *API) CreatePay3(createPayParam *CreatePayParam3) (retVal map[string]interface{}, err error) { + retVal, err = a.AccessAPI("alipay.trade.wap.pay", map[string]interface{}{ + "notify_url": "http://print.jxc4.com/callback/msg", + "app_auth_token": "202107BB74ec17e0fa8c44bb85fff19a10464X98", + }, utils.Struct2FlatMap(createPayParam), false) + return retVal, err +} diff --git a/platformapi/alipayapi/pay_test.go b/platformapi/alipayapi/pay_test.go new file mode 100644 index 00000000..67da3592 --- /dev/null +++ b/platformapi/alipayapi/pay_test.go @@ -0,0 +1,47 @@ +package alipayapi + +import ( + "git.rosy.net.cn/baseapi/utils" + "testing" +) + +func TestCreatePay(t *testing.T) { + result, err := api.CreatePay(&CreatePayParam{ + OutTradeNo: utils.GetUUID(), + TotalAmount: 0.01, + Subject: "测试订单", + StoreID: "100000", + BuyerID: "2088912877320980", + }) + if err != nil { + t.Fatal(err) + } + t.Log(utils.Format4Output(result, false)) +} + +func TestCreatePay2(t *testing.T) { + result, err := api.CreatePay2(&CreatePayParam2{ + OutTradeNo: "21175111420002544", + TotalAmount: 0.01, + Subject: "xxx店", + StoreID: "100000", + QuitURL: "http://www.jxc4.com", + ProductCode: "QUICK_WAP_WAY", + }) + if err != nil { + t.Fatal(err) + } + t.Log(utils.Format4Output(result, false)) +} + +func TestCreatePay3(t *testing.T) { + result, err := api.CreatePay3(&CreatePayParam3{ + TotalAmount: 0.01, + StoreID: "2021072600077000000025212127", + OutTradeNo: utils.GetUUID(), + }) + if err != nil { + t.Fatal(err) + } + t.Log(utils.Format4Output(result, false)) +} diff --git a/platformapi/alipayapi/utils.go b/platformapi/alipayapi/utils.go index 8f0f7a5a..50eb0c23 100644 --- a/platformapi/alipayapi/utils.go +++ b/platformapi/alipayapi/utils.go @@ -20,14 +20,14 @@ func (a *API) UserInfoAuth(scopes []string, state string) (retVal map[string]int retVal, err = a.AccessAPI("alipay.user.info.auth", nil, map[string]interface{}{ "scopes": scopes, "state": state, - }) + }, false) return retVal, err } func (a *API) AuthTokenAppQuery(appAuthToken string) (retVal map[string]interface{}, err error) { retVal, err = a.AccessAPI("alipay.open.auth.token.app.query", nil, map[string]interface{}{ "app_auth_token": appAuthToken, - }) + }, false) return retVal, err } @@ -41,7 +41,7 @@ func (a *API) SystemAuthToken(grantType, code, refreshToken string) (tokenInfo * if refreshToken != "" { params["refresh_token"] = refreshToken } - retVal, err := a.AccessAPI("alipay.system.oauth.token", params, nil) + retVal, err := a.AccessAPI("alipay.system.oauth.token", params, nil, false) if err == nil { err = utils.Map2StructByJson(retVal, &tokenInfo, false) } diff --git a/platformapi/autonavi/autonavi_page_test.go b/platformapi/autonavi/autonavi_page_test.go index 96060363..18241c01 100644 --- a/platformapi/autonavi/autonavi_page_test.go +++ b/platformapi/autonavi/autonavi_page_test.go @@ -7,7 +7,7 @@ import ( ) func TestGetCoordinateFromAddressByPage(t *testing.T) { - lng, lat, err := autonaviAPI.GetCoordinateFromAddressByPage("四川成都市武侯区望江路街道南三环五段188密苏里小城62栋3单元501", 510100) + lng, lat, err := autonaviAPI.GetCoordinateFromAddressByPage("西航港街道珠江路600号2栋108号", 0) if err != nil { t.Fatal(err) } @@ -16,7 +16,7 @@ func TestGetCoordinateFromAddressByPage(t *testing.T) { } func TestGetCoordinateFromAddressByPageAll(t *testing.T) { - result, err := autonaviAPI.GetCoordinateFromAddressByPageAll("重庆市渝北区龙山大道111号“龙湖紫都城”", 500100) + result, err := autonaviAPI.GetCoordinateFromAddressByPageAll("西航港街道珠江路600号2栋108号", 0) if err != nil { t.Fatal(err) } diff --git a/platformapi/jdapi/finance.go b/platformapi/jdapi/finance.go index 58adece2..b7ecc877 100644 --- a/platformapi/jdapi/finance.go +++ b/platformapi/jdapi/finance.go @@ -48,3 +48,17 @@ func (a *API) CheckAfsBill(orderId string) (checkAfsBillResult []*CheckAfsBillRe } return checkAfsBillResult, nil } + +// 分页查询结算单 +// http://opendj.jd.com/staticnew/widgets/resources.html?groupid=182&apiid=3c6214051ba04226afc021d7b86f83f9 +func (a *API) GetSettleOrderList(orderId string) (checkAfsBillResult []*CheckAfsBillResult, err error) { + jdParams := map[string]interface{}{ + "finishTimeStart": "20210722", + "finishTimeEnd": "20210723", + } + result, err := a.AccessAPINoPage("settle/getSettleOrderList", jdParams, nil, nil, genNoPageResultParser("code", "msg", "result", "200")) + if err == nil { + utils.Map2StructByJson(result, &checkAfsBillResult, false) + } + return checkAfsBillResult, nil +} diff --git a/platformapi/jdapi/finance_test.go b/platformapi/jdapi/finance_test.go index 9037c2f2..5ce3d651 100644 --- a/platformapi/jdapi/finance_test.go +++ b/platformapi/jdapi/finance_test.go @@ -21,3 +21,11 @@ func TestCheckAfsBill(t *testing.T) { } t.Log(utils.Format4Output(bussResult, false)) } + +func TestGetSettleOrderList(t *testing.T) { + bussResult, bussErr := api.GetSettleOrderList("2114753262000162") + if bussErr != nil { + t.Error(bussErr.Error()) + } + t.Log(utils.Format4Output(bussResult, false)) +} diff --git a/platformapi/jdapi/jdapi_test.go b/platformapi/jdapi/jdapi_test.go index 4a945ef9..1620c386 100644 --- a/platformapi/jdapi/jdapi_test.go +++ b/platformapi/jdapi/jdapi_test.go @@ -23,7 +23,7 @@ func init() { // sandbox // api = New("594ab45a-9a73-4a43-82b0-a64cbd55d883", "06692746f7224695ad4788ce340bc854", "d6b42a35a7414a5490d811654d745c84") // prod - api = New("1c14b86e-54f0-4048-9062-c6aed5438578", "1dba76d40cac446ca500c0391a0b6c9d", "a88d031a1e7b462cb1579f12e97fe7f4") + api = New("b08beee9-6bfe-4efd-b058-3ec2fa16030f", "5d86da1b55ee4c9281007ca741de494d", "287d6a8172a645468256e18a0b72d719") // 天天果园 //api = New("c45e6510-00ba-4be2-977e-bcb9c9792cc7", "5d5577a2506f41b8b4ec520ba83490f5", "0b01b9eeb15b41dab1c3d05d95c17a26") diff --git a/platformapi/jdapi/order.go b/platformapi/jdapi/order.go index e17c16ad..74092961 100644 --- a/platformapi/jdapi/order.go +++ b/platformapi/jdapi/order.go @@ -388,11 +388,12 @@ func (a *API) OrderQuery(jdParams map[string]interface{}) (retVal []interface{}, for i := 0; i < QueryOrderRetryCount; i++ { retVal, totalCount, err = a.AccessAPIHavePage("order/es/query", jdParams, nil, nil, nil) if err != nil { - if err2, ok := err.(*utils.ErrorWithCode); ok { - if err2.IntCode() == -4 { - continue - } - } + //if err2, ok := err.(*utils.ErrorWithCode); ok { + // if err2.IntCode() == -4 { + // continue + // } + //} + return retVal, totalCount, err } break } diff --git a/platformapi/mtwmapi/order_test.go b/platformapi/mtwmapi/order_test.go index b7879527..e3f1898f 100644 --- a/platformapi/mtwmapi/order_test.go +++ b/platformapi/mtwmapi/order_test.go @@ -17,7 +17,7 @@ func TestOrderViewStatus(t *testing.T) { } func TestOrderGetOrderDetail(t *testing.T) { - result, err := api.OrderGetOrderDetail(104784113865527330, false) + result, err := api.OrderGetOrderDetail(78212490999299098, false) if err != nil { t.Fatal(err) }