From 0108bdc7761fa948f85b44d6ef55f6fed7f3d01b Mon Sep 17 00:00:00 2001 From: smartwalle Date: Wed, 28 Jun 2023 13:06:39 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=96=87=E4=BB=B6=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- alipay.go | 26 +++++++++--------- alipay_type.go | 63 +++++++++++++++++++++++++++++++++++++++++--- authorize_type.go | 6 +++++ bill_type.go | 3 +++ certify_type.go | 5 ++++ examples/go.mod | 1 + examples/go.sum | 2 ++ fund_type.go | 12 +++++++++ go.mod | 1 + go.sum | 2 ++ trade_refund_type.go | 1 + trade_type.go | 10 +++++++ user_type.go | 4 +++ wap_type.go | 1 + 14 files changed, 121 insertions(+), 16 deletions(-) diff --git a/alipay.go b/alipay.go index ba149d7..f713253 100644 --- a/alipay.go +++ b/alipay.go @@ -1,6 +1,7 @@ package alipay import ( + "context" "crypto" "crypto/md5" "crypto/rsa" @@ -9,6 +10,7 @@ import ( "encoding/hex" "encoding/json" "errors" + "github.com/smartwalle/ngx" "github.com/smartwalle/nsign" "io" "net/http" @@ -43,7 +45,7 @@ type Client struct { onReceivedData func(method string, data []byte) // 内容加密 - encryptNeed bool + needEncrypt bool encryptIV []byte encryptType string encryptKey []byte @@ -164,7 +166,7 @@ func (this *Client) IsProduction() bool { // SetEncryptKey 接口内容加密密钥 https://opendocs.alipay.com/common/02mse3 func (this *Client) SetEncryptKey(key string) error { if key == "" { - this.encryptNeed = false + this.needEncrypt = false return nil } @@ -172,7 +174,7 @@ func (this *Client) SetEncryptKey(key string) error { if err != nil { return err } - this.encryptNeed = true + this.needEncrypt = true this.encryptIV = []byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} this.encryptType = "AES" this.encryptKey = data @@ -339,7 +341,7 @@ func (this *Client) URLValues(param Param) (value url.Values, err error) { } var content = string(jsonBytes) - if this.encryptNeed && param.APIName() != kCertDownloadAPI { + if this.needEncrypt && param.NeedEncrypt() { jsonBytes, err = ncrypto.AESCBCEncrypt(jsonBytes, this.encryptKey, this.encryptIV, this.encryptPadding) if err != nil { return nil, err @@ -367,23 +369,23 @@ func (this *Client) URLValues(param Param) (value url.Values, err error) { } func (this *Client) doRequest(method string, param Param, result interface{}) (err error) { - var body io.Reader + var req = ngx.NewRequest(method, this.host, ngx.WithClient(this.Client)) + req.SetContentType(kContentType) if param != nil { var values url.Values values, err = this.URLValues(param) if err != nil { return err } - body = strings.NewReader(values.Encode()) - } + req.SetParams(values) - req, err := http.NewRequest(method, this.host, body) - if err != nil { - return err + var files = param.FileParams() + for _, file := range files { + req.AddFile(file.Name, file.Filename, file.Filepath) + } } - req.Header.Set("Content-Type", kContentType) - rsp, err := this.Client.Do(req) + rsp, err := req.Do(context.Background()) if err != nil { return err } diff --git a/alipay_type.go b/alipay_type.go index ab52b5c..59621ce 100644 --- a/alipay_type.go +++ b/alipay_type.go @@ -58,17 +58,43 @@ type Param interface { // Params 返回公共请求参数 Params() map[string]string + + // FileParams 返回文件参数 + FileParams() map[string]*FileItem + + // NeedEncrypt 返回该接口是否支持内容加密,有的接口不支持内容加密,比如文件上传接口:alipay.open.file.upload + NeedEncrypt() bool +} + +type AuxParam struct { +} + +func (this AuxParam) FileParams() map[string]*FileItem { + return nil +} + +func (this AuxParam) NeedEncrypt() bool { + return true +} + +type FileItem struct { + Name string + Filename string + Filepath string } type Payload struct { - method string - param map[string]string - biz map[string]interface{} + method string + Encrypt bool + param map[string]string + biz map[string]interface{} + files map[string]*FileItem } func NewPayload(method string) *Payload { var nPayload = &Payload{} nPayload.method = method + nPayload.Encrypt = true nPayload.param = make(map[string]string) nPayload.biz = make(map[string]interface{}) return nPayload @@ -82,6 +108,14 @@ func (this *Payload) Params() map[string]string { return this.param } +func (this *Payload) FileParams() map[string]*FileItem { + return this.files +} + +func (this *Payload) NeedEncrypt() bool { + return this.Encrypt +} + // AddParam 添加公共请求参数 // // 例如:https://opendocs.alipay.com/apis/api_1/alipay.trade.query/#%E5%85%AC%E5%85%B1%E8%AF%B7%E6%B1%82%E5%8F%82%E6%95%B0 @@ -90,7 +124,7 @@ func (this *Payload) AddParam(key, value string) *Payload { return this } -// Set 添加请求参数(业务相关) +// Set 添加请求参数(业务相关),这里添加的参数会序列化成 JSON 字符串,然后通过 biz_content 参数传递 // // 例如:https://opendocs.alipay.com/apis/api_1/alipay.trade.query/#%E8%AF%B7%E6%B1%82%E5%8F%82%E6%95%B0 func (this *Payload) Set(key string, value interface{}) *Payload { @@ -98,6 +132,22 @@ func (this *Payload) Set(key string, value interface{}) *Payload { return this } +// AddFile 添加需要上传的文件 +// +// name: 参数名称 +// filename: 文件名称 +// filepath: 本地文件完整路径 +func (this *Payload) AddFile(name, filename, filepath string) { + if this.files == nil { + this.files = make(map[string]*FileItem) + } + + if filename == "" { + filename = name + } + this.files[name] = &FileItem{Name: name, Filename: filename, Filepath: filepath} +} + func (this *Payload) MarshalJSON() ([]byte, error) { return json.Marshal(this.biz) } @@ -127,6 +177,7 @@ const ( // CertDownload 应用支付宝公钥证书下载 https://opendocs.alipay.com/common/06ue2z type CertDownload struct { + AuxParam AppAuthToken string `json:"-"` // 可选 AliPayCertSN string `json:"alipay_cert_sn"` // 支付宝公钥证书序列号 } @@ -141,6 +192,10 @@ func (this CertDownload) Params() map[string]string { return m } +func (this CertDownload) NeedEncrypt() bool { + return false +} + type CertDownloadRsp struct { Error AliPayCertContent string `json:"alipay_cert_content"` diff --git a/authorize_type.go b/authorize_type.go index 786335a..f0bbedc 100644 --- a/authorize_type.go +++ b/authorize_type.go @@ -12,6 +12,7 @@ const ( // SystemOauthToken 换取授权访问令牌接口请求参数 https://docs.open.alipay.com/api_9/alipay.system.oauth.token type SystemOauthToken struct { + AuxParam AppAuthToken string `json:"-"` // 可选 GrantType string `json:"-"` // 值为 authorization_code 时,代表用code换取;值为refresh_token时,代表用refresh_token换取 Code string `json:"-"` @@ -49,6 +50,7 @@ type SystemOauthTokenRsp struct { // UserInfoShare 支付宝会员授权信息查询接口请求参数 https://docs.open.alipay.com/api_2/alipay.user.info.share type UserInfoShare struct { + AuxParam AppAuthToken string `json:"-"` // 可选 AuthToken string `json:"-"` // 是 } @@ -82,6 +84,7 @@ type UserInfoShareRsp struct { // OpenAuthTokenApp 换取应用授权令牌请求参数 https://docs.open.alipay.com/api_9/alipay.open.auth.token.app type OpenAuthTokenApp struct { + AuxParam GrantType string `json:"grant_type"` // 值为 authorization_code 时,代表用code换取;值为refresh_token时,代表用refresh_token换取 Code string `json:"code"` RefreshToken string `json:"refresh_token"` @@ -120,6 +123,7 @@ type OpenAuthToken struct { // OpenAuthTokenAppQuery 查询某个应用授权AppAuthToken的授权信息 https://opendocs.alipay.com/isv/04hgcp?pathHash=7ea21afe type OpenAuthTokenAppQuery struct { + AuxParam AppAuthToken string `json:"app_auth_token"` // 必选 应用授权令牌 } @@ -145,6 +149,7 @@ type OpenAuthTokenAppQueryRsp struct { // AccountAuth 支付宝登录时, 帮客户端做参数签名, 返回授权请求信息字串接口请求参数 https://docs.open.alipay.com/218/105327/ type AccountAuth struct { + AuxParam Pid string `json:"pid"` TargetId string `json:"target_id"` AuthType string `json:"auth_type"` @@ -169,6 +174,7 @@ func (this AccountAuth) Params() map[string]string { // OpenAuthAppAuthInviteCreate ISV向商户发起应用授权邀约 https://opendocs.alipay.com/isv/06evao?pathHash=f46ecafa type OpenAuthAppAuthInviteCreate struct { + AuxParam AppAuthToken string `json:"-"` // 可选 AuthAppId string `json:"auth_app_id"` // 必选 指定授权的商户appid RedirectURL string `json:"redirect_url"` // 可选 授权回调地址,用于返回应用授权码 diff --git a/bill_type.go b/bill_type.go index e0a3e9b..6c777ee 100644 --- a/bill_type.go +++ b/bill_type.go @@ -2,6 +2,7 @@ package alipay // BillDownloadURLQuery 查询对账单下载地址接口请求参数 https://docs.open.alipay.com/api_15/alipay.data.dataservice.bill.downloadurl.query type BillDownloadURLQuery struct { + AuxParam AppAuthToken string `json:"-"` // 可选 BillType string `json:"bill_type"` // 必选 账单类型,商户通过接口或商户经开放平台授权后其所属服务商通过接口可以获取以下账单类型:trade、signcustomer;trade指商户基于支付宝交易收单的业务账单;signcustomer是指基于商户支付宝余额收入及支出等资金变动的帐务账单。 BillDate string `json:"bill_date"` // 必选 账单时间:日账单格式为yyyy-MM-dd,最早可下载2016年1月1日开始的日账单;月账单格式为yyyy-MM,最早可下载2016年1月开始的月账单。 @@ -19,6 +20,7 @@ func (this BillDownloadURLQuery) Params() map[string]string { // BillAccountLogQuery 查询账户账务明细接口请求参数 https://opendocs.alipay.com/apis/api_15/alipay.data.bill.accountlog.query type BillAccountLogQuery struct { + AuxParam AppAuthToken string `json:"-"` // 可选 StartTime string `json:"start_time"` // 账务流水创建时间的起始范围 2019-01-01 00:00:00 EndTime string `json:"end_time"` // 账务流水创建时间的结束范围。与起始时间间隔不超过31天。查询结果为起始时间至结束时间的左闭右开区间 2019-01-02 00:00:00 @@ -78,6 +80,7 @@ type BillDownloadURLQueryRsp struct { // BillBalanceQuery 支付宝商家账户当前余额查询 https://opendocs.alipay.com/apis/api_15/alipay.data.bill.balance.query type BillBalanceQuery struct { + AuxParam AppAuthToken string `json:"-"` // 可选 } diff --git a/certify_type.go b/certify_type.go index 4fd66ed..c33fa93 100644 --- a/certify_type.go +++ b/certify_type.go @@ -11,6 +11,7 @@ const ( // UserCertifyOpenInitialize 身份认证初始化服务接口请求参数 https://docs.open.alipay.com/api_2/alipay.user.certify.open.initialize type UserCertifyOpenInitialize struct { + AuxParam AppAuthToken string `json:"-"` // 可选 OuterOrderNo string `json:"outer_order_no"` // 必选 商户请求的唯一标识,商户要保证其唯一性,值为32位长度的字母数字组合。建议:前面几位字符是商户自定义的简称,中间可以使用一段时间,后段可以使用一个随机或递增序列 BizCode CertifyBizCode `json:"biz_code"` // 必选 认证场景码。入参支持的认证场景码和商户签约的认证场景相关,取值如下: FACE:多因子人脸认证 CERT_PHOTO:多因子证照认证 CERT_PHOTO_FACE :多因子证照和人脸认证 SMART_FACE:多因子快捷认证 @@ -48,6 +49,7 @@ type UserCertifyOpenInitializeRsp struct { // UserCertifyOpenCertify 身份认证开始认证接口请求参数 https://docs.open.alipay.com/api_2/alipay.user.certify.open.certify type UserCertifyOpenCertify struct { + AuxParam AppAuthToken string `json:"-"` // 可选 CertifyId string `json:"certify_id"` // 必选 本次申请操作的唯一标识,由开放认证初始化接口调用后生成,后续的操作都需要用到 } @@ -69,6 +71,7 @@ type UserCertifyOpenCertifyRsp struct { // UserCertifyOpenQuery 身份认证记录查询接口请求参数 https://docs.open.alipay.com/api_2/alipay.user.certify.open.query/ type UserCertifyOpenQuery struct { + AuxParam AppAuthToken string `json:"-"` // 可选 CertifyId string `json:"certify_id"` // 必选 本次申请操作的唯一标识,由开放认证初始化接口调用后生成,后续的操作都需要用到 } @@ -93,6 +96,7 @@ type UserCertifyOpenQueryRsp struct { // UserCertDocCertVerifyPreConsult 实名证件信息比对验证预咨询接口请求参数 https://opendocs.alipay.com/apis/api_2/alipay.user.certdoc.certverify.preconsult type UserCertDocCertVerifyPreConsult struct { + AuxParam AppAuthToken string `json:"-"` // 可选 UserName string `json:"user_name"` // 真实姓名 CertType string `json:"cert_type"` // 证件类型。暂仅支持 IDENTITY_CARD (身份证)。 ID @@ -120,6 +124,7 @@ type UserCertDocCertVerifyPreConsultRsp struct { // UserCertDocCertVerifyConsult 实名证件信息比对验证咨询接口请求参数 https://opendocs.alipay.com/apis/api_2/alipay.user.certdoc.certverify.consult type UserCertDocCertVerifyConsult struct { + AuxParam AppAuthToken string `json:"-"` // 可选 VerifyId string `json:"verify_id"` // 信息校验验证ID。通过alipay.user.certdoc.certverify.preconsult(实名证件信息比对验证预咨询)接口获取 } diff --git a/examples/go.mod b/examples/go.mod index 278c893..27ee082 100644 --- a/examples/go.mod +++ b/examples/go.mod @@ -7,6 +7,7 @@ require ( github.com/smartwalle/ncrypto v1.0.2 // indirect github.com/smartwalle/nsign v1.0.8 github.com/smartwalle/xid v1.0.6 + github.com/smartwalle/ngx v1.0.6 ) replace github.com/smartwalle/alipay/v3 => ../ diff --git a/examples/go.sum b/examples/go.sum index 2675795..016a906 100644 --- a/examples/go.sum +++ b/examples/go.sum @@ -2,6 +2,8 @@ github.com/smartwalle/ncrypto v1.0.1 h1:CVe/h/srt6knLiF/9V5OnDDhguskWR801meHizq7 github.com/smartwalle/ncrypto v1.0.1/go.mod h1:Dwlp6sfeNaPMnOxMNayMTacvC5JGEVln3CVdiVDgbBk= github.com/smartwalle/ncrypto v1.0.2 h1:pTAhCqtPCMhpOwFXX+EcMdR6PNzruBNoGQrN2S1GbGI= github.com/smartwalle/ncrypto v1.0.2/go.mod h1:Dwlp6sfeNaPMnOxMNayMTacvC5JGEVln3CVdiVDgbBk= +github.com/smartwalle/ngx v1.0.6 h1:JPNqNOIj+2nxxFtrSkJO+vKJfeNUSEQueck/Wworjps= +github.com/smartwalle/ngx v1.0.6/go.mod h1:mx/nz2Pk5j+RBs7t6u6k22MPiBG/8CtOMpCnALIG8Y0= github.com/smartwalle/nsign v0.0.1 h1:fpEwoThIjr1JRPqz5hEwbH5ADX/so6G/zcwvj0ywYyM= github.com/smartwalle/nsign v0.0.1/go.mod h1:eY6I4CJlyNdVMP+t6z1H6Jpd4m5/V+8xi44ufSTxXgc= github.com/smartwalle/nsign v1.0.8 h1:78KWtwKPrdt4Xsn+tNEBVxaTLIJBX9YRX0ZSrMUeuHo= diff --git a/fund_type.go b/fund_type.go index 1ba51df..ecf6010 100644 --- a/fund_type.go +++ b/fund_type.go @@ -2,6 +2,7 @@ package alipay // FundTransToAccountTransfer 单笔转账到支付宝账户接口请求参数 https://opendocs.alipay.com/apis/api_33/alipay.fund.trans.toaccount.transfer type FundTransToAccountTransfer struct { + AuxParam AppAuthToken string `json:"-"` // 可选 OutBizNo string `json:"out_biz_no"` // 必选 商户转账唯一订单号 PayeeType string `json:"payee_type"` // 必选 收款方账户类型,"ALIPAY_LOGONID":支付宝帐号 @@ -32,6 +33,7 @@ type FundTransToAccountTransferRsp struct { // FundTransOrderQuery 查询转账订单接口请求参数 https://docs.open.alipay.com/api_28/alipay.fund.trans.order.query/ type FundTransOrderQuery struct { + AuxParam AppAuthToken string `json:"-"` // 可选 OutBizNo string `json:"out_biz_no,omitempty"` // 与 OrderId 二选一 OrderId string `json:"order_id,omitempty"` // 与 OutBizNo 二选一 @@ -62,6 +64,7 @@ type FundTransOrderQueryRsp struct { // FundAuthOrderVoucherCreate 资金授权发码接口请求参数 https://docs.open.alipay.com/api_28/alipay.fund.auth.order.voucher.create/ type FundAuthOrderVoucherCreate struct { + AuxParam NotifyURL string `json:"-"` AppAuthToken string `json:"-"` // 可选 OutOrderNo string `json:"out_order_no"` // 必选, 商户授权资金订单号,创建后不能修改,需要保证在商户端不重复。 @@ -101,6 +104,7 @@ type FundAuthOrderVoucherCreateRsp struct { // FundAuthOrderFreeze 资金授权冻结接口请求参数 https://docs.open.alipay.com/api_28/alipay.fund.auth.order.freeze/ type FundAuthOrderFreeze struct { + AuxParam NotifyURL string `json:"-"` AppAuthToken string `json:"-"` // 可选 AuthCode string `json:"auth_code"` // 必选, 支付授权码,25~30开头的长度为16~24位的数字,实际字符串长度以开发者获取的付款码长度为准 @@ -142,6 +146,7 @@ type FundAuthOrderFreezeRsp struct { // FundAuthOrderUnfreeze 资金授权解冻接口请求参数 https://docs.open.alipay.com/api_28/alipay.fund.auth.order.unfreeze/ type FundAuthOrderUnfreeze struct { + AuxParam NotifyURL string `json:"-"` AuthNo string `json:"auth_no"` // 必选,支付宝资金授权订单号,支付宝冻结时返回的交易号,数字格式 2016101210002001810258115912 AppAuthToken string `json:"-"` // 可选 @@ -178,6 +183,7 @@ type FundAuthOrderUnfreezeRsp struct { // FundAuthOperationCancel 资金授权撤销接口请求参数 https://docs.open.alipay.com/api_28/alipay.fund.auth.operation.cancel/ type FundAuthOperationCancel struct { + AuxParam NotifyURL string `json:"-"` AppAuthToken string `json:"-"` // 可选 AuthNo string `json:"auth_no,omitempty"` // 特殊可选, 支付宝授权资金订单号,与商户的授权资金订单号不能同时为空,二者都存在时,以支付宝资金授权订单号为准,该参数与支付宝授权资金操作流水号配对使用。 @@ -210,6 +216,7 @@ type FundAuthOperationCancelRsp struct { // FundAuthOperationDetailQuery 资金授权操作查询接口请求参数 https://docs.open.alipay.com/api_28/alipay.fund.auth.operation.detail.query/ type FundAuthOperationDetailQuery struct { + AuxParam AppAuthToken string `json:"-"` // 可选 AuthNo string `json:"auth_no"` // 特殊可选, 支付宝授权资金订单号,与商户的授权资金订单号不能同时为空,二者都存在时,以支付宝资金授权订单号为准,该参数与支付宝授权资金操作流水号配对使用。 OutOrderNo string `json:"out_order_no"` // 特殊可选, 商户的授权资金订单号,与支付宝的授权资金订单号不能同时为空,二者都存在时,以支付宝的授权资金订单号为准,该参数与商户的授权资金操作流水号配对使用。 @@ -271,6 +278,7 @@ type FundAuthOperationDetailQueryRsp struct { // FundAuthOrderAppFreeze 线上资金授权冻结接口请求参数 https://docs.open.alipay.com/api_28/alipay.fund.auth.order.app.freeze type FundAuthOrderAppFreeze struct { + AuxParam NotifyURL string `json:"-"` AppAuthToken string `json:"-"` // 可选 OutOrderNo string `json:"out_order_no"` // 必选, 商户授权资金订单号 ,不能包含除中文、英文、数字以外的字符,创建后不能修改,需要保证在商户端不重复。 @@ -314,6 +322,7 @@ type FundAuthOrderAppFreezeRsp struct { // FundTransUniTransfer 单笔转账接口请求参数 https://docs.open.alipay.com/api_28/alipay.fund.trans.uni.transfer/ type FundTransUniTransfer struct { + AuxParam AppAuthToken string `json:"-"` // 可选 OutBizNo string `json:"out_biz_no"` // 必选 商户端的唯一订单号,对于同一笔转账请求,商户需保证该订单号唯一。 TransAmount string `json:"trans_amount"` // 必选 订单总金额,单位为元,精确到小数点后两位,STD_RED_PACKET 产品取值范围[0.01,100000000]; TRANS_ACCOUNT_NO_PWD产品取值范围[0.1,100000000] @@ -354,6 +363,7 @@ type FundTransUniTransferRsp struct { // FundTransCommonQuery 转账业务单据查询接口请求参数 https://docs.open.alipay.com/api_28/alipay.fund.trans.common.query/ type FundTransCommonQuery struct { + AuxParam AppAuthToken string `json:"-"` // 可选 ProductCode string `json:"product_code"` // 必选 业务产品码, 收发现金红包固定为:STD_RED_PACKET; 单笔无密转账到支付宝账户固定为:TRANS_ACCOUNT_NO_PWD; 单笔无密转账到银行卡固定为:TRANS_BANKCARD_NO_PWD BizScene string `json:"biz_scene"` // 必选 描述特定的业务场景,可传的参数如下: PERSONAL_COLLECTION:C2C现金红包-领红包; DIRECT_TRANSFER:B2C现金红包、单笔无密转账到支付宝/银行卡 @@ -391,6 +401,7 @@ type FundTransCommonQueryRsp struct { // FundAccountQuery 支付宝资金账户资产查询接口请求参数 https://docs.open.alipay.com/api_28/alipay.fund.account.query type FundAccountQuery struct { + AuxParam AppAuthToken string `json:"-"` // 可选 AliPayUserId string `json:"alipay_user_id"` // 必选 蚂蚁统一会员ID AccountType string `json:"account_type"` // 特殊可选 查询的账号类型,如查询托管账户值为TRUSTEESHIP_ACCOUNT,查询余额账户值为ACCTRANS_ACCOUNT。查询余额账户时必填。 @@ -415,6 +426,7 @@ type FundAccountQueryRsp struct { // FundTransAppPay https://opendocs.alipay.com/open/03rbyf https://opendocs.alipay.com/open/03rbyf type FundTransAppPay struct { + AuxParam AppAuthToken string `json:"-"` // 可选 OutBizNo string `json:"out_biz_no"` // 必选 商户端的唯一订单号,对于同一笔转账请求,商户需保证该订单号唯一。 TransAmount string `json:"trans_amount"` // 必选 订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,9999999999999.99] diff --git a/go.mod b/go.mod index 6474304..d4908b5 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,7 @@ module github.com/smartwalle/alipay/v3 require ( github.com/smartwalle/ncrypto v1.0.2 github.com/smartwalle/nsign v1.0.8 + github.com/smartwalle/ngx v1.0.6 ) go 1.12 diff --git a/go.sum b/go.sum index f18f19b..488818d 100644 --- a/go.sum +++ b/go.sum @@ -4,6 +4,8 @@ github.com/smartwalle/ncrypto v1.0.1 h1:CVe/h/srt6knLiF/9V5OnDDhguskWR801meHizq7 github.com/smartwalle/ncrypto v1.0.1/go.mod h1:Dwlp6sfeNaPMnOxMNayMTacvC5JGEVln3CVdiVDgbBk= github.com/smartwalle/ncrypto v1.0.2 h1:pTAhCqtPCMhpOwFXX+EcMdR6PNzruBNoGQrN2S1GbGI= github.com/smartwalle/ncrypto v1.0.2/go.mod h1:Dwlp6sfeNaPMnOxMNayMTacvC5JGEVln3CVdiVDgbBk= +github.com/smartwalle/ngx v1.0.6 h1:JPNqNOIj+2nxxFtrSkJO+vKJfeNUSEQueck/Wworjps= +github.com/smartwalle/ngx v1.0.6/go.mod h1:mx/nz2Pk5j+RBs7t6u6k22MPiBG/8CtOMpCnALIG8Y0= github.com/smartwalle/nsign v0.0.1 h1:fpEwoThIjr1JRPqz5hEwbH5ADX/so6G/zcwvj0ywYyM= github.com/smartwalle/nsign v0.0.1/go.mod h1:eY6I4CJlyNdVMP+t6z1H6Jpd4m5/V+8xi44ufSTxXgc= github.com/smartwalle/nsign v1.0.8 h1:78KWtwKPrdt4Xsn+tNEBVxaTLIJBX9YRX0ZSrMUeuHo= diff --git a/trade_refund_type.go b/trade_refund_type.go index 49f0127..61aad4e 100644 --- a/trade_refund_type.go +++ b/trade_refund_type.go @@ -2,6 +2,7 @@ package alipay // TradeRefundAsync 统一收单交易退款接口(异步)请求参数 https://opendocs.alipay.com/pre-apis/api_pre/alipay.trade.refund.apply type TradeRefundAsync struct { + AuxParam AppAuthToken string `json:"-"` // 可选 NotifyURL string `json:"-"` // 可选 OutTradeNo string `json:"out_trade_no,omitempty"` // 与 TradeNo 二选一 diff --git a/trade_type.go b/trade_type.go index 3088bc9..98c296e 100644 --- a/trade_type.go +++ b/trade_type.go @@ -3,6 +3,7 @@ package alipay import "encoding/json" type Trade struct { + AuxParam NotifyURL string `json:"-"` ReturnURL string `json:"-"` AppAuthToken string `json:"-"` // 可选 @@ -102,6 +103,7 @@ const ( // TradeQuery 统一收单线下交易查询接口请求参数 https://docs.open.alipay.com/api_1/alipay.trade.query/ type TradeQuery struct { + AuxParam AppAuthToken string `json:"-"` // 可选 OutTradeNo string `json:"out_trade_no,omitempty"` // 订单支付时传入的商户订单号, 与 TradeNo 二选一 TradeNo string `json:"trade_no,omitempty"` // 支付宝交易号 @@ -230,6 +232,7 @@ type TradeSettleDetail struct { // TradeClose 统一收单交易关闭接口请求参数 https://docs.open.alipay.com/api_1/alipay.trade.close/ type TradeClose struct { + AuxParam AppAuthToken string `json:"-"` // 可选 NotifyURL string `json:"-"` // 可选 OutTradeNo string `json:"out_trade_no,omitempty"` // 与 TradeNo 二选一 @@ -257,6 +260,7 @@ type TradeCloseRsp struct { // TradeRefund 统一收单交易退款接口请求参数 https://docs.open.alipay.com/api_1/alipay.trade.refund/ type TradeRefund struct { + AuxParam AppAuthToken string `json:"-"` // 可选 OutTradeNo string `json:"out_trade_no,omitempty"` // 与 TradeNo 二选一 TradeNo string `json:"trade_no,omitempty"` // 与 OutTradeNo 二选一 @@ -329,6 +333,7 @@ type RefundSubFeeDetail struct { // TradeFastPayRefundQuery 统一收单交易退款查询接口请求参数 https://docs.open.alipay.com/api_1/alipay.trade.fastpay.refund.query type TradeFastPayRefundQuery struct { + AuxParam AppAuthToken string `json:"-"` // 可选 OutTradeNo string `json:"out_trade_no,omitempty"` // 与 TradeNo 二选一 TradeNo string `json:"trade_no,omitempty"` // 与 OutTradeNo 二选一 @@ -384,6 +389,7 @@ type DepositBackInfo struct { // TradeOrderSettle 统一收单交易结算接口请求参数 https://docs.open.alipay.com/api_1/alipay.trade.order.settle type TradeOrderSettle struct { + AuxParam AppAuthToken string `json:"-"` // 可选 OutRequestNo string `json:"out_request_no"` // 必须 结算请求流水号 开发者自行生成并保证唯一性 TradeNo string `json:"trade_no"` // 必须 支付宝订单号 @@ -578,6 +584,7 @@ type TradePreCreateRsp struct { // TradeCancel 统一收单交易撤销接口请求参数 https://docs.open.alipay.com/api_1/alipay.trade.cancel/ type TradeCancel struct { + AuxParam AppAuthToken string `json:"-"` // 可选 NotifyURL string `json:"-"` // 可选 @@ -607,6 +614,7 @@ type TradeCancelRsp struct { // TradeOrderInfoSync 支付宝订单信息同步接口请求参数 https://docs.open.alipay.com/api_1/alipay.trade.orderinfo.sync/ type TradeOrderInfoSync struct { + AuxParam AppAuthToken string `json:"-"` // 可选 OutRequestNo string `json:"out_request_no"` // 必选 标识一笔交易多次请求,同一笔交易多次信息同步时需要保证唯一 BizType string `json:"biz_type"` // 必选 交易信息同步对应的业务类型,具体值与支付宝约定;信用授权场景下传CREDIT_AUTH @@ -634,6 +642,7 @@ type TradeOrderInfoSyncRsp struct { // TradeMergePreCreate 统一收单合并支付预创建接口请求参数 https://opendocs.alipay.com/open/028xr9 type TradeMergePreCreate struct { + AuxParam NotifyURL string `json:"-"` // 可选 AppAuthToken string `json:"-"` // 可选 @@ -716,6 +725,7 @@ type PreOrderResult struct { // TradeAppMergePay App合并支付接口 https://opendocs.alipay.com/open/028py8 type TradeAppMergePay struct { + AuxParam AppAuthToken string `json:"-"` // 可选 PreOrderNo string `json:"pre_order_no"` // 必选 预下单号。通过 alipay.trade.merge.precreate(统一收单合并支付预创建接口)返回。 } diff --git a/user_type.go b/user_type.go index 023b114..b736f11 100644 --- a/user_type.go +++ b/user_type.go @@ -44,6 +44,7 @@ type PeriodRuleParams struct { // AgreementPageSign 支付宝个人协议页面签约接口请求参数 https://docs.open.alipay.com/api_2/alipay.user.agreement.page.sign type AgreementPageSign struct { + AuxParam AppAuthToken string `json:"-"` ReturnURL string `json:"-"` NotifyURL string `json:"-"` @@ -99,6 +100,7 @@ func (this AgreementPageSign) Params() map[string]string { // AgreementQuery 支付宝个人代扣协议查询接口请求参数 https://opendocs.alipay.com/open/02fkao?scene=8837b4183390497f84bb53783b488ecc type AgreementQuery struct { + AuxParam AppAuthToken string `json:"-"` PersonalProductCode string `json:"personal_product_code,omitempty"` // 协议产品码,商户和支付宝签约时确定,商户可咨询技术支持 AlipayUserId string `json:"alipay_user_id,omitempty"` // 用户的支付宝账号对应的支付宝唯一用户号,以2088开头的16位纯数字组成;本参数与alipay_logon_id不可同时为空,若都填写,则以本参数为准,优先级高于alipay_logon_id @@ -145,6 +147,7 @@ func (this AgreementQuery) Params() map[string]string { // AgreementUnsign 支付宝个人代扣协议解约接口请求参数 https://docs.open.alipay.com/api_2/alipay.user.agreement.unsign type AgreementUnsign struct { + AuxParam AppAuthToken string `json:"-"` NotifyURL string `json:"-"` AlipayUserId string `json:"alipay_user_id,omitempty"` // 用户的支付宝账号对应的支付宝唯一用户号,以2088开头的16位纯数字组成;本参数与alipay_logon_id不可同时为空,若都填写,则以本参数为准,优先级高于alipay_logon_id @@ -176,6 +179,7 @@ type AgreementUnsignRsp struct { // AgreementExecutionPlanModify 周期性扣款协议执行计划修改接口请求参数 https://docs.open.alipay.com/api_2/alipay.user.agreement.executionplan.modify type AgreementExecutionPlanModify struct { + AuxParam AppAuthToken string `json:"-"` NotifyURL string `json:"-"` AgreementNo string `json:"agreement_no,omitempty"` // 支付宝系统中用以唯一标识用户签约记录的编号(用户签约成功后的协议号) diff --git a/wap_type.go b/wap_type.go index a093091..eb24857 100644 --- a/wap_type.go +++ b/wap_type.go @@ -22,6 +22,7 @@ func (this TradeWapPay) Params() map[string]string { // TradeWapMergePay 无线Wap合并支付接口2.0 https://opendocs.alipay.com/open/028xra type TradeWapMergePay struct { + AuxParam AppAuthToken string `json:"-"` // 可选 PreOrderNo string `json:"pre_order_no"` // 必选 预下单号。通过 alipay.trade.merge.precreate(统一收单合并支付预创建接口)返回。 }