This commit is contained in:
suyl
2021-08-02 11:13:10 +08:00
parent e6ea1adef7
commit 6f5644325d
12 changed files with 151 additions and 17 deletions

View File

@@ -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,

View File

@@ -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==
`))
}

View File

@@ -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)
}

View File

@@ -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
}

View File

@@ -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))
}

View File

@@ -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)
}

View File

@@ -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)
}

View File

@@ -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
}

View File

@@ -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))
}

View File

@@ -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")

View File

@@ -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
}

View File

@@ -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)
}