// 委托 package unionpay import ( "encoding/base64" ) // CustomerInfo 客户信息 type CustomerInfo struct { Phone string `form:"phone" json:"phone" xml:"phone"` // 手机号 CertifTp string `form:"certifTp" json:"certifTp" xml:"certifTp"` // 证件类型, 01 - 身份证 CertifID string `form:"certifId" json:"certifId" xml:"certifId"` // 证件号,15位身份证不校验尾号,18位会校验尾号 CustomerName string `form:"customerNm" json:"customerNm" xml:"customerNm"` // 姓名 Cvn2 string `form:"cvn2" json:"cvn2" xml:"cvn2"` // 信用卡安全码 Expired string `form:"expired" json:"expired" xml:"expired"` // 有效期,YYMM格式,持卡人卡面印的是MMYY的,请注意代码设置倒一下 } func sign() { } // filename 证书路径 func s(filename string, cardNo string, customerInfo CustomerInfo) { cert, data, e := GetCertificate(filename) if e != nil { return } var args = make(map[string]interface{}) args["version"] = "5.1.0" // 版本号 args["encoding"] = "utf-8" // 编码方式 args["signMethod"] = "01" // 签名方法 args["txnType"] = "72" // 交易类型 args["txnSubType"] = "11" // 交易子类 args["bizType"] = "000501" // 业务类型 args["accessType"] = "0" // 接入类型 args["channelType"] = "07" // 渠道类型 args["encryptCertId"] = cert.SerialNumber.String() // 验签证书序列号 args["merId"] = "" // 商户代码 args["orderId"] = "" // 商户订单号,8-32位数字字母,不能含“-”或“_” args["txnTime"] = "" // 订单发送时间,格式为YYYYMMDDhhmmss,取北京时间 accNo, err := RSAEncrypt(data, []byte(cardNo)) if err != nil { return } args["accNo"] = string(accNo) // 卡号,敏感信息加密方式 kvs := `phone=` + customerInfo.Phone kvs += `&certifTp=` + customerInfo.CertifTp kvs += `&certifId=` + customerInfo.CertifID kvs += `&customerNm=` + customerInfo.CustomerName // `&cvn2=&=expired` info := `{` + kvs + `}` args["customerInfo"] = base64.StdEncoding.EncodeToString([]byte(info)) // 持卡人身份信息,敏感信息不加密方式 }