forked from baidu/smartapp-openapi-go
-
Notifications
You must be signed in to change notification settings - Fork 0
/
addOrderInfo.go
149 lines (139 loc) · 8.93 KB
/
addOrderInfo.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
package openapi
import (
"encoding/json"
"fmt"
)
// AddOrderInfoRequest 请求结构体
type AddOrderInfoRequest struct {
AccessToken string // 接口调用凭证
OpenID string // 百度 App 已登录用户使用 openId 作为用户标识;未登录用户(无 openId 时)使用 swanId 作为用户标识
SwanID string // 百度 App 已登录用户使用 openId 作为用户标识;未登录用户(无 openId 时)使用 swanId 作为用户标识
SceneID string // 百度收银台分配的平台订单 ID,通知支付状态接口返回的 orderId
SceneType int64 // 支付场景类型,开发者请默认传 2
PmAppKey string // 调起百度收银台的支付服务 appKey
Data []AddOrderInfoRequestDataItem // 请求数据
}
type AddOrderInfoRequestDataItemEXTMainOrderProductsItemDetailPage struct {
Status string `json:"Status"` // 默认传 2
SwanSchema string `json:"SwanSchema"` // 商品详情页的跳转地址,用以小程序跳转 Scheme
}
type AddOrderInfoRequestDataItemEXTMainOrderProductsItemSkuAttrItem struct {
Name string `json:"Name"` // 规格名称,例如“颜色”或“尺寸”
Value string `json:"Value"` // 规格值
}
type AddOrderInfoRequestDataItemEXTMainOrderProductsItem struct {
Desc string `json:"Desc"` // 商品简述
DetailPage AddOrderInfoRequestDataItemEXTMainOrderProductsItemDetailPage `json:"DetailPage"` // 商品详情的跳转的跳转结构
ID string `json:"ID"` // 商品 ID ,开发者的唯一商品 ID
ImgList []string `json:"ImgList"` // 商品预览,值为预览图 URL 地址,最多 5 张
Name string `json:"Name"` // 商品名字
PayPrice int64 `json:"PayPrice"` // 实付价(单位:分),即100代表1元
Price int64 `json:"Price"` // 本商品原价(单位:分),即100代表1元
Quantity int64 `json:"Quantity"` // 本商品的交易数量
SkuAttr []AddOrderInfoRequestDataItemEXTMainOrderProductsItemSkuAttrItem `json:"SkuAttr"` // 商品规格,最多 400 个
}
type AddOrderInfoRequestDataItemEXTMainOrderPaymentPreferentialInfoItem struct {
Name string `json:"Name"` // 展示名称
Quantity int64 `json:"Quantity"` // 数量
Value int64 `json:"Value"` // 合计金额(单位:分),即100为1元
}
type AddOrderInfoRequestDataItemEXTMainOrderPaymentPaymentInfoItem struct {
Name string `json:"Name"` // 展示名称
Quantity int64 `json:"Quantity"` // 数量
Value int64 `json:"Value"` // 合计金额(单位:分),即100为1元
}
type AddOrderInfoRequestDataItemEXTMainOrderPayment struct {
Amount int64 `json:"Amount"` // 实付金额(单位:分),即100为1元
IsPayment bool `json:"IsPayment"` // 是否已付款
Method int64 `json:"Method"` // 付款方式,1(在线付),2(货到付款)
PaymentInfo []AddOrderInfoRequestDataItemEXTMainOrderPaymentPaymentInfoItem `json:"PaymentInfo"` // 其他付款信息
PreferentialInfo []AddOrderInfoRequestDataItemEXTMainOrderPaymentPreferentialInfoItem `json:"PreferentialInfo"` // 优惠券信息
Time int64 `json:"Time"` // 付款时间(单位:秒)
}
type AddOrderInfoRequestDataItemEXTMainOrderAppraise struct {
Status int64 `json:"Status"` // 0(不可评价状态或已评价状态)、2(待评价状态,允许跳转)
SwanSchema string `json:"SwanSchema"` // 评价页的跳转地址,用以小程序跳转 Scheme
}
type AddOrderInfoRequestDataItemEXTMainOrderOrderDetail struct {
Status int64 `json:"Status"` // 默认传 2
SwanSchema string `json:"SwanSchema"` // 订单详情页的跳转地址,用以小程序跳转 Scheme
}
type AddOrderInfoRequestDataItemEXTMainOrder struct {
Appraise AddOrderInfoRequestDataItemEXTMainOrderAppraise `json:"Appraise"` // 待评价状态订单的评价页结构,仅订单为可评价状态,且还未进行评价时提供该信息
OrderDetail AddOrderInfoRequestDataItemEXTMainOrderOrderDetail `json:"OrderDetail"` // 订单详情页的信息
Payment AddOrderInfoRequestDataItemEXTMainOrderPayment `json:"Payment"` // 支付信息
Products []AddOrderInfoRequestDataItemEXTMainOrderProductsItem `json:"Products"` // 数组,商品信息列表,若商品只有 1 个则数组长度为 1
}
type AddOrderInfoRequestDataItemEXT struct {
MainOrder AddOrderInfoRequestDataItemEXTMainOrder `json:"MainOrder"` // 主订单信息(购买商品订单)
}
type AddOrderInfoRequestDataItem struct {
BizAPPID string `json:"BizAPPID"` // 小程序 AppKey
CateID int64 `json:"CateID"` // 订单种类:1(实物)、2(虚拟物品)、5(快递服务类)、6(快递服务类无金额订单)、10(上门服务类)、11(上门服务类无金额订单)、15(酒店类)、20(票务类)、25(打车类)、26(打车类无金额订单)
Ctime int64 `json:"Ctime"` // 订单创建时间(单位:秒)
EXT AddOrderInfoRequestDataItemEXT `json:"EXT"` // 扩展信息
Mtime int64 `json:"Mtime"` // 订单最后被修改时间(单位:秒)
ResourceID string `json:"ResourceID"` // 开发者接入的唯一订单 ID
Status int64 `json:"Status"` // 订单状态,其值根据CateID不同有不同的定义。CateID = 1 实物订单、CateID = 2 虚拟物品订单、CateID = 5 快递服务类订单、CateID = 6 快递服务类无金额订单、CateID = 10 上门服务类订单、CateID = 11 上门服务类无金额订单、CateID = 15 酒店类订单、CateID = 20 出行票务类订单、CateID = 25 打车类订单、CateID = 26 打车类无金额订单
Title string `json:"Title"` // 订单标题,建议使用订单商品名称
}
// 响应结构体
type AddOrderInfoResponsedataItem struct {
BizAppID string `json:"biz_app_id"` // POST 请求参数中 BizAPPID
CateID string `json:"cate_id"` // POST 请求参数中 CateID
ResourceID string `json:"resource_id"` // POST 请求参数中 ResourceID
RowsAffected string `json:"rows_affected"` // 请求受影响行数(即请求是否成功, 0 为失败,非 0 为成功)
}
type AddOrderInfoResponse struct {
Data []AddOrderInfoResponsedataItem `json:"data"` // 响应对象
Errno int64 `json:"errno"` // 错误码
ErrMsg string `json:"msg"` // 错误信息
ErrorCode int64 `json:"error_code"` // openapi 错误码
ErrorMsg string `json:"error_msg"` // openapi 错误信息
}
// AddOrderInfo
func AddOrderInfo(params *AddOrderInfoRequest) ([]AddOrderInfoResponsedataItem, error) {
var (
err error
defaultRet []AddOrderInfoResponsedataItem
)
respData := &AddOrderInfoResponse{}
client := NewHTTPClient().
SetContentType(ContentTypeJSON).
SetConverterType(ConverterTypeJSON).
SetMethod("POST").
SetScheme(SCHEME).
SetHost(OPENAPIHOST).
SetPath("/rest/2.0/smartapp/ordercenter/app/add/main/info")
client.AddGetParam("access_token", params.AccessToken)
client.AddGetParam("open_id", params.OpenID)
client.AddGetParam("swan_id", params.SwanID)
client.AddGetParam("scene_id", params.SceneID)
client.AddGetParam("scene_type", fmt.Sprintf("%v", params.SceneType))
client.AddGetParam("pm_app_key", params.PmAppKey)
client.AddGetParam("sp_sdk_ver", SDKVERSION)
client.AddGetParam("sp_sdk_lang", SDKLANG)
postData := map[string]interface{}{
"Data": params.Data,
}
bts, err := json.Marshal(postData)
if err != nil {
return defaultRet, err
}
client.SetBody(bts)
err = client.Do()
if err != nil {
return defaultRet, err
}
err = client.Convert(respData)
if err != nil {
return defaultRet, err
}
if respData.ErrorCode != 0 {
return defaultRet, &OpenAPIError{respData.ErrorCode, respData.ErrorMsg, respData}
}
if respData.Errno != 0 {
return defaultRet, &APIError{respData.Errno, respData.ErrMsg, respData}
}
return respData.Data, nil
}