From 805418866cd1638fdea88999f70d62444995ce6a Mon Sep 17 00:00:00 2001 From: Jerry <85411418@qq.com> Date: Sat, 13 Apr 2024 23:43:27 +0800 Subject: [PATCH] update --- alipay/marketing_api.go | 108 +++++++++++++++++++++++- alipay/model_market.go | 177 ++++++++++++++++++++++++++++++++------- alipay/model_smilepay.go | 41 +++++++++ alipay/request.go | 4 +- alipay/smilepay.go | 51 +++++++++++ constant.go | 2 +- doc/alipay.md | 149 ++++++++++++++++++++++---------- examples/main.go | 3 +- go.mod | 4 +- go.sum | 8 +- release_note.txt | 20 +++++ 11 files changed, 484 insertions(+), 83 deletions(-) create mode 100644 alipay/model_smilepay.go create mode 100644 alipay/smilepay.go diff --git a/alipay/marketing_api.go b/alipay/marketing_api.go index 04cee40d..b78e7ec1 100644 --- a/alipay/marketing_api.go +++ b/alipay/marketing_api.go @@ -4,6 +4,7 @@ import ( "context" "encoding/json" "fmt" + "strings" "github.com/go-pay/gopay" ) @@ -138,7 +139,6 @@ func (a *Client) MarketingCampaignCashDetailQuery(ctx context.Context, bm gopay. if err = json.Unmarshal(bs, aliRsp); err != nil || aliRsp.Response == nil { return nil, fmt.Errorf("[%w], bytes: %s", gopay.UnmarshalErr, string(bs)) } - fmt.Println(err) if err = bizErrCheck(aliRsp.Response.ErrorResponse); err != nil { return aliRsp, err } @@ -146,3 +146,109 @@ func (a *Client) MarketingCampaignCashDetailQuery(ctx context.Context, bm gopay. aliRsp.SignData = signData return aliRsp, a.autoVerifySignByCert(aliRsp.Sign, signData, signDataErr) } + +// alipay.marketing.activity.delivery.changed(推广计划状态变更消息) +// 文档地址:https://opendocs.alipay.com/open/85544608_alipay.marketing.activity.delivery.changed +func (a *Client) MarketingActivityDeliveryChanged(ctx context.Context, bm gopay.BodyMap) (success bool, err error) { + err = bm.CheckEmptyError("event_time", "delivery_id", "delivery_status", "delivery_error_msg", "delivery_booth_code") + if err != nil { + return false, err + } + bs, err := a.doAliPay(ctx, bm, "alipay.marketing.activity.delivery.changed") + if err != nil { + return false, err + } + if strings.Contains(string(bs), "success") { + return true, nil + } + return +} + +// alipay.marketing.activity.delivery.stop(停止推广计划) +// 文档地址:https://opendocs.alipay.com/open/39c69f03_alipay.marketing.activity.delivery.stop +func (a *Client) MarketingActivityDeliveryStop(ctx context.Context, bm gopay.BodyMap) (aliRsp *MarketingActivityDeliveryStopRsp, err error) { + err = bm.CheckEmptyError("delivery_id", "out_biz_no", "merchant_access_mode") + if err != nil { + return nil, err + } + var bs []byte + if bs, err = a.doAliPay(ctx, bm, "alipay.marketing.activity.delivery.stop"); err != nil { + return nil, err + } + aliRsp = new(MarketingActivityDeliveryStopRsp) + if err = json.Unmarshal(bs, aliRsp); err != nil || aliRsp.Response == nil { + return nil, fmt.Errorf("[%w], bytes: %s", gopay.UnmarshalErr, string(bs)) + } + if err = bizErrCheck(aliRsp.Response.ErrorResponse); err != nil { + return aliRsp, err + } + signData, signDataErr := a.getSignData(bs, aliRsp.AlipayCertSn) + aliRsp.SignData = signData + return aliRsp, a.autoVerifySignByCert(aliRsp.Sign, signData, signDataErr) +} + +// alipay.marketing.activity.delivery.query(查询推广计划) +// 文档地址:https://opendocs.alipay.com/open/69c6d6c2_alipay.marketing.activity.delivery.query +func (a *Client) MarketingActivityDeliveryQuery(ctx context.Context, bm gopay.BodyMap) (aliRsp *MarketingActivityDeliveryQueryRsp, err error) { + err = bm.CheckEmptyError("delivery_id", "merchant_access_mode") + if err != nil { + return nil, err + } + var bs []byte + if bs, err = a.doAliPay(ctx, bm, "alipay.marketing.activity.delivery.query"); err != nil { + return nil, err + } + aliRsp = new(MarketingActivityDeliveryQueryRsp) + if err = json.Unmarshal(bs, aliRsp); err != nil || aliRsp.Response == nil { + return nil, fmt.Errorf("[%w], bytes: %s", gopay.UnmarshalErr, string(bs)) + } + if err = bizErrCheck(aliRsp.Response.ErrorResponse); err != nil { + return aliRsp, err + } + signData, signDataErr := a.getSignData(bs, aliRsp.AlipayCertSn) + aliRsp.SignData = signData + return aliRsp, a.autoVerifySignByCert(aliRsp.Sign, signData, signDataErr) +} + +// alipay.marketing.activity.delivery.create(创建推广计划) +// 文档地址:https://opendocs.alipay.com/open/47498bf2_alipay.marketing.activity.delivery.create +func (a *Client) MarketingActivityDeliveryCreate(ctx context.Context, bm gopay.BodyMap) (aliRsp *MarketingActivityDeliveryCreateRsp, err error) { + err = bm.CheckEmptyError("delivery_booth_code", "out_biz_no", "delivery_base_info", "delivery_play_config", "delivery_target_rule", "merchant_access_mode") + if err != nil { + return nil, err + } + var bs []byte + if bs, err = a.doAliPay(ctx, bm, "alipay.marketing.activity.delivery.create"); err != nil { + return nil, err + } + aliRsp = new(MarketingActivityDeliveryCreateRsp) + if err = json.Unmarshal(bs, aliRsp); err != nil || aliRsp.Response == nil { + return nil, fmt.Errorf("[%w], bytes: %s", gopay.UnmarshalErr, string(bs)) + } + if err = bizErrCheck(aliRsp.Response.ErrorResponse); err != nil { + return aliRsp, err + } + signData, signDataErr := a.getSignData(bs, aliRsp.AlipayCertSn) + aliRsp.SignData = signData + return aliRsp, a.autoVerifySignByCert(aliRsp.Sign, signData, signDataErr) +} + +// alipay.marketing.material.image.upload(营销图片资源上传接口) +// 文档地址:https://opendocs.alipay.com/open/389b24b6_alipay.marketing.material.image.upload +func (a *Client) MarketingMaterialImageUpload(ctx context.Context, bm gopay.BodyMap, file *gopay.File) (aliRsp *MarketingMaterialImageUploadRsp, err error) { + var bs []byte + if bs, err = a.FileRequest(ctx, bm, file, "alipay.marketing.material.image.upload"); err != nil { + return nil, err + } + aliRsp = new(MarketingMaterialImageUploadRsp) + if err = json.Unmarshal(bs, aliRsp); err != nil { + return nil, err + } + if aliRsp.Response != nil && aliRsp.Response.Code != "10000" { + info := aliRsp.Response + return aliRsp, fmt.Errorf(`{"code":"%s","msg":"%s","sub_code":"%s","sub_msg":"%s"}`, info.Code, info.Msg, info.SubCode, info.SubMsg) + } + signData, signDataErr := a.getSignData(bs, aliRsp.AlipayCertSn) + aliRsp.SignData = signData + return aliRsp, a.autoVerifySignByCert(aliRsp.Sign, signData, signDataErr) +} diff --git a/alipay/model_market.go b/alipay/model_market.go index d25dd7b0..f03a6fb9 100644 --- a/alipay/model_market.go +++ b/alipay/model_market.go @@ -7,13 +7,6 @@ type MarketingCampaignCashCreateRsp struct { Sign string `json:"sign"` } -type MarketingCampaignCashCreate struct { - ErrorResponse - CrowdNo string `json:"crowd_no"` - PayURL string `json:"pay_url"` - OriginCrowdNo string `json:"origin_crowd_no"` -} - type MarketingCampaignCashTriggerRsp struct { Response *MarketingCampaignCashTrigger `json:"alipay_marketing_campaign_cash_trigger_response"` AlipayCertSn string `json:"alipay_cert_sn,omitempty"` @@ -21,6 +14,64 @@ type MarketingCampaignCashTriggerRsp struct { Sign string `json:"sign"` } +type MarketingCampaignCashStatusModifyRsp struct { + Response *MarketingCampaignCashStatusModify `json:"alipay_marketing_campaign_cash_status_modify_response"` + AlipayCertSn string `json:"alipay_cert_sn,omitempty"` + SignData string `json:"-"` + Sign string `json:"sign"` +} + +type MarketingCampaignCashListQueryRsp struct { + Response *MarketingCampaignCashListQuery `json:"alipay_marketing_campaign_cash_list_query_response"` + AlipayCertSn string `json:"alipay_cert_sn,omitempty"` + SignData string `json:"-"` + Sign string `json:"sign"` +} + +type MarketingCampaignCashDetailQueryRsp struct { + Response *MarketingCampaignCashDetailQuery `json:"alipay_marketing_campaign_cash_detail_query_response"` + AlipayCertSn string `json:"alipay_cert_sn,omitempty"` + SignData string `json:"-"` + Sign string `json:"sign"` +} + +type MarketingActivityDeliveryStopRsp struct { + Response *MarketingActivityDeliveryStop `json:"alipay_marketing_activity_delivery_stop_response"` + AlipayCertSn string `json:"alipay_cert_sn,omitempty"` + SignData string `json:"-"` + Sign string `json:"sign"` +} + +type MarketingActivityDeliveryQueryRsp struct { + Response *MarketingActivityDeliveryQuery `json:"alipay_marketing_activity_delivery_query_response"` + AlipayCertSn string `json:"alipay_cert_sn,omitempty"` + SignData string `json:"-"` + Sign string `json:"sign"` +} + +type MarketingActivityDeliveryCreateRsp struct { + Response *MarketingActivityDeliveryCreate `json:"alipay_marketing_activity_delivery_create_response"` + AlipayCertSn string `json:"alipay_cert_sn,omitempty"` + SignData string `json:"-"` + Sign string `json:"sign"` +} + +type MarketingMaterialImageUploadRsp struct { + Response *MarketingMaterialImageUpload `json:"alipay_marketing_material_image_upload_response"` + AlipayCertSn string `json:"alipay_cert_sn,omitempty"` + SignData string `json:"-"` + Sign string `json:"sign"` +} + +// =========================================================分割========================================================= + +type MarketingCampaignCashCreate struct { + ErrorResponse + CrowdNo string `json:"crowd_no"` + PayURL string `json:"pay_url"` + OriginCrowdNo string `json:"origin_crowd_no"` +} + type MarketingCampaignCashTrigger struct { ErrorResponse TriggerResult string `json:"trigger_result"` @@ -35,24 +86,10 @@ type MarketingCampaignCashTrigger struct { OutBizNo string `json:"out_biz_no"` } -type MarketingCampaignCashStatusModifyRsp struct { - Response *MarketingCampaignCashStatusModify `json:"alipay_marketing_campaign_cash_status_modify_response"` - AlipayCertSn string `json:"alipay_cert_sn,omitempty"` - SignData string `json:"-"` - Sign string `json:"sign"` -} - type MarketingCampaignCashStatusModify struct { ErrorResponse } -type MarketingCampaignCashListQueryRsp struct { - Response *MarketingCampaignCashListQuery `json:"alipay_marketing_campaign_cash_list_query_response"` - AlipayCertSn string `json:"alipay_cert_sn,omitempty"` - SignData string `json:"-"` - Sign string `json:"sign"` -} - type MarketingCampaignCashListQuery struct { ErrorResponse PageSize string `json:"page_size"` @@ -68,13 +105,6 @@ type CashCampaignInfo struct { CouponName string `json:"coupon_name"` } -type MarketingCampaignCashDetailQueryRsp struct { - Response *MarketingCampaignCashDetailQuery `json:"alipay_marketing_campaign_cash_detail_query_response"` - AlipayCertSn string `json:"alipay_cert_sn,omitempty"` - SignData string `json:"-"` - Sign string `json:"sign"` -} - type MarketingCampaignCashDetailQuery struct { ErrorResponse CrowdNo string `json:"crowd_no"` @@ -90,3 +120,94 @@ type MarketingCampaignCashDetailQuery struct { OriginCrowdNo string `json:"origin_crowd_no"` CampStatus string `json:"camp_status"` } + +type MarketingActivityDeliveryStop struct { + ErrorResponse + DeliveryId string `json:"delivery_id"` +} + +type MarketingActivityDeliveryQuery struct { + ErrorResponse + DeliveryId string `json:"delivery_id"` + DeliveryStatus string `json:"delivery_status"` + DeliveryBoothCode string `json:"delivery_booth_code"` + DeliveryErrorMsg string `json:"delivery_error_msg"` + DeliveryBaseInfo *DeliveryBaseInfo `json:"delivery_base_info"` + DeliveryPlayConfig *DeliveryPlayConfig `json:"delivery_play_config"` + DeliveryTargetRule *DeliveryTargetRule `json:"delivery_target_rule"` +} + +type DeliveryBaseInfo struct { + DeliveryName string `json:"delivery_name"` + DeliveryBeginTime string `json:"delivery_begin_time"` + DeliveryEndTime string `json:"delivery_end_time"` +} + +type DeliveryPlayConfig struct { + DeliverySingleSendConfig *DeliverySingleSendConfig `json:"delivery_single_send_config"` + DeliveryFullSendConfig *DeliveryFullSendConfig `json:"delivery_full_send_config"` +} + +type DeliverySingleSendConfig struct { + DeliveryContentInfo *DeliveryContentInfo `json:"delivery_content_info"` +} + +type DeliveryFullSendConfig struct { + DeliveryFloorAmount string `json:"delivery_floor_amount"` + DeliveryContentInfo *DeliveryContentInfo `json:"delivery_content_info"` +} + +type DeliveryContentInfo struct { + DeliveryContentType string `json:"delivery_content_type"` + DeliveryActivityContent *DeliveryActivityContent `json:"delivery_activity_content"` + DeliveryAppContent *DeliveryAppContent `json:"delivery_app_content"` + DeliveryDisplayInfo *DeliveryDisplayInfo `json:"delivery_display_info"` +} + +type DeliveryActivityContent struct { + ActivityId string `json:"activity_id"` +} + +type DeliveryAppContent struct { + MiniAppId string `json:"mini_app_id"` + ServiceCodeList []string `json:"service_code_list"` + MiniAppDeliveryType string `json:"mini_app_delivery_type"` +} + +type DeliveryDisplayInfo struct { + MainTitle string `json:"main_title"` + SubTitle string `json:"sub_title"` +} + +type DeliveryTargetRule struct { + DeliveryMerchantRule *DeliveryMerchantRule `json:"delivery_merchant_rule"` + DeliveryCityCodeRule *DeliveryCityCodeRule `json:"delivery_city_code_rule"` + DeliveryPromoTags string `json:"delivery_promo_tags"` +} + +type DeliveryMerchantRule struct { + DeliveryMerchantMode string `json:"delivery_merchant_mode"` + DeliveryMerchantInfos []*DeliveryMerchantInfo `json:"delivery_merchant_infos"` +} + +type DeliveryMerchantInfo struct { + MerchantIdType string `json:"merchant_id_type"` + MerchantId string `json:"merchant_id"` +} + +type DeliveryCityCodeRule struct { + CityCodes []string `json:"city_codes"` + AllCity bool `json:"all_city"` +} + +type MarketingActivityDeliveryCreate struct { + ErrorResponse + DeliveryId string `json:"delivery_id"` +} + +type MarketingMaterialImageUpload struct { + ErrorResponse + ResourceId string `json:"resource_id"` + ResourceEnhance bool `json:"resource_enhance"` + ResourceUrl string `json:"resource_url"` +} diff --git a/alipay/model_smilepay.go b/alipay/model_smilepay.go new file mode 100644 index 00000000..6737d448 --- /dev/null +++ b/alipay/model_smilepay.go @@ -0,0 +1,41 @@ +package alipay + +type ZolozAuthenticationSmilepayInitializeRsp struct { + Response *ZolozAuthenticationSmilepayInitialize `json:"zoloz_authentication_smilepay_initialize_response"` + AlipayCertSn string `json:"alipay_cert_sn,omitempty"` + SignData string `json:"-"` + Sign string `json:"sign"` +} + +type ZolozAuthenticationCustomerFtokenQueryRsp struct { + Response *ZolozAuthenticationCustomerFtokenQuery `json:"zoloz_authentication_customer_ftoken_query_response"` + AlipayCertSn string `json:"alipay_cert_sn,omitempty"` + SignData string `json:"-"` + Sign string `json:"sign"` +} + +// =========================================================分割========================================================= + +type ZolozAuthenticationSmilepayInitialize struct { + ErrorResponse + RetCodeSub string `json:"ret_code_sub"` + RetMessageSub string `json:"ret_message_sub"` + ZimId string `json:"zim_id"` + ZimInitClientData string `json:"zim_init_client_data"` +} + +type ZolozAuthenticationCustomerFtokenQuery struct { + ErrorResponse + Uid string `json:"uid"` + OpenId string `json:"open_id"` + UidTelPairList []*UidTelPair `json:"uid_tel_pair_list"` + AgeCheckResult string `json:"age_check_result"` + CertNo string `json:"cert_no"` + CertName string `json:"cert_name"` + FaceId string `json:"face_id"` +} + +type UidTelPair struct { + UserId string `json:"user_id"` + OpenId string `json:"open_id"` +} diff --git a/alipay/request.go b/alipay/request.go index 5b8a7200..4901ab15 100644 --- a/alipay/request.go +++ b/alipay/request.go @@ -317,11 +317,9 @@ func (a *Client) FileRequest(ctx context.Context, bm gopay.BodyMap, file *gopay. if a.location != nil { pubBody.Set("timestamp", time.Now().In(a.location).Format(xtime.TimeLayout)) } - if a.NotifyUrl != gopay.NULL { //如果返回url为空,传过来的返回url不为空 - //fmt.Println("url不为空?", a.NotifyUrl) + if a.NotifyUrl != gopay.NULL { pubBody.Set("notify_url", a.NotifyUrl) } - //fmt.Println("notify,", pubBody.JsonBody()) if a.AppAuthToken != gopay.NULL { pubBody.Set("app_auth_token", a.AppAuthToken) } diff --git a/alipay/smilepay.go b/alipay/smilepay.go new file mode 100644 index 00000000..14bcabe7 --- /dev/null +++ b/alipay/smilepay.go @@ -0,0 +1,51 @@ +package alipay + +import ( + "context" + "encoding/json" + "fmt" + + "github.com/go-pay/gopay" +) + +// zoloz.authentication.smilepay.initialize(刷脸支付初始化) +// 文档地址:https://opendocs.alipay.com/open/2f7c1d5f_zoloz.authentication.smilepay.initialize +func (a *Client) ZolozAuthenticationSmilepayInitialize(ctx context.Context, bm gopay.BodyMap) (aliRsp *ZolozAuthenticationSmilepayInitializeRsp, err error) { + var bs []byte + if bs, err = a.doAliPay(ctx, bm, "zoloz.authentication.smilepay.initialize"); err != nil { + return nil, err + } + aliRsp = new(ZolozAuthenticationSmilepayInitializeRsp) + if err = json.Unmarshal(bs, aliRsp); err != nil || aliRsp.Response == nil { + return nil, fmt.Errorf("[%w], bytes: %s", gopay.UnmarshalErr, string(bs)) + } + if err = bizErrCheck(aliRsp.Response.ErrorResponse); err != nil { + return aliRsp, err + } + signData, signDataErr := a.getSignData(bs, aliRsp.AlipayCertSn) + aliRsp.SignData = signData + return aliRsp, a.autoVerifySignByCert(aliRsp.Sign, signData, signDataErr) +} + +// zoloz.authentication.customer.ftoken.query(查询刷脸结果信息接口) +// 文档地址:https://opendocs.alipay.com/open/c8e4d285_zoloz.authentication.customer.ftoken.query +func (a *Client) ZolozAuthenticationCustomerFtokenQuery(ctx context.Context, bm gopay.BodyMap) (aliRsp *ZolozAuthenticationCustomerFtokenQueryRsp, err error) { + err = bm.CheckEmptyError("ftoken", "biz_type") + if err != nil { + return nil, err + } + var bs []byte + if bs, err = a.doAliPay(ctx, bm, "zoloz.authentication.customer.ftoken.query"); err != nil { + return nil, err + } + aliRsp = new(ZolozAuthenticationCustomerFtokenQueryRsp) + if err = json.Unmarshal(bs, aliRsp); err != nil || aliRsp.Response == nil { + return nil, fmt.Errorf("[%w], bytes: %s", gopay.UnmarshalErr, string(bs)) + } + if err = bizErrCheck(aliRsp.Response.ErrorResponse); err != nil { + return aliRsp, err + } + signData, signDataErr := a.getSignData(bs, aliRsp.AlipayCertSn) + aliRsp.SignData = signData + return aliRsp, a.autoVerifySignByCert(aliRsp.Sign, signData, signDataErr) +} diff --git a/constant.go b/constant.go index 5b24a40f..817acf5e 100644 --- a/constant.go +++ b/constant.go @@ -7,7 +7,7 @@ const ( OK = "OK" DebugOff = 0 DebugOn = 1 - Version = "1.5.100" + Version = "1.5.101" ) type DebugSwitch int8 diff --git a/doc/alipay.md b/doc/alipay.md index 5bb3a466..530fe027 100644 --- a/doc/alipay.md +++ b/doc/alipay.md @@ -225,37 +225,115 @@ xlog.Infof("%+v", phone) * 支付宝接口自行实现方法:`client.PostAliPayAPISelfV2()` * 支付产品 + * 当面付 + * 付款码支付接口(商家扫用户付款码):`client.TradePay()` + * 统一收单线下交易预创建接口(用户扫商品收款码):`client.TradePrecreate()` * App支付 * APP支付接口2.0(APP支付):`client.TradeAppPay()` * 手机网站支付 * 手机网站支付接口2.0(手机网站支付):`client.TradeWapPay()` * 电脑网站支付 * 统一收单下单并支付页面接口(电脑网站支付):`client.TradePagePay()` - * 资金预授权 + * 刷脸付 + * 刷脸支付初始化接口:`client.ZolozAuthenticationSmilepayInitialize()` + * 查询刷脸结果信息接口:`client.ZolozAuthenticationCustomerFtokenQuery()` + * 预授权支付 * 线上资金授权冻结接口:`client:FundAuthOrderAppFreeze()` - * 资金授权冻结接口:`client.FundAuthOrderFreeze()` - * 资金授权发码接口:`client.FundAuthOrderVoucherCreate()` * 资金授权操作查询接口:`client.FundAuthOperationDetailQuery()` - * 资金授权解冻接口:`client.FundAuthOrderUnfreeze()` * 资金授权撤销接口:`client.FundAuthOperationCancel()` - * 当面付 - * 付款码支付接口(商家扫用户付款码):`client.TradePay()` - * 统一收单线下交易预创建接口(用户扫商品收款码):`client.TradePrecreate()` - * 统一收单交易创建接口:`client.TradeCreate()` - * 统一收单交易订单支付接口:TODO:https://opendocs.alipay.com/open/03vtew - * 统一收单线下交易查询: `client.TradeQuery()` - * 统一收单交易退款接口: `client.TradeRefund()` - * 统一收单交易退款查询: `client.TradeFastPayRefundQuery()` - * 统一收单交易关闭接口: `client.TradeClose()` - * 统一收单交易撤销接口: `client.TradeCancel()` - * ~~统一收单退款页面接口: `client.TradePageRefund()`~~ - * 支付宝订单信息同步接口: `client.TradeOrderInfoSync()` + * 资金授权解冻接口:`client.FundAuthOrderUnfreeze()` + * 资金授权发码接口:`client.FundAuthOrderVoucherCreate()` + * 资金授权冻结接口:`client.FundAuthOrderFreeze()` + * 交易 + * 统一收单交易创建接口:`client.TradeCreate()` + * 统一收单交易订单支付接口:TODO:https://opendocs.alipay.com/open/03vtew + * 统一收单线下交易查询: `client.TradeQuery()` + * 统一收单交易退款接口: `client.TradeRefund()` + * 统一收单交易退款查询: `client.TradeFastPayRefundQuery()` + * 统一收单交易关闭接口: `client.TradeClose()` + * 统一收单交易撤销接口: `client.TradeCancel()` + * 支付宝订单信息同步接口: `client.TradeOrderInfoSync()` + * 账单 + * 查询对账单下载地址:`client.DataBillDownloadUrlQuery()` + * 商家分账 + * 分账关系维护 + * 分账关系绑定接口:`client.TradeRelationBind()` + * 分账关系解绑接口:`client.TradeRelationUnbind()` + * 分账关系查询接口:`client.TradeRelationBatchQuery()` + * 分账请求 + * 统一收单交易结算接口:`client.TradeOrderSettle()` + * 统一收单确认结算接口:`client.TradeSettleConfirm()` + * 分账查询 + * 分账比例查询:`client.TradeRoyaltyRateQuery()` + * 分账剩余金额查询:`client.TradeOrderOnSettleQuery()` + * 交易分账查询接口:`client.TradeOrderSettleQuery()` + * 商家扣款 + * 支付宝个人协议页面签约接口: `client.UserAgreementPageSign()` + * 支付宝个人协议页面签约接口(App 专用,生成唤醒签约页面链接): `client.UserAgreementPageSignInApp()` + * 支付宝个人代扣协议查询接口: `client.UserAgreementQuery()` + * 支付宝个人代扣协议解约接口: `client.UserAgreementPageUnSign()` + * 周期性扣款协议执行计划修改接口: `client.UserAgreementExecutionplanModify()` +* 私域产品 + * 支付有礼 + * 推广计划 +* 公域产品 + * 经营推广 + * 推广计划 + * 推广计划状态变更消息接口:`client.MarketingActivityDeliveryChanged()` + * 创建推广计划接口:`client.MarketingActivityDeliveryCreate()` + * 查询推广计划接口:`client.MarketingActivityDeliveryQuery()` + * 停止推广计划接口:`client.MarketingActivityDeliveryStop()` + * 营销图片资源上传接口:`client.MarketingMaterialImageUpload()` * 营销产品 - * 创建现金活动接口:TODO:https://opendocs.alipay.com/open/029yy9 - * 触发现金红包活动接口:TODO:https://opendocs.alipay.com/open/029yya - * 更改现金活动状态接口:TODO:https://opendocs.alipay.com/open/029yyb - * 现金活动列表查询接口:TODO:https://opendocs.alipay.com/open/02a1f9 - * 现金活动详情查询接口:TODO:https://opendocs.alipay.com/open/02a1fa + * 支付券 + * 创建支付券接口:TODO:https://opendocs.alipay.com/open/049d65 + * 激活支付券接口:TODO:https://opendocs.alipay.com/open/049d66 + * 查询支付券详情接口:TODO:https://opendocs.alipay.com/open/049d6g + * 修改支付券基本信息接口:TODO:https://opendocs.alipay.com/open/049d67 + * 追加支付券预算接口:TODO:https://opendocs.alipay.com/open/049d68 + * 停止支付券接口:TODO:https://opendocs.alipay.com/open/049d69 + * 券活动创建通知接口:TODO:https://opendocs.alipay.com/open/049d6a + * 券活动修改通知接口:TODO:https://opendocs.alipay.com/open/049d6b + * 券活动停止通知接口:TODO:https://opendocs.alipay.com/open/049d6c + * 券活动预算追加通知接口:TODO:https://opendocs.alipay.com/open/049d6d + * 私域营销 + * 条件查询活动列表接口:TODO:https://opendocs.alipay.com/open/04fgw9 + * 活动领取咨询接口:TODO:https://opendocs.alipay.com/open/04fgwa + * 查询活动详情接口:TODO:https://opendocs.alipay.com/open/04fgwb + * 查询活动可用商户接口:TODO:https://opendocs.alipay.com/open/04fgwc + * 查询活动可用小程序接口:TODO:https://opendocs.alipay.com/open/04fgwd + * 查询活动可用门店接口:TODO:https://opendocs.alipay.com/open/04fgwe + * 查询活动适用商品接口:TODO:https://opendocs.alipay.com/open/04fgwf + * 条件查询用户券接口:TODO:https://opendocs.alipay.com/open/04fgwg + * 查询用户券详情接口:TODO:https://opendocs.alipay.com/open/04fgwh + * 订单优惠前置咨询接口:TODO:https://opendocs.alipay.com/open/04fgwi + * 券领取通知接口:TODO:https://opendocs.alipay.com/open/049d6f + * 券核销消息接口:TODO:https://opendocs.alipay.com/open/049d6e + * 券过期消息接口:TODO:https://opendocs.alipay.com/open/04fgwj + * 蚂蚁门店管理 + * 蚂蚁店铺创建接口: `client.AntMerchantShopCreate()` + * 店铺保存审核通过消息接口:TODO:https://opendocs.alipay.com/open/04fgwm + * 店铺保存拒绝消息:TODO:https://opendocs.alipay.com/open/04fgwn + * 修改蚂蚁店铺接口: `client.AntMerchantShopModify()` + * 商户申请单查询接口: `client.AntMerchantOrderQuery()` + * 店铺分页查询接口:TODO:https://opendocs.alipay.com/open/04fgwq + * 店铺查询接口:`client.AntMerchantShopQuery()` + * 蚂蚁店铺关闭接口:`client.AntMerchantShopClose()` + * 图片上传接口:TODO:https://opendocs.alipay.com/open/04fgwt + * 商户mcc信息查询接口:TODO:https://opendocs.alipay.com/open/04fgwu + * 商家券 2.0 + * todo:白天继续整理: + * + * + * + * + * + * + * 创建现金活动接口:TODO:https://opendocs.alipay.com/open/029yy9 + * 触发现金红包活动接口:TODO:https://opendocs.alipay.com/open/029yya + * 更改现金活动状态接口:TODO:https://opendocs.alipay.com/open/029yyb + * 现金活动列表查询接口:TODO:https://opendocs.alipay.com/open/02a1f9 + * 现金活动详情查询接口:TODO:https://opendocs.alipay.com/open/02a1fa * 会员产品 * App支付宝登录 * 换取授权访问令牌接口:`client.SystemOauthToken()` @@ -337,12 +415,12 @@ xlog.Infof("%+v", phone) * 口碑凭证延期接口: `client.KoubeiTradeTicketTicketcodeDelay()` * 口碑凭证码查询: `client.KoubeiTradeTicketTicketcodeQuery()` * 口碑凭证码撤销核销: `client.KoubeiTradeTicketTicketcodeCancel()` - * 修改蚂蚁店铺: `client.AntMerchantShopModify()` - * 蚂蚁店铺创建: `client.AntMerchantShopCreate()` + * + * * 蚂蚁店铺创建咨询: `client.AntMerchantShopConsult()` - * 商户申请单查询: `client.AntMerchantOrderQuery()` - * 店铺查询接口: `client.AntMerchantShopQuery()` - * 蚂蚁店铺关闭: `client.AntMerchantShopClose()` + * + * + * * 申请权益发放: `client.CommerceBenefitApply()` * 权益核销: `client.CommerceBenefitVerify()` * 还款账单查询: `client.TradeRepaybillQuery()` @@ -351,11 +429,9 @@ xlog.Infof("%+v", phone) * 身份认证初始化服务接口: `client.UserCertifyOpenInit()` * 身份认证开始认证: `client.UserCertifyOpenCertify()` * 会员 - * 支付宝个人协议页面签约接口: `client.UserAgreementPageSign()` - * 支付宝个人协议页面签约接口(App 专用,生成唤醒签约页面链接): `client.UserAgreementPageSignInApp()` - * 支付宝个人代扣协议解约接口: `client.UserAgreementPageUnSign()` - * 支付宝个人代扣协议查询接口: `client.UserAgreementQuery()` - * 周期性扣款协议执行计划修改接口: `client.UserAgreementExecutionplanModify()` + + + * 协议由普通通用代扣协议产品转移到周期扣协议产品: `client.UserAgreementTransfer()` * 通用当面付二阶段接口: `client.UserTwostageCommonUse()` * 芝麻企业征信基于身份的协议授权: `client.UserAuthZhimaorgIdentityApply()` @@ -380,17 +456,6 @@ xlog.Infof("%+v", phone) * 加入信用服务: `clinet.ZhimaCreditEpSceneAgreementUse()` * 取消信用服务: `client.ZhimaCreditEpSceneAgreementCancel()` * 信用服务履约同步(批量): `client.ZhimaCreditEpSceneFulfillmentlistSync()` -* 对账 - * 查询对账单下载地址:`client.DataBillDownloadUrlQuery()` -* 商家分账 - * 分账关系绑定接口:`client.TradeRelationBind()` - * 分账关系解绑接口:`client.TradeRelationUnbind()` - * 分账关系查询接口:`client.TradeRelationBatchQuery()` - * 统一收单交易结算接口:`client.TradeOrderSettle()` - * 统一收单确认结算接口:`client.TradeSettleConfirm()` - * 交易分账查询接口:`client.TradeOrderSettleQuery()` - * 分账剩余金额查询:`client.TradeOrderOnSettleQuery()` - * 分账比例查询:`client.TradeRoyaltyRateQuery()` ### 支付宝公共 API diff --git a/examples/main.go b/examples/main.go index 434400cc..74452562 100644 --- a/examples/main.go +++ b/examples/main.go @@ -2,7 +2,6 @@ package main import ( "context" - "fmt" "github.com/go-pay/gopay" "github.com/go-pay/gopay/alipay" @@ -28,5 +27,5 @@ func main() { bm.Set("out_request_no", "20210402133958511778570101") bm.Set("remark", "测试取消") rs, err := client.FundAuthOperationCancel(context.Background(), bm) - fmt.Println(rs, err) + xlog.Infof("rs:%v, err:%+v", rs, err) } diff --git a/go.mod b/go.mod index 391a719a..1970a302 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/go-pay/xhttp v0.0.2 github.com/go-pay/xlog v0.0.2 github.com/go-pay/xtime v0.0.2 - golang.org/x/crypto v0.20.0 + golang.org/x/crypto v0.22.0 ) -require github.com/go-pay/bm v0.0.1 // indirect +require github.com/go-pay/bm v0.0.2 // indirect diff --git a/go.sum b/go.sum index 964e7fdb..7d6fafa7 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,5 @@ -github.com/go-pay/bm v0.0.1 h1:F2d1KhrupJr7yGPCQTVeYjeOJwN35WhoofopSm6undY= -github.com/go-pay/bm v0.0.1/go.mod h1:/6bIb0yBj8JbATmE+ib41me4RikMGN3f/XSDF5FjsPQ= +github.com/go-pay/bm v0.0.2 h1:CLa5hNTIm6uv8HSWGWd4moZbuOzQqJo5HcScXBBSY/E= +github.com/go-pay/bm v0.0.2/go.mod h1:nyglxC5YS4+gVaO9TxLMI0I/naFUqwffdt5n6llM8uM= github.com/go-pay/crypto v0.0.1 h1:B6InT8CLfSLc6nGRVx9VMJRBBazFMjr293+jl0lLXUY= github.com/go-pay/crypto v0.0.1/go.mod h1:41oEIvHMKbNcYlWUlRWtsnC6+ASgh7u29z0gJXe5bes= github.com/go-pay/errgroup v0.0.2 h1:5mZMdm0TDClDm2S3G0/sm0f8AuQRtz0dOrTHDR9R8Cc= @@ -12,5 +12,5 @@ github.com/go-pay/xlog v0.0.2 h1:kUg5X8/5VZAPDg1J5eGjA3MG0/H5kK6Ew0dW/Bycsws= github.com/go-pay/xlog v0.0.2/go.mod h1:DbjMADPK4+Sjxj28ekK9goqn4zmyY4hql/zRiab+S9E= github.com/go-pay/xtime v0.0.2 h1:7YR4/iuELsEHpJ6LUO0SVK80hQxDO9MLCfuVYIiTCRM= github.com/go-pay/xtime v0.0.2/go.mod h1:W1yRbJaSt4CSBcdAtLBQ8xajiN/Pl5hquGczUcUE9xE= -golang.org/x/crypto v0.20.0 h1:jmAMJJZXr5KiCw05dfYK9QnqaqKLYXijU23lsEdcQqg= -golang.org/x/crypto v0.20.0/go.mod h1:Xwo95rrVNIoSMx9wa1JroENMToLWn3RNVrTBpLHgZPQ= +golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30= +golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= diff --git a/release_note.txt b/release_note.txt index 7404c595..ff2d6e2c 100644 --- a/release_note.txt +++ b/release_note.txt @@ -6,6 +6,26 @@ (4) 微信V3:修改 wechat.V3DecryptNotifyCipherText() -> wechat.V3DecryptPayNotifyCipherText(),解密 普通支付 回调中的加密信息 (5) 微信V3:修改 wechat.DecryptPartnerCipherText() -> wechat.DecryptPartnerPayCipherText(),解密 普通支付 回调中的加密信息 (6) 微信V3:新增 wechat.V3DecryptNotifyCipherTextToStruct(),解密 统一数据 到指针结构体对象。 + (7) gopay:golang.org/x/crypto v0.20.0 版本升级到 v0.22.0。 + (8) 支付宝:新增 client.ZolozAuthenticationSmilepayInit(),刷脸支付初始化接口。 + (9) 支付宝:新增 client.ZolozAuthenticationCustomerFtokenQuery(),查询刷脸结果信息接口。 + (10) 支付宝:新增 client.MarketingActivityDeliveryChanged(),推广计划状态变更消息接口。 + (11) 支付宝:新增 client.MarketingActivityDeliveryCreate(),创建推广计划接口。 + (12) 支付宝:新增 client.MarketingActivityDeliveryQuery(),查询推广计划接口。 + (13) 支付宝:新增 client.MarketingActivityDeliveryStop(),停止推广计划接口。 + (14) 支付宝:新增 client.MarketingMaterialImageUpload(),营销图片资源上传接口。 + + + (15) 支付宝:新增 client.ZolozAuthenticationCustomerSmilepayQuery(),刷脸支付初始化接口。 + (16) 支付宝:新增 client.ZolozAuthenticationCustomerSmilepayQuery(),刷脸支付初始化接口。 + (17) 支付宝:新增 client.ZolozAuthenticationCustomerSmilepayQuery(),刷脸支付初始化接口。 + (18) 支付宝:新增 client.ZolozAuthenticationCustomerSmilepayQuery(),刷脸支付初始化接口。 + (19) 支付宝:新增 client.ZolozAuthenticationCustomerSmilepayQuery(),刷脸支付初始化接口。 + (20) 支付宝:新增 client.ZolozAuthenticationCustomerSmilepayQuery(),刷脸支付初始化接口。 + (21) 支付宝:新增 client.ZolozAuthenticationCustomerSmilepayQuery(),刷脸支付初始化接口。 + (22) 支付宝:新增 client.ZolozAuthenticationCustomerSmilepayQuery(),刷脸支付初始化接口。 + (23) 支付宝:新增 client.ZolozAuthenticationCustomerSmilepayQuery(),刷脸支付初始化接口。 + (24) 支付宝:新增 client.ZolozAuthenticationCustomerSmilepayQuery(),刷脸支付初始化接口。 版本号:Release 1.5.100 修改记录: