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,
}