|
@@ -0,0 +1,129 @@
|
|
|
+package unionpay
|
|
|
+
|
|
|
+import (
|
|
|
+ "fmt"
|
|
|
+ "net/url"
|
|
|
+ "strconv"
|
|
|
+
|
|
|
+ "git.chuangxin1.com/cx/util"
|
|
|
+)
|
|
|
+
|
|
|
+func getCustomerV3(ci CustomerInfo) (s string) {
|
|
|
+ s = "{" + ci.CertifTp + "|"
|
|
|
+ s += ci.CertifID + "|"
|
|
|
+ s += ci.CustomerName + "|"
|
|
|
+ s += ci.Phone + "|"
|
|
|
+ s += "|"
|
|
|
+ s += "|"
|
|
|
+ s += ci.Cvn2 + "|"
|
|
|
+ s += ci.Expired
|
|
|
+ s += "}"
|
|
|
+
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+func V3SendSms(mi *MerchantInfo, ci CustomerInfo, oi OrderInfo) (res ReqRespose, err error) {
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+func V3Verify(mi *MerchantInfo, ci CustomerInfo, oi OrderInfo) (res ReqRespose, err error) {
|
|
|
+ args := make(map[string]string)
|
|
|
+
|
|
|
+ args["version"] = "3.0.0"
|
|
|
+ args["encoding"] = "utf-8"
|
|
|
+ args["txnType"] = "72"
|
|
|
+ args["txnSubType"] = "01"
|
|
|
+ args["bizType"] = "000000"
|
|
|
+ args["accessType"] = "0"
|
|
|
+ args["merType"] = "0"
|
|
|
+ args["merId"] = mi.MerID
|
|
|
+ args["subMerId"] = ""
|
|
|
+ args["subMerName"] = ""
|
|
|
+ args["orderId"] = oi.OrderID
|
|
|
+ args["txnTime"] = oi.TxnTime
|
|
|
+ args["accType"] = "01"
|
|
|
+ args["accNo"] = ci.CardNo
|
|
|
+ args["customerInfo"] = base64Encode([]byte(getCustomerV3(ci)))
|
|
|
+ args["bindId"] = ""
|
|
|
+ args["riskLevel"] = ""
|
|
|
+ args["bindInfo"] = ""
|
|
|
+ args["reqReserved"] = ""
|
|
|
+ args["reserved"] = ""
|
|
|
+ args["encryptCertId"] = mi.SerialNumber()
|
|
|
+ args["userMac"] = ""
|
|
|
+ args["certId"] = mi.SerialNumber()
|
|
|
+
|
|
|
+ s := createLinkString(args, true, false)
|
|
|
+ sha1 := util.SHA1(s)
|
|
|
+
|
|
|
+ var data []byte
|
|
|
+ data, err = signsha1(mi.PrivateKey, []byte(sha1))
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ args["signature"] = base64Encode(data)
|
|
|
+ values := url.Values{}
|
|
|
+ for k, v := range args {
|
|
|
+ values.Add(k, v)
|
|
|
+ }
|
|
|
+ res, err = post(V3BaseHost+V3ReqBackTrans, []byte(values.Encode()))
|
|
|
+
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+func V3Charging(mi *MerchantInfo, ci CustomerInfo, oi OrderInfo) (res ReqRespose, err error) {
|
|
|
+ args := make(map[string]string)
|
|
|
+
|
|
|
+ args["version"] = "3.0.0"
|
|
|
+ args["encoding"] = "utf-8"
|
|
|
+ args["txnType"] = "11"
|
|
|
+ args["txnSubType"] = "00"
|
|
|
+ args["bizType"] = "000000"
|
|
|
+ args["backurl"] = ""
|
|
|
+ args["accessType"] = "0"
|
|
|
+ args["merType"] = "0"
|
|
|
+ args["merId"] = mi.MerID
|
|
|
+ args["subMerId"] = ""
|
|
|
+ args["subMerName"] = ""
|
|
|
+ args["orderId"] = oi.OrderID
|
|
|
+ args["txnTime"] = oi.TxnTime
|
|
|
+ args["currencyCode"] = "156"
|
|
|
+ args["accType"] = "01"
|
|
|
+ args["accNo"] = ci.CardNo
|
|
|
+ args["issInsCode"] = ""
|
|
|
+ args["customerInfo"] = base64Encode([]byte(getCustomerV3(ci)))
|
|
|
+ args["bindId"] = ""
|
|
|
+ args["riskLevel"] = ""
|
|
|
+ args["txnAmt"] = strconv.Itoa(oi.TxnAmt)
|
|
|
+ args["billType"] = "OT00"
|
|
|
+ args["billNo"] = ""
|
|
|
+ args["reqReserved"] = ""
|
|
|
+ args["reserved"] = ""
|
|
|
+ args["customerIp"] = ""
|
|
|
+ args["encryptCertId"] = mi.SerialNumber()
|
|
|
+ args["billPeriod"] = ""
|
|
|
+ args["certId"] = mi.SerialNumber()
|
|
|
+
|
|
|
+ s := createLinkString(args, true, false)
|
|
|
+ sha1 := util.SHA1(s)
|
|
|
+
|
|
|
+ fmt.Println("createLinkString", s)
|
|
|
+ var data []byte
|
|
|
+ data, err = signsha1(mi.PrivateKey, []byte(sha1))
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ args["signature"] = base64Encode(data)
|
|
|
+ values := url.Values{}
|
|
|
+ for k, v := range args {
|
|
|
+ values.Add(k, v)
|
|
|
+ }
|
|
|
+ res, err = post(V3BaseHost+V3ReqBackTrans, []byte(values.Encode()))
|
|
|
+
|
|
|
+ return
|
|
|
+}
|