PaymentCenter/app/third/paymentService/payment_test.go

140 lines
15 KiB
Go

package paymentService
import (
"context"
"crypto/md5"
"encoding/hex"
"encoding/pem"
"errors"
"github.com/go-pay/gopay"
"github.com/tjfoc/gmsm/x509"
"os"
"strings"
"testing"
)
func TestMarketSendRequest_Market(t *testing.T) {
c := context.Background()
//appCertPath := "appCertPublicKey_2021003140624267.crt" // 应用公钥证书
//aliPayPublicCertPath := "alipayCertPublicKey_RSA2.crt" // 支付宝公钥证书
//aliPayRootCertPath := "alipayRootCert.crt" // 支付宝根证书
//sn, err := GetCertSN(appCertPath)
//getCertSN, err := GetCertSN(aliPayPublicCertPath)
//if err != nil {
// return
//}
//certSN, err := GetRootCertSN(aliPayRootCertPath)
//if err != nil {
// return
//}
//if err != nil {
// return
//}
request := PayOrderRequest{
OrderId: 12312312312,
ChannelType: 6,
Description: "测试商品",
Amount: 1,
PayerClientIp: "192.168.110.235",
Ali: AliPay{
AppId: "2021003140624267",
PrivateKey: "MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCYNADnzJNuCO4k2Amly9NrDr59zwkJJ91ugEl5FXKIKFkSxbH2JPfzz4iBAVNw3LxjDbaFXYHWl7/lDwaqZLrw/kMYdEM5/0WQcQkmIVP34Ch25EPhW4j55R/llNM2CECIzhJA2s8HbQmX6ZQPemJ58f5D7JhAHr5wPvGvFDKgsgWxp146vvAP09PjmYyqokSWSVGvtZxJMB0X3wXfoGYoPWEBxlWNuVdRhnreHLb19h+BzsOf/fiqOU0nJdJUlaYtKGdrmkKWmzs5eOZPpjjTggwap1mpOqAiKySUPVWod1pHjzelpU4XJglhtqojgaRvhKR4UptpZlzo3DddKRWZAgMBAAECggEAWZPJsKMDZfBVkFOhofWLEWgVDuBJthzDQuS32U6ZIK92dQjrSy3IzLKo6RwJqtQO/9EzSdyVrOGU68/jIWe1al6KyJqscjbeDzunocxdqfZAenCvzrNbs495LVpg0F0c9icqMQdWb01qJwEuxclGqfSVrA5UMPCnLlKtVVhyz4XuRvgGfNtKEb064bSP4x0v2IFJfptXyJfU+jQBFsKw+jpp1l+mioCgrfuo2jky9O4aZmuRxMRfljdHP1IVI8JXSbiLoSgWyS2RazzH4I1QZRDu9wXX/GVkW4wVQvgXj1fM4wRy3aY6rgHsmvWkCRw2pR5ALVgHbrqWvZefg+K8AQKBgQDLPr9SwWL3rAuTPFJSPgBMkNUELcGzidHwKMdWTVm7fBNJfljP9iBaL4tega1J76DPXZv9Ed1AYwLMbAYJy+HDh2z2v6hejKYLfbCE3njM/JNantjdUdRaPQCdANxtR5fNGeWg5jmoxVykkxEuI2OBV6H2VHF2Uu+pH9dttudXgQKBgQC/tZ0wPpNqzNNnyUiqH1fRvZEfAIltassxYyEWs0wQfIAwIcC7W7/qDAecC+1AQ2GJUsIEN+XERHxm3mlW4ZO4uhv2F8RBH2L678UYMVcmLIdu09Dhs6cgOSz+RE05pZ44iwtcZMN49Jj/oA8UsgsyRt0W/vSzBG/oztLh7maKGQKBgBTE17Y0LtHSUeh8zIi87zjjv/DKYDXhioN5F02ZX+cJucrTz22I4Ct3Gk3RAI1CoHMwRKVqsupGc93B2CgeHnblmtvoH+NxifI4qNYbCcsgsEodW1naZ9HE1BA3K087dqat08pKXHADowDqSmIlmaB4/QL4BBQsS3ND3rbGbwOBAoGABCmeWyDQtJ3z7Sn6sO7zSjOShhjN4xlRhiX/3u1Ptn/tjJ3/AFJyrVNLiwDbSuzrnj60xcCs9YEDLnyfzuog+f7YgpRrh3p1/LreDbNskAChhC+HNo9fDp0PNAopnxnQgKvMOFpbwDGXbN191lYzVgkh3dD1YTm0cFqlS5CQm2kCgYBbXqL/XUr+TUVcQTU+MF2/j6i7kaRKfgpu3/PPBBHK+FsCrv6dFgqH4W3aW+ea/PyyUMX3e0DkdwDefHNqvNGpkde6E4s0L1Oigied88PTgEwvOnKLJKpskztFXxov21C3O8BQrj/p2L5aCek/g5GXbBco9M46Y7zrrPzYX2GgUw==",
AppPublicCert: []byte("-----BEGIN CERTIFICATE-----\nMIIEhTCCA22gAwIBAgIQICQIATSiK0uukHhZeagASDANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UE\nBhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmljYXRpb24gQXV0\naG9yaXR5MTkwNwYDVQQDDDBBbnQgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IENs\nYXNzIDEgUjEwHhcNMjQwODAxMDgxOTQ1WhcNMjkwNzMxMDgxOTQ1WjBNMQswCQYDVQQGEwJDTjES\nMBAGA1UECgwJ6ZmI5L+K5a6PMQ8wDQYDVQQLDAZBbGlwYXkxGTAXBgNVBAMMEDIwODg2MDIzMjc1\nMjQyMjMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYNADnzJNuCO4k2Amly9NrDr59\nzwkJJ91ugEl5FXKIKFkSxbH2JPfzz4iBAVNw3LxjDbaFXYHWl7/lDwaqZLrw/kMYdEM5/0WQcQkm\nIVP34Ch25EPhW4j55R/llNM2CECIzhJA2s8HbQmX6ZQPemJ58f5D7JhAHr5wPvGvFDKgsgWxp146\nvvAP09PjmYyqokSWSVGvtZxJMB0X3wXfoGYoPWEBxlWNuVdRhnreHLb19h+BzsOf/fiqOU0nJdJU\nlaYtKGdrmkKWmzs5eOZPpjjTggwap1mpOqAiKySUPVWod1pHjzelpU4XJglhtqojgaRvhKR4Uptp\nZlzo3DddKRWZAgMBAAGjggEpMIIBJTAfBgNVHSMEGDAWgBRxB+IEYRbk5fJl6zEPyeD0PJrVkTAd\nBgNVHQ4EFgQUyzUfsFBHwX1WrVU34DqmiPWcJrkwQAYDVR0gBDkwNzA1BgdggRwBbgEBMCowKAYI\nKwYBBQUHAgEWHGh0dHA6Ly9jYS5hbGlwYXkuY29tL2Nwcy5wZGYwDgYDVR0PAQH/BAQDAgbAMC8G\nA1UdHwQoMCYwJKAioCCGHmh0dHA6Ly9jYS5hbGlwYXkuY29tL2NybDkyLmNybDBgBggrBgEFBQcB\nAQRUMFIwKAYIKwYBBQUHMAKGHGh0dHA6Ly9jYS5hbGlwYXkuY29tL2NhNi5jZXIwJgYIKwYBBQUH\nMAGGGmh0dHA6Ly9jYS5hbGlwYXkuY29tOjgzNDAvMA0GCSqGSIb3DQEBCwUAA4IBAQA5k9ffbPz6\nMrHFGdMrmjLjAKNaRCVLnfkk+i2AvmqGouoXKPTnM+dT6i4FeXWsW+c3VfLFND7Wpi6kgEnj/Ngl\nIBciDaPto2nEPagHsAPlO3Kak4k4oXusn/SR1OY9AcWiCvWpmJVOhmescQlugy8c0FK2zSjJhRHb\nMEVD9jAvcxE+NVYC3ePXZvWD0t+95TQuLIID6qprBsr/FouzRQuYYirKkx9YVS9yFhOsSyhYRbwr\naxbBFhKEX4C2UntpuTfwf99Sw7jvhJF2CfyxloRxt/s0WZg4TVNl983ne8FK3igIq9i/gl7A2vnq\n+IDA+t0ojOpKKB3P8DutsdEQeEAt\n-----END CERTIFICATE-----"),
AlipayRootCert: []byte("-----BEGIN CERTIFICATE-----\nMIIBszCCAVegAwIBAgIIaeL+wBcKxnswDAYIKoEcz1UBg3UFADAuMQswCQYDVQQG\nEwJDTjEOMAwGA1UECgwFTlJDQUMxDzANBgNVBAMMBlJPT1RDQTAeFw0xMjA3MTQw\nMzExNTlaFw00MjA3MDcwMzExNTlaMC4xCzAJBgNVBAYTAkNOMQ4wDAYDVQQKDAVO\nUkNBQzEPMA0GA1UEAwwGUk9PVENBMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAE\nMPCca6pmgcchsTf2UnBeL9rtp4nw+itk1Kzrmbnqo05lUwkwlWK+4OIrtFdAqnRT\nV7Q9v1htkv42TsIutzd126NdMFswHwYDVR0jBBgwFoAUTDKxl9kzG8SmBcHG5Yti\nW/CXdlgwDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFEwysZfZ\nMxvEpgXBxuWLYlvwl3ZYMAwGCCqBHM9VAYN1BQADSAAwRQIgG1bSLeOXp3oB8H7b\n53W+CKOPl2PknmWEq/lMhtn25HkCIQDaHDgWxWFtnCrBjH16/W3Ezn7/U/Vjo5xI\npDoiVhsLwg==\n-----END CERTIFICATE-----\n\n-----BEGIN CERTIFICATE-----\nMIIF0zCCA7ugAwIBAgIIH8+hjWpIDREwDQYJKoZIhvcNAQELBQAwejELMAkGA1UE\nBhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmlj\nYXRpb24gQXV0aG9yaXR5MTEwLwYDVQQDDChBbnQgRmluYW5jaWFsIENlcnRpZmlj\nYXRpb24gQXV0aG9yaXR5IFIxMB4XDTE4MDMyMTEzNDg0MFoXDTM4MDIyODEzNDg0\nMFowejELMAkGA1UEBhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNV\nBAsMF0NlcnRpZmljYXRpb24gQXV0aG9yaXR5MTEwLwYDVQQDDChBbnQgRmluYW5j\naWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFIxMIICIjANBgkqhkiG9w0BAQEF\nAAOCAg8AMIICCgKCAgEAtytTRcBNuur5h8xuxnlKJetT65cHGemGi8oD+beHFPTk\nrUTlFt9Xn7fAVGo6QSsPb9uGLpUFGEdGmbsQ2q9cV4P89qkH04VzIPwT7AywJdt2\nxAvMs+MgHFJzOYfL1QkdOOVO7NwKxH8IvlQgFabWomWk2Ei9WfUyxFjVO1LVh0Bp\ndRBeWLMkdudx0tl3+21t1apnReFNQ5nfX29xeSxIhesaMHDZFViO/DXDNW2BcTs6\nvSWKyJ4YIIIzStumD8K1xMsoaZBMDxg4itjWFaKRgNuPiIn4kjDY3kC66Sl/6yTl\nYUz8AybbEsICZzssdZh7jcNb1VRfk79lgAprm/Ktl+mgrU1gaMGP1OE25JCbqli1\nPbw/BpPynyP9+XulE+2mxFwTYhKAwpDIDKuYsFUXuo8t261pCovI1CXFzAQM2w7H\nDtA2nOXSW6q0jGDJ5+WauH+K8ZSvA6x4sFo4u0KNCx0ROTBpLif6GTngqo3sj+98\nSZiMNLFMQoQkjkdN5Q5g9N6CFZPVZ6QpO0JcIc7S1le/g9z5iBKnifrKxy0TQjtG\nPsDwc8ubPnRm/F82RReCoyNyx63indpgFfhN7+KxUIQ9cOwwTvemmor0A+ZQamRe\n9LMuiEfEaWUDK+6O0Gl8lO571uI5onYdN1VIgOmwFbe+D8TcuzVjIZ/zvHrAGUcC\nAwEAAaNdMFswCwYDVR0PBAQDAgEGMAwGA1UdEwQFMAMBAf8wHQYDVR0OBBYEFF90\ntATATwda6uWx2yKjh0GynOEBMB8GA1UdIwQYMBaAFF90tATATwda6uWx2yKjh0Gy\nnOEBMA0GCSqGSIb3DQEBCwUAA4ICAQCVYaOtqOLIpsrEikE5lb+UARNSFJg6tpkf\ntJ2U8QF/DejemEHx5IClQu6ajxjtu0Aie4/3UnIXop8nH/Q57l+Wyt9T7N2WPiNq\nJSlYKYbJpPF8LXbuKYG3BTFTdOVFIeRe2NUyYh/xs6bXGr4WKTXb3qBmzR02FSy3\nIODQw5Q6zpXj8prYqFHYsOvGCEc1CwJaSaYwRhTkFedJUxiyhyB5GQwoFfExCVHW\n05ZFCAVYFldCJvUzfzrWubN6wX0DD2dwultgmldOn/W/n8at52mpPNvIdbZb2F41\nT0YZeoWnCJrYXjq/32oc1cmifIHqySnyMnavi75DxPCdZsCOpSAT4j4lAQRGsfgI\nkkLPGQieMfNNkMCKh7qjwdXAVtdqhf0RVtFILH3OyEodlk1HYXqX5iE5wlaKzDop\nPKwf2Q3BErq1xChYGGVS+dEvyXc/2nIBlt7uLWKp4XFjqekKbaGaLJdjYP5b2s7N\n1dM0MXQ/f8XoXKBkJNzEiM3hfsU6DOREgMc1DIsFKxfuMwX3EkVQM1If8ghb6x5Y\njXayv+NLbidOSzk4vl5QwngO/JYFMkoc6i9LNwEaEtR9PhnrdubxmrtM+RjfBm02\n77q3dSWFESFQ4QxYWew4pHE0DpWbWy/iMIKQ6UZ5RLvB8GEcgt8ON7BBJeMc+Dyi\nkT9qhqn+lw==\n-----END CERTIFICATE-----\n\n-----BEGIN CERTIFICATE-----\nMIICiDCCAgygAwIBAgIIQX76UsB/30owDAYIKoZIzj0EAwMFADB6MQswCQYDVQQG\nEwJDTjEWMBQGA1UECgwNQW50IEZpbmFuY2lhbDEgMB4GA1UECwwXQ2VydGlmaWNh\ndGlvbiBBdXRob3JpdHkxMTAvBgNVBAMMKEFudCBGaW5hbmNpYWwgQ2VydGlmaWNh\ndGlvbiBBdXRob3JpdHkgRTEwHhcNMTkwNDI4MTYyMDQ0WhcNNDkwNDIwMTYyMDQ0\nWjB6MQswCQYDVQQGEwJDTjEWMBQGA1UECgwNQW50IEZpbmFuY2lhbDEgMB4GA1UE\nCwwXQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxMTAvBgNVBAMMKEFudCBGaW5hbmNp\nYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgRTEwdjAQBgcqhkjOPQIBBgUrgQQA\nIgNiAASCCRa94QI0vR5Up9Yr9HEupz6hSoyjySYqo7v837KnmjveUIUNiuC9pWAU\nWP3jwLX3HkzeiNdeg22a0IZPoSUCpasufiLAnfXh6NInLiWBrjLJXDSGaY7vaokt\nrpZvAdmjXTBbMAsGA1UdDwQEAwIBBjAMBgNVHRMEBTADAQH/MB0GA1UdDgQWBBRZ\n4ZTgDpksHL2qcpkFkxD2zVd16TAfBgNVHSMEGDAWgBRZ4ZTgDpksHL2qcpkFkxD2\nzVd16TAMBggqhkjOPQQDAwUAA2gAMGUCMQD4IoqT2hTUn0jt7oXLdMJ8q4vLp6sg\nwHfPiOr9gxreb+e6Oidwd2LDnC4OUqCWiF8CMAzwKs4SnDJYcMLf2vpkbuVE4dTH\nRglz+HGcTLWsFs4KxLsq7MuU+vJTBUeDJeDjdA==\n-----END CERTIFICATE-----\n\n-----BEGIN CERTIFICATE-----\nMIIDxTCCAq2gAwIBAgIUEMdk6dVgOEIS2cCP0Q43P90Ps5YwDQYJKoZIhvcNAQEF\nBQAwajELMAkGA1UEBhMCQ04xEzARBgNVBAoMCmlUcnVzQ2hpbmExHDAaBgNVBAsM\nE0NoaW5hIFRydXN0IE5ldHdvcmsxKDAmBgNVBAMMH2lUcnVzQ2hpbmEgQ2xhc3Mg\nMiBSb290IENBIC0gRzMwHhcNMTMwNDE4MDkzNjU2WhcNMzMwNDE4MDkzNjU2WjBq\nMQswCQYDVQQGEwJDTjETMBEGA1UECgwKaVRydXNDaGluYTEcMBoGA1UECwwTQ2hp\nbmEgVHJ1c3QgTmV0d29yazEoMCYGA1UEAwwfaVRydXNDaGluYSBDbGFzcyAyIFJv\nb3QgQ0EgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOPPShpV\nnJbMqqCw6Bz1kehnoPst9pkr0V9idOwU2oyS47/HjJXk9Rd5a9xfwkPO88trUpz5\n4GmmwspDXjVFu9L0eFaRuH3KMha1Ak01citbF7cQLJlS7XI+tpkTGHEY5pt3EsQg\nwykfZl/A1jrnSkspMS997r2Gim54cwz+mTMgDRhZsKK/lbOeBPpWtcFizjXYCqhw\nWktvQfZBYi6o4sHCshnOswi4yV1p+LuFcQ2ciYdWvULh1eZhLxHbGXyznYHi0dGN\nz+I9H8aXxqAQfHVhbdHNzi77hCxFjOy+hHrGsyzjrd2swVQ2iUWP8BfEQqGLqM1g\nKgWKYfcTGdbPB1MCAwEAAaNjMGEwHQYDVR0OBBYEFG/oAMxTVe7y0+408CTAK8hA\nuTyRMB8GA1UdIwQYMBaAFG/oAMxTVe7y0+408CTAK8hAuTyRMA8GA1UdEwEB/wQF\nMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBLnUTfW7hp\nemMbuUGCk7RBswzOT83bDM6824EkUnf+X0iKS95SUNGeeSWK2o/3ALJo5hi7GZr3\nU8eLaWAcYizfO99UXMRBPw5PRR+gXGEronGUugLpxsjuynoLQu8GQAeysSXKbN1I\nUugDo9u8igJORYA+5ms0s5sCUySqbQ2R5z/GoceyI9LdxIVa1RjVX8pYOj8JFwtn\nDJN3ftSFvNMYwRuILKuqUYSHc2GPYiHVflDh5nDymCMOQFcFG3WsEuB+EYQPFgIU\n1DHmdZcz7Llx8UOZXX2JupWCYzK1XhJb+r4hK5ncf/w8qGtYlmyJpxk3hr1TfUJX\nYf4Zr0fJsGuv\n-----END CERTIFICATE-----"),
AlipayPublicCert: []byte("-----BEGIN CERTIFICATE-----\nMIIDljCCAn6gAwIBAgIQICQIAVaBz6Cq6s3snHwxkTANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UE\nBhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmljYXRpb24gQXV0\naG9yaXR5MTkwNwYDVQQDDDBBbnQgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IENs\nYXNzIDIgUjEwHhcNMjQwODAxMDgxOTQ1WhcNMjkwNzMxMDgxOTQ1WjB3MQswCQYDVQQGEwJDTjES\nMBAGA1UECgwJ6ZmI5L+K5a6PMQ8wDQYDVQQLDAZBbGlwYXkxQzBBBgNVBAMMOuaUr+S7mOWunSjk\nuK3lm70p572R57uc5oqA5pyv5pyJ6ZmQ5YWs5Y+4LTIwODg2MDIzMjc1MjQyMjMwggEiMA0GCSqG\nSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6sezAFwgc1ZdcjhiKgzwJVkx22JFF1WeOneBi7ySk4GX6\n+fNT/dAnIq7RLgUzbo/rgIlZVQiybKHCPiTnqboovAQjunFERilKKkjlBNVEF6FmMkEFVz0J5OkJ\nkgrPL+qUkPckrT1iHKhKpxifhOJgJk2j/xd3aPt8sAiy/ks2nv4JLPItVmQhFI6Fm7wPzG/qsuS/\n+zQpQRDp5ahiDBLkoMReV7k13o3WTW6pJaFMRVPvQhVs+IlbaAb9zgOfQrstYD6at3CeKa70/XDy\nIOt20hGtluUmgPSlSw0hDMAvlaZXgIEDcHfnbl1uNXgox3IoZ2BAkXh+ZDpxANHFotvfAgMBAAGj\nEjAQMA4GA1UdDwEB/wQEAwID+DANBgkqhkiG9w0BAQsFAAOCAQEAhw6OpEeHLUGFUW4x0/kiULM7\n/z8pzu6yDuk+V6buhQErPBmo6E2cAfw5YAAPADvanNVV7V/qV5PG3IgI5MsblH6pLf4cusOUYBRP\nqTJu7BXsGiXiLfBtTPBP/dBIuStru4pg31pNX+QCseed9X26gd8oPKEjC2Zsk7eSPqPzhC9uUeNc\n2yUTHzsgXJNU8pZj37XvKlKlmyGP0xnzghQINND9ckj3a2blBwnj4yX8uH0xUzu+KM/LSt9U8+B+\nfychPXzLWST+zmVGB1QrdXETD5wWCJOCFCTefwmkdgLZxIOYVqxNVGk7/Mbs6zfkR4vXtXC7aOJX\nvU3sP3ZTuuL+ww==\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIE4jCCAsqgAwIBAgIIYsSr5bKAMl8wDQYJKoZIhvcNAQELBQAwejELMAkGA1UEBhMCQ04xFjAU\nBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmljYXRpb24gQXV0aG9yaXR5MTEw\nLwYDVQQDDChBbnQgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFIxMB4XDTE4MDMy\nMjE0MzQxNVoXDTM3MTEyNjE0MzQxNVowgYIxCzAJBgNVBAYTAkNOMRYwFAYDVQQKDA1BbnQgRmlu\nYW5jaWFsMSAwHgYDVQQLDBdDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTE5MDcGA1UEAwwwQW50IEZp\nbmFuY2lhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBDbGFzcyAyIFIxMIIBIjANBgkqhkiG9w0B\nAQEFAAOCAQ8AMIIBCgKCAQEAsLMfYaoRoPRbmDcAfXPCmKf43pWRN5yTXa/KJWO0l+mrgQvs89bA\nNEvbDUxlkGwycwtwi5DgBuBgVhLliXu+R9CYgr2dXs8D8Hx/gsggDcyGPLmVrDOnL+dyeauheARZ\nfA3du60fwEwwbGcVIpIxPa/4n3IS/ElxQa6DNgqxh8J9Xwh7qMGl0JK9+bALuxf7B541Gr4p0WEN\nG8fhgjBV4w4ut9eQLOoa1eddOUSZcy46Z7allwowwgt7b5VFfx/P1iKJ3LzBMgkCK7GZ2kiLrL7R\niqV+h482J7hkJD+ardoc6LnrHO/hIZymDxok+VH9fVeUdQa29IZKrIDVj65THQIDAQABo2MwYTAf\nBgNVHSMEGDAWgBRfdLQEwE8HWurlsdsio4dBspzhATAdBgNVHQ4EFgQUSqHkYINtUSAtDPnS8Xoy\noP9p7qEwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADggIB\nAIQ8TzFy4bVIVb8+WhHKCkKNPcJe2EZuIcqvRoi727lZTJOfYy/JzLtckyZYfEI8J0lasZ29wkTt\na1IjSo+a6XdhudU4ONVBrL70U8Kzntplw/6TBNbLFpp7taRALjUgbCOk4EoBMbeCL0GiYYsTS0mw\n7xdySzmGQku4GTyqutIGPQwKxSj9iSFw1FCZqr4VP4tyXzMUgc52SzagA6i7AyLedd3tbS6lnR5B\nL+W9Kx9hwT8L7WANAxQzv/jGldeuSLN8bsTxlOYlsdjmIGu/C9OWblPYGpjQQIRyvs4Cc/mNhrh+\n14EQgwuemIIFDLOgcD+iISoN8CqegelNcJndFw1PDN6LkVoiHz9p7jzsge8RKay/QW6C03KNDpWZ\nEUCgCUdfHfo8xKeR+LL1cfn24HKJmZt8L/aeRZwZ1jwePXFRVtiXELvgJuM/tJDIFj2KD337iV64\nfWcKQ/ydDVGqfDZAdcU4hQdsrPWENwPTQPfVPq2NNLMyIH9+WKx9Ed6/WzeZmIy5ZWpX1TtTolo6\nOJXQFeItMAjHxW/ZSZTok5IS3FuRhExturaInnzjYpx50a6kS34c5+c8hYq7sAtZ/CNLZmBnBCFD\naMQqT8xFZJ5uolUaSeXxg7JFY1QsYp5RKvj4SjFwCGKJ2+hPPe9UyyltxOidNtxjaknOCeBHytOr\n-----END CERTIFICATE-----\n"),
},
}
PaymentService(c, request)
}
func GetCertSN(certPathOrData any) (sn string, err error) {
var certData []byte
switch pathOrData := certPathOrData.(type) {
case string:
certData, err = os.ReadFile(pathOrData)
if err != nil {
return gopay.NULL, err
}
case []byte:
certData = pathOrData
default:
return gopay.NULL, errors.New("certPathOrData 证书类型断言错误")
}
if block, _ := pem.Decode(certData); block != nil {
cert, err := x509.ParseCertificate(block.Bytes)
if err != nil {
return gopay.NULL, err
}
name := cert.Issuer.String()
serialNumber := cert.SerialNumber.String()
h := md5.New()
h.Write([]byte(name))
h.Write([]byte(serialNumber))
sn = hex.EncodeToString(h.Sum(nil))
}
if sn == gopay.NULL {
return gopay.NULL, errors.New("failed to get sn,please check your cert")
}
return sn, nil
}
func GetRootCertSN(rootCertPathOrData any) (sn string, err error) {
var (
certData []byte
certEnd = `-----END CERTIFICATE-----`
)
switch pathOrData := rootCertPathOrData.(type) {
case string:
certData, err = os.ReadFile(pathOrData)
if err != nil {
return gopay.NULL, err
}
case []byte:
certData = pathOrData
default:
return gopay.NULL, errors.New("rootCertPathOrData 断言异常")
}
pems := strings.Split(string(certData), certEnd)
for _, c := range pems {
if block, _ := pem.Decode([]byte(c + certEnd)); block != nil {
cert, err := x509.ParseCertificate(block.Bytes)
if err != nil {
continue
}
if !allowSignatureAlgorithm[cert.SignatureAlgorithm.String()] {
continue
}
name := cert.Issuer.String()
serialNumber := cert.SerialNumber.String()
h := md5.New()
h.Write([]byte(name))
h.Write([]byte(serialNumber))
if sn == gopay.NULL {
sn += hex.EncodeToString(h.Sum(nil))
} else {
sn += "_" + hex.EncodeToString(h.Sum(nil))
}
}
}
if sn == gopay.NULL {
return gopay.NULL, errors.New("failed to get sn,please check your cert")
}
return sn, nil
}
// 允许进行 sn 提取的证书签名算法
var allowSignatureAlgorithm = map[string]bool{
"MD2-RSA": true,
"MD5-RSA": true,
"SHA1-RSA": true,
"SHA256-RSA": true,
"SHA384-RSA": true,
"SHA512-RSA": true,
"SHA256-RSAPSS": true,
"SHA384-RSAPSS": true,
"SHA512-RSAPSS": true,
}