// Copyright 2021 Tencent Inc. All rights reserved. // // 微信支付分停车服务 // // 微信支付分停车服务 扣费API // // API version: 1.2.1 // Code generated by WechatPay APIv3 Generator based on [OpenAPI Generator](https://openapi-generator.tech); DO NOT EDIT. package wexinpayscoreparking import ( "encoding/json" "fmt" "time" ) // CreateParkingRequest type CreateParkingRequest struct { // 微信支付分配的子商户号,服务商模式下必传 SubMchid *string `json:"sub_mchid,omitempty"` // 商户侧入场标识id,在同一个商户号下唯一 OutParkingNo *string `json:"out_parking_no"` // 车牌号,仅包括省份+车牌,不包括特殊字符。 PlateNumber *string `json:"plate_number"` // 车牌颜色 PlateColor *PlateColor `json:"plate_color"` // 接受入场状态变更回调通知的url,注意回调url只接受https NotifyUrl *string `json:"notify_url"` // 入场时间,遵循[rfc3339](https://datatracker.ietf.org/doc/html/rfc3339)标准格式,格式为yyyy-MM-DDTHH:mm:ss+TIMEZONE,yyyy-MM-DD表示年月日,T出现在字符串中,表示time元素的开头,HH:mm:ss表示时分秒,TIMEZONE表示时区(+08:00表示东八区时间,领先UTC 8小时,即北京时间)。例如:2015-05-20T13:29:35+08:00表示,北京时间2015年5月20日 13点29分35秒。 StartTime *time.Time `json:"start_time"` // 所在停车位车场的名称 ParkingName *string `json:"parking_name"` // 停车场的免费停车时长,单位为秒 FreeDuration *int64 `json:"free_duration"` } func (o CreateParkingRequest) MarshalJSON() ([]byte, error) { toSerialize := map[string]interface{}{} if o.SubMchid != nil { toSerialize["sub_mchid"] = o.SubMchid } if o.OutParkingNo == nil { return nil, fmt.Errorf("field `OutParkingNo` is required and must be specified in CreateParkingRequest") } toSerialize["out_parking_no"] = o.OutParkingNo if o.PlateNumber == nil { return nil, fmt.Errorf("field `PlateNumber` is required and must be specified in CreateParkingRequest") } toSerialize["plate_number"] = o.PlateNumber if o.PlateColor == nil { return nil, fmt.Errorf("field `PlateColor` is required and must be specified in CreateParkingRequest") } toSerialize["plate_color"] = o.PlateColor if o.NotifyUrl == nil { return nil, fmt.Errorf("field `NotifyUrl` is required and must be specified in CreateParkingRequest") } toSerialize["notify_url"] = o.NotifyUrl if o.StartTime == nil { return nil, fmt.Errorf("field `StartTime` is required and must be specified in CreateParkingRequest") } toSerialize["start_time"] = o.StartTime.Format(time.RFC3339) if o.ParkingName == nil { return nil, fmt.Errorf("field `ParkingName` is required and must be specified in CreateParkingRequest") } toSerialize["parking_name"] = o.ParkingName if o.FreeDuration == nil { return nil, fmt.Errorf("field `FreeDuration` is required and must be specified in CreateParkingRequest") } toSerialize["free_duration"] = o.FreeDuration return json.Marshal(toSerialize) } func (o CreateParkingRequest) String() string { var ret string if o.SubMchid == nil { ret += "SubMchid:, " } else { ret += fmt.Sprintf("SubMchid:%v, ", *o.SubMchid) } if o.OutParkingNo == nil { ret += "OutParkingNo:, " } else { ret += fmt.Sprintf("OutParkingNo:%v, ", *o.OutParkingNo) } if o.PlateNumber == nil { ret += "PlateNumber:, " } else { ret += fmt.Sprintf("PlateNumber:%v, ", *o.PlateNumber) } if o.PlateColor == nil { ret += "PlateColor:, " } else { ret += fmt.Sprintf("PlateColor:%v, ", *o.PlateColor) } if o.NotifyUrl == nil { ret += "NotifyUrl:, " } else { ret += fmt.Sprintf("NotifyUrl:%v, ", *o.NotifyUrl) } if o.StartTime == nil { ret += "StartTime:, " } else { ret += fmt.Sprintf("StartTime:%v, ", *o.StartTime) } if o.ParkingName == nil { ret += "ParkingName:, " } else { ret += fmt.Sprintf("ParkingName:%v, ", *o.ParkingName) } if o.FreeDuration == nil { ret += "FreeDuration:" } else { ret += fmt.Sprintf("FreeDuration:%v", *o.FreeDuration) } return fmt.Sprintf("CreateParkingRequest{%s}", ret) } func (o CreateParkingRequest) Clone() *CreateParkingRequest { ret := CreateParkingRequest{} if o.SubMchid != nil { ret.SubMchid = new(string) *ret.SubMchid = *o.SubMchid } if o.OutParkingNo != nil { ret.OutParkingNo = new(string) *ret.OutParkingNo = *o.OutParkingNo } if o.PlateNumber != nil { ret.PlateNumber = new(string) *ret.PlateNumber = *o.PlateNumber } if o.PlateColor != nil { ret.PlateColor = new(PlateColor) *ret.PlateColor = *o.PlateColor } if o.NotifyUrl != nil { ret.NotifyUrl = new(string) *ret.NotifyUrl = *o.NotifyUrl } if o.StartTime != nil { ret.StartTime = new(time.Time) *ret.StartTime = *o.StartTime } if o.ParkingName != nil { ret.ParkingName = new(string) *ret.ParkingName = *o.ParkingName } if o.FreeDuration != nil { ret.FreeDuration = new(int64) *ret.FreeDuration = *o.FreeDuration } return &ret } // CreateTransactionRequest type CreateTransactionRequest struct { // appid是商户在微信申请公众号或移动应用成功后分配的帐号ID,登录平台为mp.weixin.qq.com或open.weixin.qq.com Appid *string `json:"appid"` // 子公众账号id,服务商模式下选传,用于扣费信息的商户信息展示, SubAppid *string `json:"sub_appid,omitempty"` // 微信支付分配的子商户号,服务商模式下必传 SubMchid *string `json:"sub_mchid,omitempty"` // 商户自定义字段,用于交易账单中对扣费服务的描述。 Description *string `json:"description"` // 附加数据,在查询API和支付通知中原样返回,可作为自定义参数使用 Attach *string `json:"attach,omitempty"` // 商户系统内部订单号,只能是数字、大小写字母_-*且在同一个商户号下唯一 OutTradeNo *string `json:"out_trade_no"` // 交易场景值,目前支持 :PARKING:车场停车场景 TradeScene *string `json:"trade_scene"` // 代金券或立减优惠功能的参数,说明详见[代金券或立减优惠](https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter5_1_2.shtml) GoodsTag *string `json:"goods_tag,omitempty"` // 接受扣款结果异步回调通知的url,注意回调url只接受https NotifyUrl *string `json:"notify_url"` // Y:是,需要分账 N:否,不分账 字母要求大写,不传默认不分账,分账详细说明见[直连分账API](https://pay.weixin.qq.com/wiki/doc/api/allocation.php?chapter=26_1)、[服务商分账API文档](https://pay.weixin.qq.com/wiki/doc/api/allocation_sl.php?chapter=24_1&index=1) ProfitSharing *string `json:"profit_sharing,omitempty"` // 订单金额信息 Amount *OrderAmount `json:"amount"` // 当交易场景为PARKING时,需要在该字段添加停车场景信息 ParkingInfo *ParkingTradeScene `json:"parking_info,omitempty"` } func (o CreateTransactionRequest) MarshalJSON() ([]byte, error) { toSerialize := map[string]interface{}{} if o.Appid == nil { return nil, fmt.Errorf("field `Appid` is required and must be specified in CreateTransactionRequest") } toSerialize["appid"] = o.Appid if o.SubAppid != nil { toSerialize["sub_appid"] = o.SubAppid } if o.SubMchid != nil { toSerialize["sub_mchid"] = o.SubMchid } if o.Description == nil { return nil, fmt.Errorf("field `Description` is required and must be specified in CreateTransactionRequest") } toSerialize["description"] = o.Description if o.Attach != nil { toSerialize["attach"] = o.Attach } if o.OutTradeNo == nil { return nil, fmt.Errorf("field `OutTradeNo` is required and must be specified in CreateTransactionRequest") } toSerialize["out_trade_no"] = o.OutTradeNo if o.TradeScene == nil { return nil, fmt.Errorf("field `TradeScene` is required and must be specified in CreateTransactionRequest") } toSerialize["trade_scene"] = o.TradeScene if o.GoodsTag != nil { toSerialize["goods_tag"] = o.GoodsTag } if o.NotifyUrl == nil { return nil, fmt.Errorf("field `NotifyUrl` is required and must be specified in CreateTransactionRequest") } toSerialize["notify_url"] = o.NotifyUrl if o.ProfitSharing != nil { toSerialize["profit_sharing"] = o.ProfitSharing } if o.Amount == nil { return nil, fmt.Errorf("field `Amount` is required and must be specified in CreateTransactionRequest") } toSerialize["amount"] = o.Amount if o.ParkingInfo != nil { toSerialize["parking_info"] = o.ParkingInfo } return json.Marshal(toSerialize) } func (o CreateTransactionRequest) String() string { var ret string if o.Appid == nil { ret += "Appid:, " } else { ret += fmt.Sprintf("Appid:%v, ", *o.Appid) } if o.SubAppid == nil { ret += "SubAppid:, " } else { ret += fmt.Sprintf("SubAppid:%v, ", *o.SubAppid) } if o.SubMchid == nil { ret += "SubMchid:, " } else { ret += fmt.Sprintf("SubMchid:%v, ", *o.SubMchid) } if o.Description == nil { ret += "Description:, " } else { ret += fmt.Sprintf("Description:%v, ", *o.Description) } if o.Attach == nil { ret += "Attach:, " } else { ret += fmt.Sprintf("Attach:%v, ", *o.Attach) } if o.OutTradeNo == nil { ret += "OutTradeNo:, " } else { ret += fmt.Sprintf("OutTradeNo:%v, ", *o.OutTradeNo) } if o.TradeScene == nil { ret += "TradeScene:, " } else { ret += fmt.Sprintf("TradeScene:%v, ", *o.TradeScene) } if o.GoodsTag == nil { ret += "GoodsTag:, " } else { ret += fmt.Sprintf("GoodsTag:%v, ", *o.GoodsTag) } if o.NotifyUrl == nil { ret += "NotifyUrl:, " } else { ret += fmt.Sprintf("NotifyUrl:%v, ", *o.NotifyUrl) } if o.ProfitSharing == nil { ret += "ProfitSharing:, " } else { ret += fmt.Sprintf("ProfitSharing:%v, ", *o.ProfitSharing) } ret += fmt.Sprintf("Amount:%v, ", o.Amount) ret += fmt.Sprintf("ParkingInfo:%v", o.ParkingInfo) return fmt.Sprintf("CreateTransactionRequest{%s}", ret) } func (o CreateTransactionRequest) Clone() *CreateTransactionRequest { ret := CreateTransactionRequest{} if o.Appid != nil { ret.Appid = new(string) *ret.Appid = *o.Appid } if o.SubAppid != nil { ret.SubAppid = new(string) *ret.SubAppid = *o.SubAppid } if o.SubMchid != nil { ret.SubMchid = new(string) *ret.SubMchid = *o.SubMchid } if o.Description != nil { ret.Description = new(string) *ret.Description = *o.Description } if o.Attach != nil { ret.Attach = new(string) *ret.Attach = *o.Attach } if o.OutTradeNo != nil { ret.OutTradeNo = new(string) *ret.OutTradeNo = *o.OutTradeNo } if o.TradeScene != nil { ret.TradeScene = new(string) *ret.TradeScene = *o.TradeScene } if o.GoodsTag != nil { ret.GoodsTag = new(string) *ret.GoodsTag = *o.GoodsTag } if o.NotifyUrl != nil { ret.NotifyUrl = new(string) *ret.NotifyUrl = *o.NotifyUrl } if o.ProfitSharing != nil { ret.ProfitSharing = new(string) *ret.ProfitSharing = *o.ProfitSharing } if o.Amount != nil { ret.Amount = o.Amount.Clone() } if o.ParkingInfo != nil { ret.ParkingInfo = o.ParkingInfo.Clone() } return &ret } // OrderAmount type OrderAmount struct { // 订单总金额,单位为分,只能为整数 Total *int64 `json:"total"` // 符合ISO 4217标准的三位字母代码,目前只支持人民币:CNY Currency *string `json:"currency,omitempty"` } func (o OrderAmount) MarshalJSON() ([]byte, error) { toSerialize := map[string]interface{}{} if o.Total == nil { return nil, fmt.Errorf("field `Total` is required and must be specified in OrderAmount") } toSerialize["total"] = o.Total if o.Currency != nil { toSerialize["currency"] = o.Currency } return json.Marshal(toSerialize) } func (o OrderAmount) String() string { var ret string if o.Total == nil { ret += "Total:, " } else { ret += fmt.Sprintf("Total:%v, ", *o.Total) } if o.Currency == nil { ret += "Currency:" } else { ret += fmt.Sprintf("Currency:%v", *o.Currency) } return fmt.Sprintf("OrderAmount{%s}", ret) } func (o OrderAmount) Clone() *OrderAmount { ret := OrderAmount{} if o.Total != nil { ret.Total = new(int64) *ret.Total = *o.Total } if o.Currency != nil { ret.Currency = new(string) *ret.Currency = *o.Currency } return &ret } // Parking type Parking struct { // 车主服务为商户分配的入场id Id *string `json:"id"` // 商户侧入场标识id,在同一个商户号下唯一 OutParkingNo *string `json:"out_parking_no"` // 车牌号,仅包括省份+车牌,不包括特殊字符。 PlateNumber *string `json:"plate_number"` // 车牌颜色 PlateColor *PlateColor `json:"plate_color"` // 入场时间,按照使用rfc3339所定义的格式,格式为YYYY-MM-DDThh:mm:ss+TIMEZONE StartTime *string `json:"start_time"` // 所在停车位车场的名称 ParkingName *string `json:"parking_name"` // 停车场的免费停车时长,单位为秒 FreeDuration *int64 `json:"free_duration"` // 本次入场车牌的服务状态, NORMAL:正常状态,可以使用微信支付分停车服务, BLOCKED 不可用状态,暂时不可以使用微信支付分停车服务 State *string `json:"state"` // block服务状态描述,返回车牌状态为BLOCKED,会返回该字段,描述具体BLOCKED的原因, PAUSE:已暂停微信支付分停车服务; OVERDUE:已授权签约但欠费,不能提供服务, OUT_SERVICE : 车牌未开通微信支付分停车服务, EVALUATION_FAILED 综合评估未通过,用户支付分不可用的情况,会返回该状态。 BlockReason *string `json:"block_reason,omitempty"` } func (o Parking) MarshalJSON() ([]byte, error) { toSerialize := map[string]interface{}{} if o.Id == nil { return nil, fmt.Errorf("field `Id` is required and must be specified in Parking") } toSerialize["id"] = o.Id if o.OutParkingNo == nil { return nil, fmt.Errorf("field `OutParkingNo` is required and must be specified in Parking") } toSerialize["out_parking_no"] = o.OutParkingNo if o.PlateNumber == nil { return nil, fmt.Errorf("field `PlateNumber` is required and must be specified in Parking") } toSerialize["plate_number"] = o.PlateNumber if o.PlateColor == nil { return nil, fmt.Errorf("field `PlateColor` is required and must be specified in Parking") } toSerialize["plate_color"] = o.PlateColor if o.StartTime == nil { return nil, fmt.Errorf("field `StartTime` is required and must be specified in Parking") } toSerialize["start_time"] = o.StartTime if o.ParkingName == nil { return nil, fmt.Errorf("field `ParkingName` is required and must be specified in Parking") } toSerialize["parking_name"] = o.ParkingName if o.FreeDuration == nil { return nil, fmt.Errorf("field `FreeDuration` is required and must be specified in Parking") } toSerialize["free_duration"] = o.FreeDuration if o.State == nil { return nil, fmt.Errorf("field `State` is required and must be specified in Parking") } toSerialize["state"] = o.State if o.BlockReason != nil { toSerialize["block_reason"] = o.BlockReason } return json.Marshal(toSerialize) } func (o Parking) String() string { var ret string if o.Id == nil { ret += "Id:, " } else { ret += fmt.Sprintf("Id:%v, ", *o.Id) } if o.OutParkingNo == nil { ret += "OutParkingNo:, " } else { ret += fmt.Sprintf("OutParkingNo:%v, ", *o.OutParkingNo) } if o.PlateNumber == nil { ret += "PlateNumber:, " } else { ret += fmt.Sprintf("PlateNumber:%v, ", *o.PlateNumber) } if o.PlateColor == nil { ret += "PlateColor:, " } else { ret += fmt.Sprintf("PlateColor:%v, ", *o.PlateColor) } if o.StartTime == nil { ret += "StartTime:, " } else { ret += fmt.Sprintf("StartTime:%v, ", *o.StartTime) } if o.ParkingName == nil { ret += "ParkingName:, " } else { ret += fmt.Sprintf("ParkingName:%v, ", *o.ParkingName) } if o.FreeDuration == nil { ret += "FreeDuration:, " } else { ret += fmt.Sprintf("FreeDuration:%v, ", *o.FreeDuration) } if o.State == nil { ret += "State:, " } else { ret += fmt.Sprintf("State:%v, ", *o.State) } if o.BlockReason == nil { ret += "BlockReason:" } else { ret += fmt.Sprintf("BlockReason:%v", *o.BlockReason) } return fmt.Sprintf("Parking{%s}", ret) } func (o Parking) Clone() *Parking { ret := Parking{} if o.Id != nil { ret.Id = new(string) *ret.Id = *o.Id } if o.OutParkingNo != nil { ret.OutParkingNo = new(string) *ret.OutParkingNo = *o.OutParkingNo } if o.PlateNumber != nil { ret.PlateNumber = new(string) *ret.PlateNumber = *o.PlateNumber } if o.PlateColor != nil { ret.PlateColor = new(PlateColor) *ret.PlateColor = *o.PlateColor } if o.StartTime != nil { ret.StartTime = new(string) *ret.StartTime = *o.StartTime } if o.ParkingName != nil { ret.ParkingName = new(string) *ret.ParkingName = *o.ParkingName } if o.FreeDuration != nil { ret.FreeDuration = new(int64) *ret.FreeDuration = *o.FreeDuration } if o.State != nil { ret.State = new(string) *ret.State = *o.State } if o.BlockReason != nil { ret.BlockReason = new(string) *ret.BlockReason = *o.BlockReason } return &ret } // ParkingTradeScene type ParkingTradeScene struct { // 微信支付分停车服务为商户分配的入场id,商户通过入场通知接口获取入场id ParkingId *string `json:"parking_id"` // 车牌号,仅包括省份+车牌,不包括特殊字符。 PlateNumber *string `json:"plate_number"` // 车牌颜色 PlateColor *PlateColor `json:"plate_color"` // 用户入场时间,遵循[rfc3339](https://datatracker.ietf.org/doc/html/rfc3339)标准格式,格式为yyyy-MM-DDTHH:mm:ss+TIMEZONE,yyyy-MM-DD表示年月日,T出现在字符串中,表示time元素的开头,HH:mm:ss表示时分秒,TIMEZONE表示时区(+08:00表示东八区时间,领先UTC 8小时,即北京时间)。例如:2015-05-20T13:29:35+08:00表示,北京时间2015年5月20日 13点29分35秒。 StartTime *time.Time `json:"start_time"` // 用户出场时间,遵循[rfc3339](https://datatracker.ietf.org/doc/html/rfc3339)标准格式,格式为yyyy-MM-DDTHH:mm:ss+TIMEZONE,yyyy-MM-DD表示年月日,T出现在字符串中,表示time元素的开头,HH:mm:ss表示时分秒,TIMEZONE表示时区(+08:00表示东八区时间,领先UTC 8小时,即北京时间)。例如:2015-05-20T13:29:35+08:00表示,北京时间2015年5月20日 13点29分35秒。 EndTime *time.Time `json:"end_time"` // 所在停车位车场的名称 ParkingName *string `json:"parking_name"` // 计费的时间长,单位为秒 ChargingDuration *int64 `json:"charging_duration"` // 停车场设备id DeviceId *string `json:"device_id"` } func (o ParkingTradeScene) MarshalJSON() ([]byte, error) { toSerialize := map[string]interface{}{} if o.ParkingId == nil { return nil, fmt.Errorf("field `ParkingId` is required and must be specified in ParkingTradeScene") } toSerialize["parking_id"] = o.ParkingId if o.PlateNumber == nil { return nil, fmt.Errorf("field `PlateNumber` is required and must be specified in ParkingTradeScene") } toSerialize["plate_number"] = o.PlateNumber if o.PlateColor == nil { return nil, fmt.Errorf("field `PlateColor` is required and must be specified in ParkingTradeScene") } toSerialize["plate_color"] = o.PlateColor if o.StartTime == nil { return nil, fmt.Errorf("field `StartTime` is required and must be specified in ParkingTradeScene") } toSerialize["start_time"] = o.StartTime.Format(time.RFC3339) if o.EndTime == nil { return nil, fmt.Errorf("field `EndTime` is required and must be specified in ParkingTradeScene") } toSerialize["end_time"] = o.EndTime.Format(time.RFC3339) if o.ParkingName == nil { return nil, fmt.Errorf("field `ParkingName` is required and must be specified in ParkingTradeScene") } toSerialize["parking_name"] = o.ParkingName if o.ChargingDuration == nil { return nil, fmt.Errorf("field `ChargingDuration` is required and must be specified in ParkingTradeScene") } toSerialize["charging_duration"] = o.ChargingDuration if o.DeviceId == nil { return nil, fmt.Errorf("field `DeviceId` is required and must be specified in ParkingTradeScene") } toSerialize["device_id"] = o.DeviceId return json.Marshal(toSerialize) } func (o ParkingTradeScene) String() string { var ret string if o.ParkingId == nil { ret += "ParkingId:, " } else { ret += fmt.Sprintf("ParkingId:%v, ", *o.ParkingId) } if o.PlateNumber == nil { ret += "PlateNumber:, " } else { ret += fmt.Sprintf("PlateNumber:%v, ", *o.PlateNumber) } if o.PlateColor == nil { ret += "PlateColor:, " } else { ret += fmt.Sprintf("PlateColor:%v, ", *o.PlateColor) } if o.StartTime == nil { ret += "StartTime:, " } else { ret += fmt.Sprintf("StartTime:%v, ", *o.StartTime) } if o.EndTime == nil { ret += "EndTime:, " } else { ret += fmt.Sprintf("EndTime:%v, ", *o.EndTime) } if o.ParkingName == nil { ret += "ParkingName:, " } else { ret += fmt.Sprintf("ParkingName:%v, ", *o.ParkingName) } if o.ChargingDuration == nil { ret += "ChargingDuration:, " } else { ret += fmt.Sprintf("ChargingDuration:%v, ", *o.ChargingDuration) } if o.DeviceId == nil { ret += "DeviceId:" } else { ret += fmt.Sprintf("DeviceId:%v", *o.DeviceId) } return fmt.Sprintf("ParkingTradeScene{%s}", ret) } func (o ParkingTradeScene) Clone() *ParkingTradeScene { ret := ParkingTradeScene{} if o.ParkingId != nil { ret.ParkingId = new(string) *ret.ParkingId = *o.ParkingId } if o.PlateNumber != nil { ret.PlateNumber = new(string) *ret.PlateNumber = *o.PlateNumber } if o.PlateColor != nil { ret.PlateColor = new(PlateColor) *ret.PlateColor = *o.PlateColor } if o.StartTime != nil { ret.StartTime = new(time.Time) *ret.StartTime = *o.StartTime } if o.EndTime != nil { ret.EndTime = new(time.Time) *ret.EndTime = *o.EndTime } if o.ParkingName != nil { ret.ParkingName = new(string) *ret.ParkingName = *o.ParkingName } if o.ChargingDuration != nil { ret.ChargingDuration = new(int64) *ret.ChargingDuration = *o.ChargingDuration } if o.DeviceId != nil { ret.DeviceId = new(string) *ret.DeviceId = *o.DeviceId } return &ret } // Payer type Payer struct { // 用户在appid下的唯一标识 Openid *string `json:"openid"` // 用户在sub_appid下的标识,商户扣费时传入了sub_appid,则会返回该用户在sub_appid下的标识 SubOpenid *string `json:"sub_openid,omitempty"` } func (o Payer) MarshalJSON() ([]byte, error) { toSerialize := map[string]interface{}{} if o.Openid == nil { return nil, fmt.Errorf("field `Openid` is required and must be specified in Payer") } toSerialize["openid"] = o.Openid if o.SubOpenid != nil { toSerialize["sub_openid"] = o.SubOpenid } return json.Marshal(toSerialize) } func (o Payer) String() string { var ret string if o.Openid == nil { ret += "Openid:, " } else { ret += fmt.Sprintf("Openid:%v, ", *o.Openid) } if o.SubOpenid == nil { ret += "SubOpenid:" } else { ret += fmt.Sprintf("SubOpenid:%v", *o.SubOpenid) } return fmt.Sprintf("Payer{%s}", ret) } func (o Payer) Clone() *Payer { ret := Payer{} if o.Openid != nil { ret.Openid = new(string) *ret.Openid = *o.Openid } if o.SubOpenid != nil { ret.SubOpenid = new(string) *ret.SubOpenid = *o.SubOpenid } return &ret } // PlateColor type PlateColor string func (e PlateColor) Ptr() *PlateColor { return &e } // Enums of PlateColor const ( PLATECOLOR_BLUE PlateColor = "BLUE" PLATECOLOR_GREEN PlateColor = "GREEN" PLATECOLOR_YELLOW PlateColor = "YELLOW" PLATECOLOR_BLACK PlateColor = "BLACK" PLATECOLOR_WHITE PlateColor = "WHITE" PLATECOLOR_LIMEGREEN PlateColor = "LIMEGREEN" ) // PlateService type PlateService struct { // 车牌号,仅包括省份+车牌,不包括特殊字符。 PlateNumber *string `json:"plate_number"` // 车牌颜色 PlateColor *PlateColor `json:"plate_color"` // 车牌服务开通时间,遵循[rfc3339](https://datatracker.ietf.org/doc/html/rfc3339)标准格式,格式为yyyy-MM-DDTHH:mm:ss+TIMEZONE,yyyy-MM-DD表示年月日,T出现在字符串中,表示time元素的开头,HH:mm:ss表示时分秒,TIMEZONE表示时区(+08:00表示东八区时间,领先UTC 8小时,即北京时间)。例如:2015-05-20T13:29:35+08:00表示,北京时间2015年5月20日 13点29分35秒。 ServiceOpenTime *time.Time `json:"service_open_time,omitempty"` // 用户在商户对应appid下的唯一标识,此处返回商户请求中的openid Openid *string `json:"openid"` // 车牌服务开通状态, NORMAL 正常服务 PAUSE 暂停服务 OUT_SERVICE 未开通 商户根据状态带用户跳转至对应的微信支付分停车服务小程序页面。 其中NORMAL 和 PAUSE状态,可跳转至车牌管理页,进行车牌服务状态管理。OUT_SERVICE状态,可跳转至服务开通页面。 ServiceState *string `json:"service_state"` } func (o PlateService) MarshalJSON() ([]byte, error) { toSerialize := map[string]interface{}{} if o.PlateNumber == nil { return nil, fmt.Errorf("field `PlateNumber` is required and must be specified in PlateService") } toSerialize["plate_number"] = o.PlateNumber if o.PlateColor == nil { return nil, fmt.Errorf("field `PlateColor` is required and must be specified in PlateService") } toSerialize["plate_color"] = o.PlateColor if o.ServiceOpenTime != nil { toSerialize["service_open_time"] = o.ServiceOpenTime.Format(time.RFC3339) } if o.Openid == nil { return nil, fmt.Errorf("field `Openid` is required and must be specified in PlateService") } toSerialize["openid"] = o.Openid if o.ServiceState == nil { return nil, fmt.Errorf("field `ServiceState` is required and must be specified in PlateService") } toSerialize["service_state"] = o.ServiceState return json.Marshal(toSerialize) } func (o PlateService) String() string { var ret string if o.PlateNumber == nil { ret += "PlateNumber:, " } else { ret += fmt.Sprintf("PlateNumber:%v, ", *o.PlateNumber) } if o.PlateColor == nil { ret += "PlateColor:, " } else { ret += fmt.Sprintf("PlateColor:%v, ", *o.PlateColor) } if o.ServiceOpenTime == nil { ret += "ServiceOpenTime:, " } else { ret += fmt.Sprintf("ServiceOpenTime:%v, ", *o.ServiceOpenTime) } if o.Openid == nil { ret += "Openid:, " } else { ret += fmt.Sprintf("Openid:%v, ", *o.Openid) } if o.ServiceState == nil { ret += "ServiceState:" } else { ret += fmt.Sprintf("ServiceState:%v", *o.ServiceState) } return fmt.Sprintf("PlateService{%s}", ret) } func (o PlateService) Clone() *PlateService { ret := PlateService{} if o.PlateNumber != nil { ret.PlateNumber = new(string) *ret.PlateNumber = *o.PlateNumber } if o.PlateColor != nil { ret.PlateColor = new(PlateColor) *ret.PlateColor = *o.PlateColor } if o.ServiceOpenTime != nil { ret.ServiceOpenTime = new(time.Time) *ret.ServiceOpenTime = *o.ServiceOpenTime } if o.Openid != nil { ret.Openid = new(string) *ret.Openid = *o.Openid } if o.ServiceState != nil { ret.ServiceState = new(string) *ret.ServiceState = *o.ServiceState } return &ret } // PromotionDetail type PromotionDetail struct { // 券或者立减优惠id CouponId *string `json:"coupon_id"` // 优惠名称 Name *string `json:"name,omitempty"` // GLOBAL-全场代金券, SINGLE-单品优惠 Scope *string `json:"scope,omitempty"` // 枚举值: CASH:充值型代金券 NOCASH:免充值型代金券 Type *string `json:"type,omitempty"` // 在微信商户后台配置的批次ID StockId *string `json:"stock_id,omitempty"` // 用户享受优惠的金额 Amount *int64 `json:"amount"` // 特指由微信支付商户平台创建的优惠,出资金额等于本项优惠总金额,单位为分 WechatpayContribute *int64 `json:"wechatpay_contribute,omitempty"` // 特指商户自己创建的优惠,出资金额等于本项优惠总金额,单位为分 MerchantContribute *int64 `json:"merchant_contribute,omitempty"` // 其他出资方出资金额,单位为分 OtherContribute *int64 `json:"other_contribute,omitempty"` // CNY:人民币,境内商户号仅支持人民币。 Currency *string `json:"currency,omitempty"` } func (o PromotionDetail) MarshalJSON() ([]byte, error) { toSerialize := map[string]interface{}{} if o.CouponId == nil { return nil, fmt.Errorf("field `CouponId` is required and must be specified in PromotionDetail") } toSerialize["coupon_id"] = o.CouponId if o.Name != nil { toSerialize["name"] = o.Name } if o.Scope != nil { toSerialize["scope"] = o.Scope } if o.Type != nil { toSerialize["type"] = o.Type } if o.StockId != nil { toSerialize["stock_id"] = o.StockId } if o.Amount == nil { return nil, fmt.Errorf("field `Amount` is required and must be specified in PromotionDetail") } toSerialize["amount"] = o.Amount if o.WechatpayContribute != nil { toSerialize["wechatpay_contribute"] = o.WechatpayContribute } if o.MerchantContribute != nil { toSerialize["merchant_contribute"] = o.MerchantContribute } if o.OtherContribute != nil { toSerialize["other_contribute"] = o.OtherContribute } if o.Currency != nil { toSerialize["currency"] = o.Currency } return json.Marshal(toSerialize) } func (o PromotionDetail) String() string { var ret string if o.CouponId == nil { ret += "CouponId:, " } else { ret += fmt.Sprintf("CouponId:%v, ", *o.CouponId) } if o.Name == nil { ret += "Name:, " } else { ret += fmt.Sprintf("Name:%v, ", *o.Name) } if o.Scope == nil { ret += "Scope:, " } else { ret += fmt.Sprintf("Scope:%v, ", *o.Scope) } if o.Type == nil { ret += "Type:, " } else { ret += fmt.Sprintf("Type:%v, ", *o.Type) } if o.StockId == nil { ret += "StockId:, " } else { ret += fmt.Sprintf("StockId:%v, ", *o.StockId) } if o.Amount == nil { ret += "Amount:, " } else { ret += fmt.Sprintf("Amount:%v, ", *o.Amount) } if o.WechatpayContribute == nil { ret += "WechatpayContribute:, " } else { ret += fmt.Sprintf("WechatpayContribute:%v, ", *o.WechatpayContribute) } if o.MerchantContribute == nil { ret += "MerchantContribute:, " } else { ret += fmt.Sprintf("MerchantContribute:%v, ", *o.MerchantContribute) } if o.OtherContribute == nil { ret += "OtherContribute:, " } else { ret += fmt.Sprintf("OtherContribute:%v, ", *o.OtherContribute) } if o.Currency == nil { ret += "Currency:" } else { ret += fmt.Sprintf("Currency:%v", *o.Currency) } return fmt.Sprintf("PromotionDetail{%s}", ret) } func (o PromotionDetail) Clone() *PromotionDetail { ret := PromotionDetail{} if o.CouponId != nil { ret.CouponId = new(string) *ret.CouponId = *o.CouponId } if o.Name != nil { ret.Name = new(string) *ret.Name = *o.Name } if o.Scope != nil { ret.Scope = new(string) *ret.Scope = *o.Scope } if o.Type != nil { ret.Type = new(string) *ret.Type = *o.Type } if o.StockId != nil { ret.StockId = new(string) *ret.StockId = *o.StockId } if o.Amount != nil { ret.Amount = new(int64) *ret.Amount = *o.Amount } if o.WechatpayContribute != nil { ret.WechatpayContribute = new(int64) *ret.WechatpayContribute = *o.WechatpayContribute } if o.MerchantContribute != nil { ret.MerchantContribute = new(int64) *ret.MerchantContribute = *o.MerchantContribute } if o.OtherContribute != nil { ret.OtherContribute = new(int64) *ret.OtherContribute = *o.OtherContribute } if o.Currency != nil { ret.Currency = new(string) *ret.Currency = *o.Currency } return &ret } // QueryOrderAmount type QueryOrderAmount struct { // 订单总金额,单位为分,只能为整数,详见支付金额 Total *int64 `json:"total"` // 符合ISO 4217标准的三位字母代码,目前只支持人民币:CNY Currency *string `json:"currency,omitempty"` // 用户实际支付金额,单位为分,只能为整数,详见支付金额 PayerTotal *int64 `json:"payer_total,omitempty"` // 订单折扣 DiscountTotal *int64 `json:"discount_total,omitempty"` } func (o QueryOrderAmount) MarshalJSON() ([]byte, error) { toSerialize := map[string]interface{}{} if o.Total == nil { return nil, fmt.Errorf("field `Total` is required and must be specified in QueryOrderAmount") } toSerialize["total"] = o.Total if o.Currency != nil { toSerialize["currency"] = o.Currency } if o.PayerTotal != nil { toSerialize["payer_total"] = o.PayerTotal } if o.DiscountTotal != nil { toSerialize["discount_total"] = o.DiscountTotal } return json.Marshal(toSerialize) } func (o QueryOrderAmount) String() string { var ret string if o.Total == nil { ret += "Total:, " } else { ret += fmt.Sprintf("Total:%v, ", *o.Total) } if o.Currency == nil { ret += "Currency:, " } else { ret += fmt.Sprintf("Currency:%v, ", *o.Currency) } if o.PayerTotal == nil { ret += "PayerTotal:, " } else { ret += fmt.Sprintf("PayerTotal:%v, ", *o.PayerTotal) } if o.DiscountTotal == nil { ret += "DiscountTotal:" } else { ret += fmt.Sprintf("DiscountTotal:%v", *o.DiscountTotal) } return fmt.Sprintf("QueryOrderAmount{%s}", ret) } func (o QueryOrderAmount) Clone() *QueryOrderAmount { ret := QueryOrderAmount{} if o.Total != nil { ret.Total = new(int64) *ret.Total = *o.Total } if o.Currency != nil { ret.Currency = new(string) *ret.Currency = *o.Currency } if o.PayerTotal != nil { ret.PayerTotal = new(int64) *ret.PayerTotal = *o.PayerTotal } if o.DiscountTotal != nil { ret.DiscountTotal = new(int64) *ret.DiscountTotal = *o.DiscountTotal } return &ret } // QueryPlateServiceRequest type QueryPlateServiceRequest struct { // appid是商户在微信申请公众号或移动应用成功后分配的帐号ID,登录平台为mp.weixin.qq.com或open.weixin.qq.com Appid *string `json:"appid"` // 微信支付分配的子商户号,服务商模式下必传 SubMchid *string `json:"sub_mchid,omitempty"` // 车牌号,仅包括省份+车牌,不包括特殊字符。 PlateNumber *string `json:"plate_number"` // 用户在商户对应appid下的唯一标识 Openid *string `json:"openid"` // 车牌颜色 PlateColor *PlateColor `json:"plate_color"` } func (o QueryPlateServiceRequest) MarshalJSON() ([]byte, error) { toSerialize := map[string]interface{}{} if o.Appid == nil { return nil, fmt.Errorf("field `Appid` is required and must be specified in QueryPlateServiceRequest") } toSerialize["appid"] = o.Appid if o.SubMchid != nil { toSerialize["sub_mchid"] = o.SubMchid } if o.PlateNumber == nil { return nil, fmt.Errorf("field `PlateNumber` is required and must be specified in QueryPlateServiceRequest") } toSerialize["plate_number"] = o.PlateNumber if o.Openid == nil { return nil, fmt.Errorf("field `Openid` is required and must be specified in QueryPlateServiceRequest") } toSerialize["openid"] = o.Openid if o.PlateColor == nil { return nil, fmt.Errorf("field `PlateColor` is required and must be specified in QueryPlateServiceRequest") } toSerialize["plate_color"] = o.PlateColor return json.Marshal(toSerialize) } func (o QueryPlateServiceRequest) String() string { var ret string if o.Appid == nil { ret += "Appid:, " } else { ret += fmt.Sprintf("Appid:%v, ", *o.Appid) } if o.SubMchid == nil { ret += "SubMchid:, " } else { ret += fmt.Sprintf("SubMchid:%v, ", *o.SubMchid) } if o.PlateNumber == nil { ret += "PlateNumber:, " } else { ret += fmt.Sprintf("PlateNumber:%v, ", *o.PlateNumber) } if o.Openid == nil { ret += "Openid:, " } else { ret += fmt.Sprintf("Openid:%v, ", *o.Openid) } if o.PlateColor == nil { ret += "PlateColor:" } else { ret += fmt.Sprintf("PlateColor:%v", *o.PlateColor) } return fmt.Sprintf("QueryPlateServiceRequest{%s}", ret) } func (o QueryPlateServiceRequest) Clone() *QueryPlateServiceRequest { ret := QueryPlateServiceRequest{} if o.Appid != nil { ret.Appid = new(string) *ret.Appid = *o.Appid } if o.SubMchid != nil { ret.SubMchid = new(string) *ret.SubMchid = *o.SubMchid } if o.PlateNumber != nil { ret.PlateNumber = new(string) *ret.PlateNumber = *o.PlateNumber } if o.Openid != nil { ret.Openid = new(string) *ret.Openid = *o.Openid } if o.PlateColor != nil { ret.PlateColor = new(PlateColor) *ret.PlateColor = *o.PlateColor } return &ret } // QueryTransactionRequest type QueryTransactionRequest struct { // 微信支付分配的子商户号,服务商模式下必传 SubMchid *string `json:"sub_mchid,omitempty"` // 商户系统内部订单号,只能是数字、大小写字母,且在同一个商户号下唯一 OutTradeNo *string `json:"out_trade_no"` } func (o QueryTransactionRequest) MarshalJSON() ([]byte, error) { toSerialize := map[string]interface{}{} if o.SubMchid != nil { toSerialize["sub_mchid"] = o.SubMchid } if o.OutTradeNo == nil { return nil, fmt.Errorf("field `OutTradeNo` is required and must be specified in QueryTransactionRequest") } toSerialize["out_trade_no"] = o.OutTradeNo return json.Marshal(toSerialize) } func (o QueryTransactionRequest) String() string { var ret string if o.SubMchid == nil { ret += "SubMchid:, " } else { ret += fmt.Sprintf("SubMchid:%v, ", *o.SubMchid) } if o.OutTradeNo == nil { ret += "OutTradeNo:" } else { ret += fmt.Sprintf("OutTradeNo:%v", *o.OutTradeNo) } return fmt.Sprintf("QueryTransactionRequest{%s}", ret) } func (o QueryTransactionRequest) Clone() *QueryTransactionRequest { ret := QueryTransactionRequest{} if o.SubMchid != nil { ret.SubMchid = new(string) *ret.SubMchid = *o.SubMchid } if o.OutTradeNo != nil { ret.OutTradeNo = new(string) *ret.OutTradeNo = *o.OutTradeNo } return &ret } // Transaction type Transaction struct { // appid是商户在微信申请公众号或移动应用成功后分配的帐号ID,登录平台为mp.weixin.qq.com或open.weixin.qq.com Appid *string `json:"appid"` // 子商户申请的公众号或移动应用appid,需要在服务商的商户平台为子商户绑定 SubAppid *string `json:"sub_appid,omitempty"` // 微信支付分配的商户号 SpMchid *string `json:"sp_mchid"` // 微信支付分配的子商户号 SubMchid *string `json:"sub_mchid,omitempty"` // 商户自定义字段,用于交易账单中对扣费服务的描述。 Description *string `json:"description"` // 订单成功创建时返回,遵循[rfc3339](https://datatracker.ietf.org/doc/html/rfc3339)标准格式,格式为yyyy-MM-DDTHH:mm:ss+TIMEZONE,yyyy-MM-DD表示年月日,T出现在字符串中,表示time元素的开头,HH:mm:ss表示时分秒,TIMEZONE表示时区(+08:00表示东八区时间,领先UTC 8小时,即北京时间)。例如:2015-05-20T13:29:35+08:00表示,北京时间2015年5月20日 13点29分35秒。 CreateTime *time.Time `json:"create_time"` // 商户系统内部订单号,只能是数字、大小写字母_-*且在同一个商户号下唯一 OutTradeNo *string `json:"out_trade_no"` // 微信支付订单号 TransactionId *string `json:"transaction_id,omitempty"` // SUCCESS—支付成功 ACCEPTED—已接收,等待扣款 PAY_FAIL–支付失败(其他原因,如银行返回失败) REFUND—转入退款 TradeState *string `json:"trade_state"` // 对当前订单状态的描述和下一步操作的指引 TradeStateDescription *string `json:"trade_state_description,omitempty"` // 订单支付完成时间,遵循[rfc3339](https://datatracker.ietf.org/doc/html/rfc3339)标准格式,格式为yyyy-MM-DDTHH:mm:ss+TIMEZONE,yyyy-MM-DD表示年月日,T出现在字符串中,表示time元素的开头,HH:mm:ss表示时分秒,TIMEZONE表示时区(+08:00表示东八区时间,领先UTC 8小时,即北京时间)。例如:2015-05-20T13:29:35+08:00表示,北京时间2015年5月20日 13点29分35秒。 SuccessTime *time.Time `json:"success_time,omitempty"` // 银行类型,采用字符串类型的银行标识。BPA:该笔订单由微信进行垫付 BankType *string `json:"bank_type,omitempty"` // 枚举值: Y:用户已还款 N:用户未还款 注意:使用此字段前需先确认bank_type字段值为BPA以及 trade_state字段值为SUCCESS。 UserRepaid *string `json:"user_repaid,omitempty"` // 附加数据,在查询API和支付通知中原样返回,可作为自定义参数使用 Attach *string `json:"attach,omitempty"` // 交易场景值,目前支持 :PARKING:车场停车场景 TradeScene *string `json:"trade_scene"` // 返回信息中的trade_scene为PARKING,返回该场景信息 ParkingInfo *ParkingTradeScene `json:"parking_info,omitempty"` // 支付者信息 Payer *Payer `json:"payer"` // 订单金额信息 Amount *QueryOrderAmount `json:"amount"` // 优惠信息 PromotionDetail []PromotionDetail `json:"promotion_detail,omitempty"` } func (o Transaction) MarshalJSON() ([]byte, error) { toSerialize := map[string]interface{}{} if o.Appid == nil { return nil, fmt.Errorf("field `Appid` is required and must be specified in Transaction") } toSerialize["appid"] = o.Appid if o.SubAppid != nil { toSerialize["sub_appid"] = o.SubAppid } if o.SpMchid == nil { return nil, fmt.Errorf("field `SpMchid` is required and must be specified in Transaction") } toSerialize["sp_mchid"] = o.SpMchid if o.SubMchid != nil { toSerialize["sub_mchid"] = o.SubMchid } if o.Description == nil { return nil, fmt.Errorf("field `Description` is required and must be specified in Transaction") } toSerialize["description"] = o.Description if o.CreateTime == nil { return nil, fmt.Errorf("field `CreateTime` is required and must be specified in Transaction") } toSerialize["create_time"] = o.CreateTime.Format(time.RFC3339) if o.OutTradeNo == nil { return nil, fmt.Errorf("field `OutTradeNo` is required and must be specified in Transaction") } toSerialize["out_trade_no"] = o.OutTradeNo if o.TransactionId != nil { toSerialize["transaction_id"] = o.TransactionId } if o.TradeState == nil { return nil, fmt.Errorf("field `TradeState` is required and must be specified in Transaction") } toSerialize["trade_state"] = o.TradeState if o.TradeStateDescription != nil { toSerialize["trade_state_description"] = o.TradeStateDescription } if o.SuccessTime != nil { toSerialize["success_time"] = o.SuccessTime.Format(time.RFC3339) } if o.BankType != nil { toSerialize["bank_type"] = o.BankType } if o.UserRepaid != nil { toSerialize["user_repaid"] = o.UserRepaid } if o.Attach != nil { toSerialize["attach"] = o.Attach } if o.TradeScene == nil { return nil, fmt.Errorf("field `TradeScene` is required and must be specified in Transaction") } toSerialize["trade_scene"] = o.TradeScene if o.ParkingInfo != nil { toSerialize["parking_info"] = o.ParkingInfo } if o.Payer == nil { return nil, fmt.Errorf("field `Payer` is required and must be specified in Transaction") } toSerialize["payer"] = o.Payer if o.Amount == nil { return nil, fmt.Errorf("field `Amount` is required and must be specified in Transaction") } toSerialize["amount"] = o.Amount if o.PromotionDetail != nil { toSerialize["promotion_detail"] = o.PromotionDetail } return json.Marshal(toSerialize) } func (o Transaction) String() string { var ret string if o.Appid == nil { ret += "Appid:, " } else { ret += fmt.Sprintf("Appid:%v, ", *o.Appid) } if o.SubAppid == nil { ret += "SubAppid:, " } else { ret += fmt.Sprintf("SubAppid:%v, ", *o.SubAppid) } if o.SpMchid == nil { ret += "SpMchid:, " } else { ret += fmt.Sprintf("SpMchid:%v, ", *o.SpMchid) } if o.SubMchid == nil { ret += "SubMchid:, " } else { ret += fmt.Sprintf("SubMchid:%v, ", *o.SubMchid) } if o.Description == nil { ret += "Description:, " } else { ret += fmt.Sprintf("Description:%v, ", *o.Description) } if o.CreateTime == nil { ret += "CreateTime:, " } else { ret += fmt.Sprintf("CreateTime:%v, ", *o.CreateTime) } if o.OutTradeNo == nil { ret += "OutTradeNo:, " } else { ret += fmt.Sprintf("OutTradeNo:%v, ", *o.OutTradeNo) } if o.TransactionId == nil { ret += "TransactionId:, " } else { ret += fmt.Sprintf("TransactionId:%v, ", *o.TransactionId) } if o.TradeState == nil { ret += "TradeState:, " } else { ret += fmt.Sprintf("TradeState:%v, ", *o.TradeState) } if o.TradeStateDescription == nil { ret += "TradeStateDescription:, " } else { ret += fmt.Sprintf("TradeStateDescription:%v, ", *o.TradeStateDescription) } if o.SuccessTime == nil { ret += "SuccessTime:, " } else { ret += fmt.Sprintf("SuccessTime:%v, ", *o.SuccessTime) } if o.BankType == nil { ret += "BankType:, " } else { ret += fmt.Sprintf("BankType:%v, ", *o.BankType) } if o.UserRepaid == nil { ret += "UserRepaid:, " } else { ret += fmt.Sprintf("UserRepaid:%v, ", *o.UserRepaid) } if o.Attach == nil { ret += "Attach:, " } else { ret += fmt.Sprintf("Attach:%v, ", *o.Attach) } if o.TradeScene == nil { ret += "TradeScene:, " } else { ret += fmt.Sprintf("TradeScene:%v, ", *o.TradeScene) } ret += fmt.Sprintf("ParkingInfo:%v, ", o.ParkingInfo) ret += fmt.Sprintf("Payer:%v, ", o.Payer) ret += fmt.Sprintf("Amount:%v, ", o.Amount) ret += fmt.Sprintf("PromotionDetail:%v", o.PromotionDetail) return fmt.Sprintf("Transaction{%s}", ret) } func (o Transaction) Clone() *Transaction { ret := Transaction{} if o.Appid != nil { ret.Appid = new(string) *ret.Appid = *o.Appid } if o.SubAppid != nil { ret.SubAppid = new(string) *ret.SubAppid = *o.SubAppid } if o.SpMchid != nil { ret.SpMchid = new(string) *ret.SpMchid = *o.SpMchid } if o.SubMchid != nil { ret.SubMchid = new(string) *ret.SubMchid = *o.SubMchid } if o.Description != nil { ret.Description = new(string) *ret.Description = *o.Description } if o.CreateTime != nil { ret.CreateTime = new(time.Time) *ret.CreateTime = *o.CreateTime } if o.OutTradeNo != nil { ret.OutTradeNo = new(string) *ret.OutTradeNo = *o.OutTradeNo } if o.TransactionId != nil { ret.TransactionId = new(string) *ret.TransactionId = *o.TransactionId } if o.TradeState != nil { ret.TradeState = new(string) *ret.TradeState = *o.TradeState } if o.TradeStateDescription != nil { ret.TradeStateDescription = new(string) *ret.TradeStateDescription = *o.TradeStateDescription } if o.SuccessTime != nil { ret.SuccessTime = new(time.Time) *ret.SuccessTime = *o.SuccessTime } if o.BankType != nil { ret.BankType = new(string) *ret.BankType = *o.BankType } if o.UserRepaid != nil { ret.UserRepaid = new(string) *ret.UserRepaid = *o.UserRepaid } if o.Attach != nil { ret.Attach = new(string) *ret.Attach = *o.Attach } if o.TradeScene != nil { ret.TradeScene = new(string) *ret.TradeScene = *o.TradeScene } if o.ParkingInfo != nil { ret.ParkingInfo = o.ParkingInfo.Clone() } if o.Payer != nil { ret.Payer = o.Payer.Clone() } if o.Amount != nil { ret.Amount = o.Amount.Clone() } if o.PromotionDetail != nil { ret.PromotionDetail = make([]PromotionDetail, len(o.PromotionDetail)) for i, item := range o.PromotionDetail { ret.PromotionDetail[i] = *item.Clone() } } return &ret }