package identity_request

import (
	"encoding/json"
	"git.sxidc.com/student-physical-examination/contract_lock_sdk/http"
)

type IdentityAuthUrlRequest struct {
	// <ext>core:true</ext> 【用户唯一标识】用户唯一标识 【作用】 1、首次核验时，需传入用户在业务系统中的唯一标识，待用户认证通过后，用户的唯一标识将会与认证后的真实身份绑定 2、后续再次核验时仅需传入用户唯一标识，系统将会以用户每次核验的信息与用户唯一标识绑定的身份信息比对，若一致，则核验通过，不一致则核验失败 【传参】 请务必传入业务系统中用户的唯一标识，不可重复，如用户id。 【特殊说明】 传入的用户唯一标识已绑定了真实身份，传入的用户姓名、用户证件号不生效
	BizId string `json:"bizId"`
	// <ext>core:false;deprecated:true</ext> 【核验方式】核验方式 【作用】 核验方式 【传参方式】 字符串 【特殊说明】 此处固定为：Authorization
	Type_ string `json:"type,omitempty"`
	// <ext>core:true</ext> 【核验渠道】核验渠道 【作用】 核验渠道，用于控制核验页面按钮展示和页面跳转 1、THIRDAPP： （1）若successPage有值，则核验页面展示退出按钮；若successPage未传值，则核验页面不展示退出按钮 （2）认证成功时或者退出认证时，使用与APP 端约定好的方法跳转 2、THIRD： （1）核验页面始终不展示退出按钮 （2）认证成功或退出认证时，若successPage有值，则跳转至successPage页面，若successPage未传值，则尝试返回上一级页面 【传参】 取值范围：THIRDAPP（第三方APP），THIRD（第三方页面）。
	Channel string `json:"channel"`
	// <ext>core:true</ext> 【核验方式】核验方式 【作用】 可信身份核验功能为收费功能，可调用 <docs>/identity/auth/mode</docs> 接口查询已开通的核验方式 【传参】 1、取值范围：FACE（人脸识别核验），IVS（手机号三要素核验），BANK（银行卡四要素核验），MANUAL（人工审核）；不传值默认为：FACE（人脸识别核验）。 2、需传入 <docs>/identity/auth/mode</docs> 接口查询到的可支持的核验方式。
	Mode string `json:"mode,omitempty"`
	// <ext>core:true</ext> 【用户姓名】用户姓名 【作用】 首次核验用户身份时，即用户唯一标识未绑定真实身份，可传入用户的姓名，已绑定真实身份，此参数传入无效 【传参】 1、不传值，则会要求用户在进行身份核验时自行补全其姓名。 2、传值，则默认传入的姓名不允许修改。 3、最大长度：50。
	Name string `json:"name,omitempty"`
	// <ext>core:true</ext> 【用户证件号】用户证件号 【作用】 首次核验用户身份时，即用户唯一标识未绑定真实身份，可传入用户的证件号，已绑定真实身份，此参数传入无效 【传参】 1、不传值，则会要求用户在进行身份核验时自行补全其证件号。 2、传值，则默认传入的证件号不允许修改。
	CardNo string `json:"cardNo,omitempty"`
	// <ext>core:true</ext> 【用户手机号】用户手机号 【作用】 核验方式为手机号三要素核验时，可传入用户本人实名开户的手机号 【传参】 1、字符串，仅允许使用大陆手机号。 2、默认不可修改。
	Mobile string `json:"mobile,omitempty"`
	// <ext>core:true</ext> 【核验可修改字段】核验可修改字段 【作用】 控制认证页面可修改字段 【传参】 取值范围：NAME（姓名），CARDNO（证件号），MOBILE（手机号），BANKNO（银行卡号），BANKPHONE（银行预留手机号）；可选多项。
	ModifyFields []string `json:"modifyFields,omitempty"`
	// <ext>core:true</ext> 【回调地址】回调地址 【作用】 用户核验身份成功后，向回调地址回调核验结果以及核验信息。
	CallbackUrl string `json:"callbackUrl,omitempty"`
	// <ext>core:false</ext> 【核验成功后跳转地址】核验成功后跳转地址 【作用】 当核验成功后页面自动跳转至指定地址，不传值时默认为：返回上一级页面
	SuccessPage string `json:"successPage,omitempty"`
	// <ext>core:false</ext> 【是否隐藏成功页面】是否隐藏成功页面 【作用】 是否隐藏用户核验成功后的详细信息页面 【传参】 取值范围：true（隐藏），false（不隐藏）；默认为：false（不隐藏）。
	HideSuccessStatusPage *bool `json:"hideSuccessStatusPage,omitempty"`
	// <ext>core:false</ext> 【核验成功是否自动关闭页面】核验成功是否自动关闭页面 【作用】 身份核验成功后，可通过此参数控制是否自动关闭页面 【传参】 取值范围：1（核验成功不自动关闭页面），2（核验成功自动关闭页面）；默认为：2（核验成功自动关闭页面） 【特殊说明】 若参数successPage传入了跳转地址，则此参数无论是否自动关闭，都优先跳转到传入的跳转地址，并关闭页面，若不传入，则按此参数控制是否自动给关闭页面
	AuthSuccessStayPage string `json:"authSuccessStayPage,omitempty"`
	// <ext>core:true</ext> 【人脸核验模式】人脸核验模式 【作用】 若核验方式指定人脸识别且为腾讯云，可指定腾讯人脸核验模式 1、实时扫脸模式：即用户在进行人脸识别时可通过连续眨眼、屏幕变光等效果实现实时检测 2、视频录制模式：即用户在进行人脸识别时，需要录制一段连续眨眼的视频，然后上传视频进行检测 【传参】 取值范围：1（实时扫脸模式），2（视频录制模式）。如果不传值，默认值由电子签厂商后台配置决定。 【特殊说明】 1、如果是在 APP 中集成，并且需要实时扫脸，需要该 APP 做对应的兼容性配置，详情参考:https://open.qiyuesuo.com/document?id=3091925715390829267 2、如果想实现在 iframe 中实时刷脸的效果，需要在 iframe 内加入属性allow=\"microphone *;camera *\"
	TencentMode string `json:"tencentMode,omitempty"`
	// <ext>core:true</ext> 【银行卡卡号】银行卡卡号 【作用】 核验方式为银行卡四要素核验时，可传入用户本人开户的银行卡卡号
	BankNo string `json:"bankNo,omitempty"`
	// <ext>core:true</ext> 【银行卡预留手机号】银行卡预留手机号 【作用】 核验方式为银行卡四要素核验时，可传入用户办理银行卡时预留的手机号 【传参】 字符串，仅允许使用大陆手机号。
	BankPhone string `json:"bankPhone,omitempty"`
	// <ext>core:true</ext> 【第三方业务系统名称】第三方业务系统名称 【作用】 可传入用户核验身份时所在的第三方业务系统名称，用于记录在可信数字身份存证报告中 【传参】 最大长度：200。
	CustomerSysName string `json:"customerSysName,omitempty"`
	// <ext>core:true;format:string</ext> 【第三方业务系统id】第三方业务系统id 【作用】 可传入用户核验身份时所在的第三方业务系统id，用于记录在可信数字身份存证报告中 【传参】 最大长度：20。
	CustomerSysId string `json:"customerSysId,omitempty"`
	// <ext>core:true</ext> 【数据摘要】数据摘要 【作用】 进行身份核验时，同时也有相关的业务数据需要进行存证，可自行计算hash值后传入，后续此信息将会记录在存证报告中 【传参】 1、推荐使用 SHA256 哈希算法。 2、最大长度：150。
	DataHash string `json:"dataHash,omitempty"`
}

func (obj IdentityAuthUrlRequest) GetUrl() string {
	return "/identity/auth/url"
}

func (obj IdentityAuthUrlRequest) GetHttpParameter() *http.HttpParameter {
	parameter := http.NewPostHttpParameter()
	jsonBytes, _ := json.Marshal(obj)
	parameter.SetJsonParamer(string(jsonBytes))
	return parameter
}
