entrust.go 2.3 KB

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