123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 |
- 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) {
- args := make(map[string]string)
- args["version"] = "3.0.0"
- args["encoding"] = "utf-8"
- args["txnType"] = "77"
- args["txnSubType"] = "00"
- args["bizType"] = "000000"
- args["accessType"] = "0"
- args["merType"] = "0"
- args["merId"] = mi.MerID
- args["merName"] = ""
- args["merAbbr"] = "珠海城建公共资源"
- args["smsType"] = ""
- args["subMerId"] = ""
- args["subMerName"] = ""
- args["subMerAbbr"] = ""
- args["accType"] = "01"
- args["accNo"] = ci.CardNo
- args["orderId"] = oi.OrderID
- args["txnTime"] = oi.TxnTime
- args["txnAmt"] = strconv.Itoa(oi.TxnAmt)
- args["currencyCode"] = "156"
- args["customerInfo"] = ci.Phone
- args["bindId"] = ""
- args["reqReserved"] = ""
- args["reserved"] = ""
-
- 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 V3Bind(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"] = ci.CardNo
- 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 V3Remove(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"] = "74"
- args["txnSubType"] = "00"
- 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["accNo"] = ci.CardNo
-
- args["bindId"] = ci.CardNo
- args["riskLevel"] = ""
-
- args["reqReserved"] = ""
- args["reserved"] = ""
-
-
- 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
- }
|