package luso_bank import ( zhios_pay_utils "code.fnuoos.com/go_rely_warehouse/zyos_go_pay.git/utils" "crypto" "encoding/base64" "fmt" "github.com/syyongx/php2go" "math/rand" "time" ) const ( MerchantId = "30010" TerminalNo = "98036140" PrivateKeyStr = "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDSYivjR7nXUazy\nf+F1i/nvuy/doiHRsiTSwavHIwKF88kzM95Eh5wGiXq6TXwFPhB5yeV8l3tFQxeu\nPycZeKmp0VBge+U+/UhR1rQwEX9U9LeKhVdjbNU0U8kNpO8qX/QqHSS7MCRILL2a\nS4F5U/wvYGkbqJ+qMUNmEMGwEkiVuDaO/Q4I3lMPNtLO+mizgq9jggEkVh+xG50p\nFATWd6CJh0mddBBgGG3/aG1ybV/IYRRP0sS+dbYKmKghbK2d/LztIM8ba7lA16H9\nxLY8oy8SvwGqkq2Gea9K2AIEjociac4i0Q/Ka2U881rJCrDUMg3gDhIundaa971M\nglS5cRe9AgMBAAECggEBALe9P6FHIlqYHZjI8QqtToL+E6bYk/rFP/3FYZYQ0IJW\n0NDkKunlGfJnnYUaaQdXFiKXntJ6phFusD7hLu/C/0Kt6Snq6uNhaAj5n/MfRPrY\no3faTuEpyubhigVdl/eFSASD4XGOcRGL6afY6+If5G8oH4QleBS246s/VTnGLhh6\n7cWv2PvFQOU6WzayYzs+8wIYPlVlhKIfuU7vbQF7sWIFfJg8zqVFe2lNXwGS3D2f\ns8AjjN9lMemWF/t9OIA4l9b/Mr2D1wc71AznTUXgBWqm747tWAYyEQ+r1PimbPMB\nEUi6qllpB0qhoEmSVQxONcR3GIep0IwDj8PHQtP55qECgYEA7cnP0yNcc1if7Dd/\nBh0xWGafMVkHIPbbBVOgR3FakaTuC5g0OQ7LP5O8OCW1pchyJY0HXLCEiRVSj5O7\n3MY59eIbdqpcBI7a+ZxOyBHEN2IqZ4EVZmkCxd7w7XA12D+mT19rc//F03FT78e5\neYniSWmj0ku1bSJ7oYb1g4mPf6kCgYEA4n8MKlYIf0JALvMgws78M75JMVpSVgDs\nOngZvMF7z7x4gkBxXxxc5ABe6k/RXCuz59n2IQU3NzS0Y3HxCvZyeJzh1X5ENSdD\nsyJVFkb4oC8nhKvztXT8CwH1vSIGMRUJNE3Gn8IrX8QdEWdvADz/+Iw81HtOh7lr\nAGyreWyLc/UCgYBBFaXuspURdUaAj0gTUlY5Tg1wol+TJD4anSMXqu0RREVrowNY\nQrZa9oLkE14+vDiSEqHbOu1r4AwzBEq9SPyAUp0Vw9df4AILpD7kAAjm59WXcvt6\nhm+d3UGwm7ABOpq4yvNMUsvA7hn9XXtkytrHIUUXwGUuM+wG8Duu/y3p0QKBgQC3\nsZKMQ3pgu7qSWV0YogapcIqsHDTqy5TLVtyI2eMweArEmL9aBAbSY/qWzmVd+5PN\nVljoLvK5M2WZwa9c1MPCTnpaTC3FbjLZ9d5MUwMR5yyFzW+6m0ZPJyfGXPHonMb6\nRJnyt+e1o7hvhRPhfZecXSB4tAjcyuSdU4U+1WnEgQKBgAUZFTYeIyC/bnIca5m8\nzh2wIW0KusCLPa9e3VGTARJG5WP6nx8BPVx71Er/wquBLLquoH0XlTmpdj80QF+s\nHlnKE9CfXVu23ci2S0WalbX/8CYGlO5iCct9o0KR0inrXKfqFzuSKkpg6JyXVMk0\nMT1+EUSD25ATIRsNGFWigNHL\n-----END PRIVATE KEY-----" MchtStoreNm = "世寶商城" PUBLICKEY = "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0mIr40e511Gs8n/hdYv5\n77sv3aIh0bIk0sGrxyMChfPJMzPeRIecBol6uk18BT4QecnlfJd7RUMXrj8nGXip\nqdFQYHvlPv1IUda0MBF/VPS3ioVXY2zVNFPJDaTvKl/0Kh0kuzAkSCy9mkuBeVP8\nL2BpG6ifqjFDZhDBsBJIlbg2jv0OCN5TDzbSzvpos4KvY4IBJFYfsRudKRQE1neg\niYdJnXQQYBht/2htcm1fyGEUT9LEvnW2CpioIWytnfy87SDPG2u5QNeh/cS2PKMv\nEr8BqpKthnmvStgCBI6HImnOItEPymtlPPNayQqw1DIN4A4SLp3Wmve9TIJUuXEX\nvQIDAQAB\n-----END PUBLIC KEY-----" ) type PayParam struct { Data string `json:"data"` Sign string `json:"sign"` } type DataParam struct { Head struct { MchtNo string `json:"mchtNo" explain:"商户编号"` ReqTime string `json:"reqTime" explain:"请求时间戳(yyyyMMddHHmmss)"` MsgId string `json:"msgId" explain:"请求消息唯一编号"` Attach string `json:"attach" explain:"附加数据(附加数据,用于在同步应答或异步通知时原样返回)"` CertId string `json:"certId" explain:"数字证书 ID(默认 01)"` Version string `json:"version" explain:"版本号(默认 1.0.0)"` } `json:"head"` ReqBody map[string]string `json:"reqBody"` } type signParam struct { PayParam *PayParam } func (payParam *PayParam) SetData(dataParam DataParam) *signParam { now := time.Now() rand.Seed(now.UnixNano()) randomInt := rand.Intn(100) dataParam.Head.MsgId = zhios_pay_utils.AnyToString(randomInt) + dataParam.Head.MchtNo + now.Format("20060102150405") dataParam.Head.ReqTime = now.Format("20060102150405") dataParam.Head.CertId = "01" dataParam.Head.Version = "1.0.0" if dataParam.ReqBody["mchtOrderId"] != "" { dataParam.Head.MsgId = dataParam.ReqBody["mchtOrderId"] + now.Format("20060102150405") } payParam.Data = zhios_pay_utils.SerializeStr(dataParam) var signs signParam signs.PayParam = payParam return &signs } func (s *signParam) SetSign(privateKeyStr string) error { dataParamBase64Str := base64.StdEncoding.EncodeToString([]byte(s.PayParam.Data)) signStr, err := zhios_pay_utils.GetSignV2(privateKeyStr, dataParamBase64Str, crypto.SHA1) if err != nil { return err } s.PayParam.Sign = signStr s.PayParam.Data = dataParamBase64Str return nil } func (payParam *PayParam) Send(prd, isNeedEncode bool, method string) (string, error) { url := "https://qrpaytest.lusobank.com.mo:443" if prd { url = "https://qrpay.lusobank.com.mo:443" } switch method { case "create": url = url + "/upcp-iap-pps-lqrp/libQrPay/json/create" case "pay": url = url + "/upcp-iap-pps-lqrp/libQrPay/json/pay" case "revoke": url = url + "/upcp-iap-pps-lqrp/libQrPay/json/revoke" case "refund": url = url + "/upcp-iap-pps-lqrp/libQrPay/json/refund" case "query": url = url + "/upcp-iap-pps-lqrp/libQrPay/json/query" } headers := map[string]string{ "Content-Type": "application/json", } zhios_pay_utils.CurlDebug = true body := zhios_pay_utils.SerializeStr(payParam) if isNeedEncode { body = php2go.URLEncode(body) } res, err := zhios_pay_utils.CurlPost(url, body, headers) if err != nil { return "", err } fmt.Println(string(res)) return string(res), nil }