PaymentCenter/app/third/paymentService/payment_test.go

147 lines
14 KiB
Go

package paymentService
import (
"PaymentCenter/bootstrap"
"PaymentCenter/config"
"context"
"crypto/md5"
"encoding/hex"
"encoding/pem"
"errors"
"fmt"
"github.com/go-pay/gopay"
"github.com/qit-team/snow-core/kernel/server"
"github.com/tjfoc/gmsm/x509"
"os"
"strings"
"testing"
)
func TestMarketSendRequest_Market(t *testing.T) {
c := context.Background()
//解析启动命令
opts := config.GetOptions()
if opts.ShowVersion {
fmt.Printf("%s\ncommit %s\nbuilt on %s\n", server.Version, server.BuildCommit, server.BuildDate)
os.Exit(0)
}
//加载配置
opts.ConfFile = "../../../.env"
conf, err := config.Load(opts.ConfFile)
if err != nil {
return
}
//引导程序
err = bootstrap.Bootstrap(conf)
if err != nil {
return
}
request := PayOrderRequest{
OrderId: 12312312312,
ChannelType: 6,
Description: "测试商品",
Amount: 1,
PayerClientIp: "192.168.110.235",
Ali: AliPay{
AppId: "9021000139661858",
PrivateKey: "MIIEogIBAAKCAQEAiJ6MGX+/0oDMbVcFOew70ukNft55HvBmfD2+oBMMZ7ZfvPXGTQYtsA/0Q8BY9CMQh/Oa42jXiM7Upn3STMD7ZcaNtdJcUItQln1xfjKBQHfl2TPnvyVpOP96QsJQCOga5ThI9Nuv6R7nVsO+4HvbJ4m8fuRQboBwhf88pqfDMbvjd6WW7ZcqO7GoFODmbIsGZrakMMJ5taMY+gYZhPGlZSMUFq7NzGIcw4rdpRE4j24nUwbkIC6S5pcbLPz1j6gbp4u9FYXPNhq09P9m8ho/UctKPYA/Awx3sh4STTCUFND0hSBRS88IF7Ta5IEkMx8mpekh4mXH/DMNu6SnbuoV4wIDAQABAoIBAG8aAHT8HtLhS13f1rA0HLJ4NDFoWrd+aNnAnLUwyHXPKixQ8uLQk3cKgmpWkgB4Q4lL4jntmNn42ZZL3CnvBoLN5ZBncgtOQEsh2Jn4GISE/LaWL3CSy+8+U/7WZp/XoYenLi1yOqwqJZe5uBB2qNKOgGvw4Df824Uc/AXLiEF4ik07fSxGUmLbri5OASJqyMHu4iFYGd+Vc1ulafBDoSVuj5UPqNINba6YdJUU32P9xvkQkjosdjlf5nkzDXqDmNiXfee4mhFD1lpQvpRrZ2xRB78PA6Lzm9agrXnjbrVcaAzqY+J3TtViLZuN4iDBOo9niLEGQcSPDS6cdoMx2YECgYEAv+PxOsk3O0nxAD+VxKmUxtCZBnESz+ZlWblWbaOO02aSKT2E6bFMxbcLez5xiZUx+av7yb/RBRGQNbNeybHcL+KgfTywYAX7fEMGQjBrROlzQq29JWu+tVprnmG5108VWjbkQnEK95bTZKgQpiqbG3rSVnKHxhhQzqPr+KJnWP0CgYEAtkNdT7s40jvZUhfeAI8HQZmw7Og3QaK/AEQGkPRNwW1kAruAcEdl4lO2KnaQXj0I3TsHDWnTI3A+AFSHUE6JMhvWxmv6PRvXtfnMJDGcjZ9UoOJsoGIWC8QANYpkoq09a9dUfmJvmIzxICu0+u1eysME2U5w3JBqp1FQwHoVUF8CgYA+6Q43Rayz5WP7vtztIuPB4rWopP2T52cm6Vpqi4rRx/j3SFIBA721vHMpLqmuf5loz3e3BwoR7VYoJOxYl9UmZdhT9sekU5HFhXvRy2n/p8HABJHUaOSXNFPAEy4IZscLUp+3ILSFw47+mxMKR0Ge2r+G0/mremFTve4pD6VuSQKBgAMdY5rZOD9fhndAsSqRRy530e46ibc1cM4wW2xewHVtySfCzI8eqT8U7ygKnqz9ngkp2RUBmfohEO4wg597uByDHUiGz9/7edRCUJrNvj8tWeTl+bVD99x7nQVNOCsPit0s8OS4CfAxeG10UcN4CwasDokoLgWW8jupyBeB/ptBAoGAf/YJGqYGUogmL1otFf82BwglNfXHjdiFwqC1BLwlIuyOQDQE8nMPF6yKDv6xXY1Zm+zH5RBrIOcLRdF08jSUCfPV2yn2U2tWsC2MSq4n+y4pxqwsQgUXfqrabX3Zf1EEFf329ZhZHwrhDW3PshjEYuz8Yei8gK+44KBk0ZKJCVA=",
AppPublicCert: []byte("-----BEGIN CERTIFICATE-----\nMIIDmTCCAoGgAwIBAgIQICQHMDVeMhtPr6+uHuLZpDANBgkqhkiG9w0BAQsFADCBkTELMAkGA1UE\nBhMCQ04xGzAZBgNVBAoMEkFudCBGaW5hbmNpYWwgdGVzdDElMCMGA1UECwwcQ2VydGlmaWNhdGlv\nbiBBdXRob3JpdHkgdGVzdDE+MDwGA1UEAww1QW50IEZpbmFuY2lhbCBDZXJ0aWZpY2F0aW9uIEF1\ndGhvcml0eSBDbGFzcyAyIFIxIHRlc3QwHhcNMjQwNzMwMDEwNTAxWhcNMjUwODA0MDEwNTAxWjBr\nMQswCQYDVQQGEwJDTjEfMB0GA1UECgwWdnllZnltODEyM0BzYW5kYm94LmNvbTEPMA0GA1UECwwG\nQWxpcGF5MSowKAYDVQQDDCEyMDg4NzIxMDQwNDYwMjQ2LTkwMjEwMDAxMzk2NjE4NTgwggEiMA0G\nCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCInowZf7/SgMxtVwU57DvS6Q1+3nke8GZ8Pb6gEwxn\ntl+89cZNBi2wD/RDwFj0IxCH85rjaNeIztSmfdJMwPtlxo210lxQi1CWfXF+MoFAd+XZM+e/JWk4\n/3pCwlAI6BrlOEj026/pHudWw77ge9snibx+5FBugHCF/zymp8Mxu+N3pZbtlyo7sagU4OZsiwZm\ntqQwwnm1oxj6BhmE8aVlIxQWrs3MYhzDit2lETiPbidTBuQgLpLmlxss/PWPqBuni70Vhc82GrT0\n/2byGj9Ry0o9gD8DDHeyHhJNMJQU0PSFIFFLzwgXtNrkgSQzHyal6SHiZcf8Mw27pKdu6hXjAgMB\nAAGjEjAQMA4GA1UdDwEB/wQEAwIE8DANBgkqhkiG9w0BAQsFAAOCAQEAEIvHKdvTJr0Nm2p2jMPL\nxgGrG6kNQwjzQjJ8yCHth/+jJx2Kgx+QSAgLDY3iamqf778UnAv2nLTSHPBnaOcCeLRuKxDesLdB\nrJHVJ4VW/MDk6NLosF0OsYHjAE4On613tvuxEMl/19jDSNkH7IOu2Ob06zqjqWrkdeupX8FOEuEc\nB2V/m/Yu+sH/CAmicV0/wgTm5KZl1TntT2AgZdWoVFwUCe6Hn0ZL0SmwMehlkODOQ47Ur1FgyrNy\nLK7k7JRgtW+BlPaEM2nq+AVmrUuVmH+wfcrdWsKkrM1wuXgVuHovDghULo+9KCBZjbP9Ef2drCn/\nq86EOjMvM0revEfjyw==\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-----\nMIIDszCCApugAwIBAgIQICQIBZUM3AD4AzStxXRIiTANBgkqhkiG9w0BAQsFADCBkTELMAkGA1UE\nBhMCQ04xGzAZBgNVBAoMEkFudCBGaW5hbmNpYWwgdGVzdDElMCMGA1UECwwcQ2VydGlmaWNhdGlv\nbiBBdXRob3JpdHkgdGVzdDE+MDwGA1UEAww1QW50IEZpbmFuY2lhbCBDZXJ0aWZpY2F0aW9uIEF1\ndGhvcml0eSBDbGFzcyAyIFIxIHRlc3QwHhcNMjQwODA1MDMxNzI5WhcNMjUwODA1MDMxNzI5WjCB\nhDELMAkGA1UEBhMCQ04xHzAdBgNVBAoMFnZ5ZWZ5bTgxMjNAc2FuZGJveC5jb20xDzANBgNVBAsM\nBkFsaXBheTFDMEEGA1UEAww65pSv5LuY5a6dKOS4reWbvSnnvZHnu5zmioDmnK/mnInpmZDlhazl\nj7gtMjA4ODcyMTA0MDQ2MDI0NjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKkLMWQI\nhNUJOcp2oy9LPdOorzSfwruFe09G84/wCdCBsNPBH0H/LFW6F0vbYmD2SJS9qFw5tsFj5VB9p5Qi\nbRnD35UTNnyoIeGsq7RSYuxV6KY+/ixTpzrwZLwKN0QCIMbIh2RUjJT4w3mmYE+cLA91nbgX9Qi2\ny9QM4SRkOhu/6vLUUKCAcKpQ+RwlMUUz7EhbbFrOxqHQdyMA6aUak59xYqcP4wssPrJjnot413aL\nhZNXDjsLy/8wJNwYO39vhL2z8HUCrHELawnbgW3WN52ZFWQ1jKq9eKR/tDbytEo6fXhrWQxz1R6F\nsooaoj6M2u5EnB9emHo632WZ4ziVUOUCAwEAAaMSMBAwDgYDVR0PAQH/BAQDAgTwMA0GCSqGSIb3\nDQEBCwUAA4IBAQAA4nFiMfk288kcBuN6/iAQUfSdyPty1iXQ1UGdW3dIC5BF1dBMwvyqL45RQ166\n0RfsHbEXssvATnPoJfhDOKGmIA2h6iAhOT1KYvMi/Q7MqtF86FGDWbG7+rvm5/W+IbQ/rQ7Ku2Fi\nZdvh4vG/2JEb/jW8AYcINb6F+vJkAz/CV12MOCqxDpj4WRbDwqE5qmQeYuboyODAyPxI5X00/ZIC\nM7gH3DSy3BTcAl0VuzXlo/C7L+W+jGZgdgP+XC9WDHOofDwNM1LfkdiquGFATigGlSo0Q0KJLmGI\nHX7WZmnwW2QLDZorXTkdqWkiZuRCwrd6Sa7detNhEEyDFn6sFNwR\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIDszCCApugAwIBAgIQIBkIGbgVxq210KxLJ+YA/TANBgkqhkiG9w0BAQsFADCBhDELMAkGA1UE\nBhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxJTAjBgNVBAsMHENlcnRpZmljYXRpb24gQXV0\naG9yaXR5IHRlc3QxNjA0BgNVBAMMLUFudCBGaW5hbmNpYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp\ndHkgUjEgdGVzdDAeFw0xOTA4MTkxMTE2MDBaFw0yNDA4MDExMTE2MDBaMIGRMQswCQYDVQQGEwJD\nTjEbMBkGA1UECgwSQW50IEZpbmFuY2lhbCB0ZXN0MSUwIwYDVQQLDBxDZXJ0aWZpY2F0aW9uIEF1\ndGhvcml0eSB0ZXN0MT4wPAYDVQQDDDVBbnQgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9y\naXR5IENsYXNzIDIgUjEgdGVzdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMh4FKYO\nZyRQHD6eFbPKZeSAnrfjfU7xmS9Yoozuu+iuqZlb6Z0SPLUqqTZAFZejOcmr07ln/pwZxluqplxC\n5+B48End4nclDMlT5HPrDr3W0frs6Xsa2ZNcyil/iKNB5MbGll8LRAxntsKvZZj6vUTMb705gYgm\nVUMILwi/ZxKTQqBtkT/kQQ5y6nOZsj7XI5rYdz6qqOROrpvS/d7iypdHOMIM9Iz9DlL1mrCykbBi\nt25y+gTeXmuisHUwqaRpwtCGK4BayCqxRGbNipe6W73EK9lBrrzNtTr9NaysesT/v+l25JHCL9tG\nwpNr1oWFzk4IHVOg0ORiQ6SUgxZUTYcCAwEAAaMSMBAwDgYDVR0PAQH/BAQDAgTwMA0GCSqGSIb3\nDQEBCwUAA4IBAQBWThEoIaQoBX2YeRY/I8gu6TYnFXtyuCljANnXnM38ft+ikhE5mMNgKmJYLHvT\nyWWWgwHoSAWEuml7EGbE/2AK2h3k0MdfiWLzdmpPCRG/RJHk6UB1pMHPilI+c0MVu16OPpKbg5Vf\nLTv7dsAB40AzKsvyYw88/Ezi1osTXo6QQwda7uefvudirtb8FcQM9R66cJxl3kt1FXbpYwheIm/p\nj1mq64swCoIYu4NrsUYtn6CV542DTQMI5QdXkn+PzUUly8F6kDp+KpMNd0avfWNL5+O++z+F5Szy\n1CPta1D7EQ/eYmMP+mOQ35oifWIoFCpN6qQVBS/Hob1J/UUyg7BW\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,
}