Skip to content

Commit 13a1eb5

Browse files
committed
add new alipay api
1 parent dcde665 commit 13a1eb5

File tree

6 files changed

+284
-12
lines changed

6 files changed

+284
-12
lines changed

alipay/merchant_api.go

+23
Original file line numberDiff line numberDiff line change
@@ -191,3 +191,26 @@ func (a *Client) TradeRoyaltyRateQuery(ctx context.Context, bm gopay.BodyMap) (a
191191
aliRsp.SignData = signData
192192
return aliRsp, a.autoVerifySignByCert(aliRsp.Sign, signData, signDataErr)
193193
}
194+
195+
// alipay.security.risk.customerrisk.send(商户数据同步)
196+
// 文档地址:https://opendocs.alipay.com/open/02qth4
197+
func (a *Client) SecurityCustomerRiskSend(ctx context.Context, bm gopay.BodyMap) (aliRsp *SecurityCustomerRiskSendRsp, err error) {
198+
err = bm.CheckEmptyError("process_code", "trade_no")
199+
if err != nil {
200+
return nil, err
201+
}
202+
var bs []byte
203+
if bs, err = a.doAliPay(ctx, bm, "alipay.security.risk.customerrisk.send"); err != nil {
204+
return nil, err
205+
}
206+
aliRsp = new(SecurityCustomerRiskSendRsp)
207+
if err = json.Unmarshal(bs, aliRsp); err != nil || aliRsp.Response == nil {
208+
return nil, fmt.Errorf("[%w], bytes: %s", gopay.UnmarshalErr, string(bs))
209+
}
210+
if err = bizErrCheck(aliRsp.Response.ErrorResponse); err != nil {
211+
return aliRsp, err
212+
}
213+
signData, signDataErr := a.getSignData(bs, aliRsp.AlipayCertSn)
214+
aliRsp.SignData = signData
215+
return aliRsp, a.autoVerifySignByCert(aliRsp.Sign, signData, signDataErr)
216+
}

alipay/model_merchant.go

+11
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,13 @@ type TradeRoyaltyRateQueryResponse struct {
5656
Sign string `json:"sign"`
5757
}
5858

59+
type SecurityCustomerRiskSendRsp struct {
60+
Response *SecurityCustomerRiskSend `json:"alipay_security_risk_customerrisk_send_response"`
61+
AlipayCertSn string `json:"alipay_cert_sn,omitempty"`
62+
SignData string `json:"-"`
63+
Sign string `json:"sign"`
64+
}
65+
5966
// =========================================================分割=========================================================
6067

6168
type TradeRelationBind struct {
@@ -120,3 +127,7 @@ type TradeRoyaltyRateQuery struct {
120127
UserId string `json:"user_id,omitempty"`
121128
MaxRatio string `json:"max_ratio,omitempty"`
122129
}
130+
131+
type SecurityCustomerRiskSend struct {
132+
ErrorResponse
133+
}

alipay/model_zhima.go

+93
Original file line numberDiff line numberDiff line change
@@ -147,13 +147,55 @@ type ZhimaCustomerJobworthSceneUseRsp struct {
147147
Sign string `json:"sign"`
148148
}
149149

150+
type ZhimaCustomerJobworthAuthQueryRsp struct {
151+
Response *ZhimaCustomerJobworthAuthQuery `json:"zhima_customer_jobworth_authentication_query_response"`
152+
AlipayCertSn string `json:"alipay_cert_sn,omitempty"`
153+
SignData string `json:"-"`
154+
Sign string `json:"sign"`
155+
}
156+
157+
type ZhimaCustomerJobworthAuthPreConsultRsp struct {
158+
Response *ZhimaCustomerJobworthAuthPreConsult `json:"zhima_customer_jobworth_authentication_preconsult_response"`
159+
AlipayCertSn string `json:"alipay_cert_sn,omitempty"`
160+
SignData string `json:"-"`
161+
Sign string `json:"sign"`
162+
}
163+
150164
type ZhimaCreditPeZmgoSettleApplyRsp struct {
151165
Response *ZhimaCreditPeZmgoSettleApply `json:"zhima_credit_pe_zmgo_settle_apply_response"`
152166
AlipayCertSn string `json:"alipay_cert_sn,omitempty"`
153167
SignData string `json:"-"`
154168
Sign string `json:"sign"`
155169
}
156170

171+
type ZhimaCreditPayAfterUseAgreementQueryRsp struct {
172+
Response *ZhimaCreditPayAfterUseAgreementQuery `json:"zhima_credit_payafteruse_creditagreement_query_response"`
173+
AlipayCertSn string `json:"alipay_cert_sn,omitempty"`
174+
SignData string `json:"-"`
175+
Sign string `json:"sign"`
176+
}
177+
178+
type ZhimaCreditPayAfterUseCreditBizOrderRsp struct {
179+
Response *ZhimaCreditPayAfterUseCreditBizOrder `json:"zhima_credit_payafteruse_creditbizorder_order_response"`
180+
AlipayCertSn string `json:"alipay_cert_sn,omitempty"`
181+
SignData string `json:"-"`
182+
Sign string `json:"sign"`
183+
}
184+
185+
type ZhimaCreditPayAfterUseCreditBizOrderQueryRsp struct {
186+
Response *ZhimaCreditPayAfterUseCreditBizOrderQuery `json:"zhima_credit_payafteruse_creditbizorder_query_response"`
187+
AlipayCertSn string `json:"alipay_cert_sn,omitempty"`
188+
SignData string `json:"-"`
189+
Sign string `json:"sign"`
190+
}
191+
192+
type ZhimaCreditPayAfterUseCreditBizOrderFinishRsp struct {
193+
Response *ZhimaCreditPayAfterUseCreditBizOrderFinish `json:"zhima_credit_payafteruse_creditbizorder_finish_response"`
194+
AlipayCertSn string `json:"alipay_cert_sn,omitempty"`
195+
SignData string `json:"-"`
196+
Sign string `json:"sign"`
197+
}
198+
157199
// =========================================================分割=========================================================
158200

159201
type ScoreGet struct {
@@ -401,6 +443,21 @@ type ZhimaCustomerJobworthSceneUse struct {
401443
ErrorResponse
402444
}
403445

446+
type ZhimaCustomerJobworthAuthQuery struct {
447+
ErrorResponse
448+
IdentityResult string `json:"identity_result"`
449+
IdentityResultSkipUrl string `json:"identity_result_skip_url"`
450+
TokenStatus string `json:"token_status"`
451+
UserId string `json:"user_id"`
452+
OpenId string `json:"open_id"`
453+
}
454+
455+
type ZhimaCustomerJobworthAuthPreConsult struct {
456+
ErrorResponse
457+
PreCheckSuccess bool `json:"pre_check_success"`
458+
Reason string `json:"reason"`
459+
}
460+
404461
type ZhimaCreditPeZmgoSettleApply struct {
405462
ErrorResponse
406463
OutRequestNo string `json:"out_request_no"`
@@ -409,3 +466,39 @@ type ZhimaCreditPeZmgoSettleApply struct {
409466
SettleStatus string `json:"settle_status"`
410467
FailReason string `json:"fail_reason"`
411468
}
469+
470+
type ZhimaCreditPayAfterUseAgreementQuery struct {
471+
ErrorResponse
472+
OutAgreementNo string `json:"out_agreement_no"`
473+
AgreementStatus string `json:"agreement_status"`
474+
CreditAgreementId string `json:"credit_agreement_id"`
475+
BizTime string `json:"biz_time"`
476+
ExtInfo string `json:"ext_info"`
477+
AlipayUserId string `json:"alipay_user_id"`
478+
OpenId string `json:"open_id"`
479+
}
480+
481+
type ZhimaCreditPayAfterUseCreditBizOrder struct {
482+
ErrorResponse
483+
OutOrderNo string `json:"out_order_no"`
484+
CreditBizOrderId string `json:"credit_biz_order_id"`
485+
}
486+
487+
type ZhimaCreditPayAfterUseCreditBizOrderQuery struct {
488+
ErrorResponse
489+
CreditBizOrderId string `json:"credit_biz_order_id"`
490+
CreditAgreementId string `json:"credit_agreement_id"`
491+
TotalAmount string `json:"total_amount"`
492+
CreateTime string `json:"create_time"`
493+
ZmServiceId string `json:"zm_service_id"`
494+
ProductCode string `json:"product_code"`
495+
OrderStatus string `json:"order_status"`
496+
TradeNo string `json:"trade_no"`
497+
}
498+
499+
type ZhimaCreditPayAfterUseCreditBizOrderFinish struct {
500+
ErrorResponse
501+
OutRequestNo string `json:"out_request_no"`
502+
CreditBizOrderId string `json:"credit_biz_order_id"`
503+
OrderStatus string `json:"order_status"`
504+
}

alipay/request.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ func (a *Client) doAliPay(ctx context.Context, bm gopay.BodyMap, method string,
162162
return nil, err
163163
}
164164
switch method {
165-
case "alipay.trade.app.pay", "alipay.fund.auth.order.app.freeze":
165+
case "alipay.trade.app.pay", "alipay.fund.auth.order.app.freeze", "zhima.credit.pe.zmgo.sign.apply", "zhima.credit.payafteruse.creditagreement.sign":
166166
return []byte(param), nil
167167
case "alipay.trade.wap.pay", "alipay.trade.page.pay", "alipay.user.certify.open.certify":
168168
if !a.IsProd {

alipay/zhima_api.go

+145
Original file line numberDiff line numberDiff line change
@@ -490,6 +490,105 @@ func (a *Client) ZhimaCreditPeZmgoPaysignConfirm(ctx context.Context, bm gopay.B
490490
return aliRsp, a.autoVerifySignByCert(aliRsp.Sign, signData, signDataErr)
491491
}
492492

493+
// zhima.credit.payafteruse.creditagreement.sign(信用服务开通/授权)
494+
// 文档地址:https://opendocs.alipay.com/open/03uloz
495+
func (a *Client) ZhimaCreditPayAfterUseAgreementSign(ctx context.Context, bm gopay.BodyMap) (orderStr string, err error) {
496+
err = bm.CheckEmptyError("out_agreement_no", "zm_service_id")
497+
if err != nil {
498+
return gopay.NULL, err
499+
}
500+
var bs []byte
501+
if bs, err = a.doAliPay(ctx, bm, "zhima.credit.payafteruse.creditagreement.sign"); err != nil {
502+
return gopay.NULL, err
503+
}
504+
orderStr = string(bs)
505+
return orderStr, nil
506+
}
507+
508+
// zhima.credit.payafteruse.creditagreement.query(查询服务开通/授权信息)
509+
// 文档地址:https://opendocs.alipay.com/open/03ulp0
510+
func (a *Client) ZhimaCreditPayAfterUseAgreementQuery(ctx context.Context, bm gopay.BodyMap) (aliRsp *ZhimaCreditPayAfterUseAgreementQueryRsp, err error) {
511+
var bs []byte
512+
if bs, err = a.doAliPay(ctx, bm, "zhima.credit.payafteruse.creditagreement.query"); err != nil {
513+
return nil, err
514+
}
515+
aliRsp = new(ZhimaCreditPayAfterUseAgreementQueryRsp)
516+
if err = json.Unmarshal(bs, aliRsp); err != nil || aliRsp.Response == nil {
517+
return nil, fmt.Errorf("[%w], bytes: %s", gopay.UnmarshalErr, string(bs))
518+
}
519+
if err = bizErrCheck(aliRsp.Response.ErrorResponse); err != nil {
520+
return aliRsp, err
521+
}
522+
signData, signDataErr := a.getSignData(bs, aliRsp.AlipayCertSn)
523+
aliRsp.SignData = signData
524+
return aliRsp, a.autoVerifySignByCert(aliRsp.Sign, signData, signDataErr)
525+
}
526+
527+
// zhima.credit.payafteruse.creditbizorder.order(芝麻信用服务下单(免用户确认场景))
528+
// 文档地址:https://opendocs.alipay.com/open/03ulpo
529+
func (a *Client) ZhimaCreditPayAfterUseCreditBizOrder(ctx context.Context, bm gopay.BodyMap) (aliRsp *ZhimaCreditPayAfterUseCreditBizOrderRsp, err error) {
530+
err = bm.CheckEmptyError("out_order_no", "credit_agreement_id", "subject")
531+
if err != nil {
532+
return nil, err
533+
}
534+
var bs []byte
535+
if bs, err = a.doAliPay(ctx, bm, "zhima.credit.payafteruse.creditbizorder.order"); err != nil {
536+
return nil, err
537+
}
538+
aliRsp = new(ZhimaCreditPayAfterUseCreditBizOrderRsp)
539+
if err = json.Unmarshal(bs, aliRsp); err != nil || aliRsp.Response == nil {
540+
return nil, fmt.Errorf("[%w], bytes: %s", gopay.UnmarshalErr, string(bs))
541+
}
542+
if err = bizErrCheck(aliRsp.Response.ErrorResponse); err != nil {
543+
return aliRsp, err
544+
}
545+
signData, signDataErr := a.getSignData(bs, aliRsp.AlipayCertSn)
546+
aliRsp.SignData = signData
547+
return aliRsp, a.autoVerifySignByCert(aliRsp.Sign, signData, signDataErr)
548+
}
549+
550+
// zhima.credit.payafteruse.creditbizorder.query(信用服务订单查询)
551+
// 文档地址:https://opendocs.alipay.com/open/03vtet
552+
func (a *Client) ZhimaCreditPayAfterUseCreditBizOrderQuery(ctx context.Context, bm gopay.BodyMap) (aliRsp *ZhimaCreditPayAfterUseCreditBizOrderQueryRsp, err error) {
553+
var bs []byte
554+
if bs, err = a.doAliPay(ctx, bm, "zhima.credit.payafteruse.creditbizorder.query"); err != nil {
555+
return nil, err
556+
}
557+
aliRsp = new(ZhimaCreditPayAfterUseCreditBizOrderQueryRsp)
558+
if err = json.Unmarshal(bs, aliRsp); err != nil || aliRsp.Response == nil {
559+
return nil, fmt.Errorf("[%w], bytes: %s", gopay.UnmarshalErr, string(bs))
560+
}
561+
if err = bizErrCheck(aliRsp.Response.ErrorResponse); err != nil {
562+
return aliRsp, err
563+
}
564+
signData, signDataErr := a.getSignData(bs, aliRsp.AlipayCertSn)
565+
aliRsp.SignData = signData
566+
return aliRsp, a.autoVerifySignByCert(aliRsp.Sign, signData, signDataErr)
567+
}
568+
569+
// zhima.credit.payafteruse.creditbizorder.finish(结束信用服务订单)
570+
// 文档地址:https://opendocs.alipay.com/open/03vteu
571+
func (a *Client) ZhimaCreditPayAfterUseCreditBizOrderFinish(ctx context.Context, bm gopay.BodyMap) (aliRsp *ZhimaCreditPayAfterUseCreditBizOrderFinishRsp, err error) {
572+
err = bm.CheckEmptyError("out_request_no", "credit_biz_order_id")
573+
if err != nil {
574+
return nil, err
575+
}
576+
var bs []byte
577+
if bs, err = a.doAliPay(ctx, bm, "zhima.credit.payafteruse.creditbizorder.finish"); err != nil {
578+
return nil, err
579+
}
580+
aliRsp = new(ZhimaCreditPayAfterUseCreditBizOrderFinishRsp)
581+
if err = json.Unmarshal(bs, aliRsp); err != nil || aliRsp.Response == nil {
582+
return nil, fmt.Errorf("[%w], bytes: %s", gopay.UnmarshalErr, string(bs))
583+
}
584+
if err = bizErrCheck(aliRsp.Response.ErrorResponse); err != nil {
585+
return aliRsp, err
586+
}
587+
signData, signDataErr := a.getSignData(bs, aliRsp.AlipayCertSn)
588+
aliRsp.SignData = signData
589+
return aliRsp, a.autoVerifySignByCert(aliRsp.Sign, signData, signDataErr)
590+
}
591+
493592
// zhima.customer.jobworth.adapter.query(职得工作证信息匹配度查询)
494593
// 文档地址:https://opendocs.alipay.com/apis/022mvz
495594
func (a *Client) ZhimaCustomerJobworthAdapterQuery(ctx context.Context, bm gopay.BodyMap) (aliRsp *ZhimaCustomerJobworthAdapterQueryRsp, err error) {
@@ -527,3 +626,49 @@ func (a *Client) ZhimaCustomerJobworthSceneUse(ctx context.Context, bm gopay.Bod
527626
aliRsp.SignData = signData
528627
return aliRsp, a.autoVerifySignByCert(aliRsp.Sign, signData, signDataErr)
529628
}
629+
630+
// zhima.customer.jobworth.authentication.query(职得身份认证查询接口)
631+
// 文档地址:https://opendocs.alipay.com/open/351177b5_zhima.customer.jobworth.authentication.query
632+
func (a *Client) ZhimaCustomerJobworthAuthQuery(ctx context.Context, bm gopay.BodyMap) (aliRsp *ZhimaCustomerJobworthAuthQueryRsp, err error) {
633+
err = bm.CheckEmptyError("conn_key", "once_token", "query_type", "identity_type", "service_id")
634+
if err != nil {
635+
return nil, err
636+
}
637+
var bs []byte
638+
if bs, err = a.doAliPay(ctx, bm, "zhima.customer.jobworth.authentication.query"); err != nil {
639+
return nil, err
640+
}
641+
aliRsp = new(ZhimaCustomerJobworthAuthQueryRsp)
642+
if err = json.Unmarshal(bs, aliRsp); err != nil || aliRsp.Response == nil {
643+
return nil, fmt.Errorf("[%w], bytes: %s", gopay.UnmarshalErr, string(bs))
644+
}
645+
if err = bizErrCheck(aliRsp.Response.ErrorResponse); err != nil {
646+
return aliRsp, err
647+
}
648+
signData, signDataErr := a.getSignData(bs, aliRsp.AlipayCertSn)
649+
aliRsp.SignData = signData
650+
return aliRsp, a.autoVerifySignByCert(aliRsp.Sign, signData, signDataErr)
651+
}
652+
653+
// zhima.customer.jobworth.authentication.preconsult(身份验真预咨询服务)
654+
// 文档地址:https://opendocs.alipay.com/open/16f72e43_zhima.customer.jobworth.authentication.preconsult
655+
func (a *Client) ZhimaCustomerJobworthAuthPreConsult(ctx context.Context, bm gopay.BodyMap) (aliRsp *ZhimaCustomerJobworthAuthPreConsultRsp, err error) {
656+
err = bm.CheckEmptyError("out_agreement_no", "once_token", "identity_type", "query_type", "zm_service_id")
657+
if err != nil {
658+
return nil, err
659+
}
660+
var bs []byte
661+
if bs, err = a.doAliPay(ctx, bm, "zhima.customer.jobworth.authentication.preconsult"); err != nil {
662+
return nil, err
663+
}
664+
aliRsp = new(ZhimaCustomerJobworthAuthPreConsultRsp)
665+
if err = json.Unmarshal(bs, aliRsp); err != nil || aliRsp.Response == nil {
666+
return nil, fmt.Errorf("[%w], bytes: %s", gopay.UnmarshalErr, string(bs))
667+
}
668+
if err = bizErrCheck(aliRsp.Response.ErrorResponse); err != nil {
669+
return aliRsp, err
670+
}
671+
signData, signDataErr := a.getSignData(bs, aliRsp.AlipayCertSn)
672+
aliRsp.SignData = signData
673+
return aliRsp, a.autoVerifySignByCert(aliRsp.Sign, signData, signDataErr)
674+
}

doc/alipay.md

+11-11
Original file line numberDiff line numberDiff line change
@@ -441,29 +441,29 @@ xlog.Infof("%+v", phone)
441441
* 芝麻GO支付下单链路签约确认: `client.ZhimaCreditPeZmgoPaysignConfirm()`
442442
* 芝麻先享
443443
* 服务开通
444-
* 信用服务开通/授权接口:TODO:https://opendocs.alipay.com/open/03uloz
445-
* 查询服务开通/授权信息接口:TODO:https://opendocs.alipay.com/open/03ulp0
444+
* 信用服务开通/授权接口:`client.ZhimaCreditPayAfterUseAgreementSign()`
445+
* 查询服务开通/授权信息接口:`client.ZhimaCreditPayAfterUseAgreementQuery()`
446446
* 信用下单
447-
* 芝麻先享信用服务下单(免用户确认场景)接口:TODO:https://opendocs.alipay.com/open/03ulpo
448-
* 芝麻先享信用服务下单(用户确认场景)接口:TODO:https://opendocs.alipay.com/open/03ulpp
449-
* 信用服务订单查询接口:TODO:https://opendocs.alipay.com/open/03vtet
450-
* 结束信用服务订单接口:TODO:https://opendocs.alipay.com/open/03vteu
447+
* 芝麻先享信用服务下单(免用户确认场景)接口:`client.ZhimaCreditPayAfterUseCreditBizOrder()`
448+
* 芝麻先享信用服务下单(用户确认场景)接口:支付宝 SDK 实现
449+
* 信用服务订单查询接口:`client.ZhimaCreditPayAfterUseCreditBizOrderQuery()`
450+
* 结束信用服务订单接口:`client.ZhimaCreditPayAfterUseCreditBizOrderFinish()`
451451
* 扣款
452-
* 统一收单交易订单支付接口:TODO:https://opendocs.alipay.com/open/2e81a85f_alipay.trade.order.pay
452+
* 统一收单交易订单支付接口:`client.TradeOrderPay()`
453453
* 芝麻免押
454454
* 创建免押订单接口:`client:FundAuthOrderAppFreeze()`
455455
* 完结免押订单接口:`client.FundAuthOrderUnfreeze()`
456456
* 查询免押订单接口:`client.FundAuthOperationDetailQuery()`
457457
* 取消免押订单接口:`client.FundAuthOperationCancel()`
458458
* 芝麻身份信息验证
459-
* 信用服务开通/授权接口:TODO:https://opendocs.alipay.com/open/63612668_zhima.credit.payafteruse.creditagreement.sign
460-
* 职得身份认证查询接口:TODO:https://opendocs.alipay.com/open/351177b5_zhima.customer.jobworth.authentication.query
459+
* 信用服务开通/授权接口:`client.ZhimaCreditPayAfterUseAgreementSign()`
460+
* 职得身份认证查询接口:`client.ZhimaCustomerJobworthAuthQuery()`
461461
* 职得工作证信息匹配度查询: `client.ZhimaCustomerJobworthAdapterQuery()`
462462
* 职得工作证外部渠道应用数据回流: `client.ZhimaCustomerJobworthSceneUse()`
463-
* 身份验真预咨询服务接口:TODO:https://opendocs.alipay.com/open/16f72e43_zhima.customer.jobworth.authentication.preconsult
463+
* 身份验真预咨询服务接口:`client.ZhimaCustomerJobworthAuthPreConsult()`
464464
* <font color='#027AFF' size='4'>安全产品</font>
465465
* 交易安全防护
466-
* 商户数据同步:TODO:https://opendocs.alipay.com/open/02qth4
466+
* 商户数据同步:`client.SecurityCustomerRiskSend()`
467467
* <font color='#027AFF' size='4'>其他产品</font>
468468
* 花芝轻会员结算申请: `client.PcreditHuabeiAuthSettleApply()`
469469
* NFC用户卡信息同步: `client.CommerceTransportNfccardSend()`

0 commit comments

Comments
 (0)