v3.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. package unionpay
  2. import (
  3. "fmt"
  4. "net/url"
  5. "strconv"
  6. "git.chuangxin1.com/cx/util"
  7. )
  8. func getCustomerV3(ci CustomerInfo) (s string) {
  9. s = "{" + ci.CertifTp + "|"
  10. s += ci.CertifID + "|"
  11. s += ci.CustomerName + "|"
  12. s += ci.Phone + "|"
  13. s += "|" // SMS message
  14. s += "|" // password
  15. s += ci.Cvn2 + "|" // cvn2
  16. s += ci.Expired
  17. s += "}"
  18. return
  19. }
  20. // V3SendSms 发送验证码(Version 3.0)
  21. func V3SendSms(mi *MerchantInfo, ci CustomerInfo, oi OrderInfo) (res ReqRespose, err error) {
  22. return
  23. }
  24. // V3Verify 验证卡片(Version 3.0)
  25. func V3Verify(mi *MerchantInfo, ci CustomerInfo, oi OrderInfo) (res ReqRespose, err error) {
  26. args := make(map[string]string)
  27. args["version"] = "3.0.0"
  28. args["encoding"] = "utf-8"
  29. args["txnType"] = "72"
  30. args["txnSubType"] = "01"
  31. args["bizType"] = "000000"
  32. args["accessType"] = "0"
  33. args["merType"] = "0"
  34. args["merId"] = mi.MerID
  35. args["subMerId"] = ""
  36. args["subMerName"] = ""
  37. args["orderId"] = oi.OrderID
  38. args["txnTime"] = oi.TxnTime
  39. args["accType"] = "01"
  40. args["accNo"] = ci.CardNo // 账号, 不加密
  41. args["customerInfo"] = base64Encode([]byte(getCustomerV3(ci)))
  42. args["bindId"] = ""
  43. args["riskLevel"] = ""
  44. args["bindInfo"] = ""
  45. args["reqReserved"] = ""
  46. args["reserved"] = ""
  47. args["encryptCertId"] = mi.SerialNumber()
  48. args["userMac"] = ""
  49. args["certId"] = mi.SerialNumber()
  50. s := createLinkString(args, true, false)
  51. sha1 := util.SHA1(s)
  52. var data []byte
  53. data, err = signsha1(mi.PrivateKey, []byte(sha1))
  54. if err != nil {
  55. return
  56. }
  57. args["signature"] = base64Encode(data)
  58. values := url.Values{}
  59. for k, v := range args {
  60. values.Add(k, v)
  61. }
  62. res, err = post(V3BaseHost+V3ReqBackTrans, []byte(values.Encode()))
  63. return
  64. }
  65. // V3Charging 代扣(Version 3.0)
  66. func V3Charging(mi *MerchantInfo, ci CustomerInfo, oi OrderInfo) (res ReqRespose, err error) {
  67. args := make(map[string]string)
  68. args["version"] = "3.0.0"
  69. args["encoding"] = "utf-8"
  70. args["txnType"] = "11"
  71. args["txnSubType"] = "00"
  72. args["bizType"] = "000000"
  73. args["backurl"] = ""
  74. args["accessType"] = "0"
  75. args["merType"] = "0"
  76. args["merId"] = mi.MerID
  77. args["subMerId"] = ""
  78. args["subMerName"] = ""
  79. args["orderId"] = oi.OrderID
  80. args["txnTime"] = oi.TxnTime
  81. args["currencyCode"] = "156" // 交易币种
  82. args["accType"] = "01"
  83. args["accNo"] = ci.CardNo // 账号, 不加密
  84. args["issInsCode"] = "" // 发卡机构代码
  85. args["customerInfo"] = base64Encode([]byte(getCustomerV3(ci)))
  86. args["bindId"] = ""
  87. args["riskLevel"] = ""
  88. args["txnAmt"] = strconv.Itoa(oi.TxnAmt)
  89. args["billType"] = "OT00" // 账单类型
  90. args["billNo"] = "" // 账单号码
  91. args["reqReserved"] = ""
  92. args["reserved"] = ""
  93. args["customerIp"] = ""
  94. args["encryptCertId"] = mi.SerialNumber()
  95. args["billPeriod"] = "" // 账单周期
  96. args["certId"] = mi.SerialNumber()
  97. s := createLinkString(args, true, false)
  98. sha1 := util.SHA1(s)
  99. fmt.Println("createLinkString", s)
  100. var data []byte
  101. data, err = signsha1(mi.PrivateKey, []byte(sha1))
  102. if err != nil {
  103. return
  104. }
  105. args["signature"] = base64Encode(data)
  106. values := url.Values{}
  107. for k, v := range args {
  108. values.Add(k, v)
  109. }
  110. res, err = post(V3BaseHost+V3ReqBackTrans, []byte(values.Encode()))
  111. return
  112. }