This commit is contained in:
邹宗楠
2022-07-06 16:48:43 +08:00
parent 07373a7e49
commit c47a130bc0
15 changed files with 427 additions and 9 deletions

View File

@@ -112,10 +112,9 @@ func method2ResponseKey(method string) (responseKey string) {
func (a *API) AccessAPI(method string, params, bizContent map[string]interface{}, isPost bool) (retVal map[string]interface{}, err error) {
params = utils.MergeMaps(map[string]interface{}{
"app_id": a.GetAppID(),
"method": method,
"format": "JSON",
// "return_url"
"app_id": a.GetAppID(),
"method": method,
"format": "JSON",
"charset": "utf-8",
"sign_type": "RSA2",
"version": "1.0",

View File

@@ -15,8 +15,9 @@ func init() {
logger, _ := zap.NewDevelopment()
sugarLogger = logger.Sugar()
baseapi.Init(sugarLogger)
// 2019110769024042
api = New("2019110769024042", []byte(`MIIEogIBAAKCAQEAnS0dxNVKYXQj1SU3j9LYcx0JiPKQZv6d6MbrX7QyztlvkohtDDcKuLlUFur3lYSPgmx94hkBb+dQLxJba1e/a0H2x4G4MLXmwrmyVw7GySdYBOXlTFmDHDguuqd36HtcCTrKL0Tm4dTmuUn+HgcRfchqtbvpcX6p6snVGXn0ZcYzQsRPEAYQbE7gj2qO3Gih7FyDw6FyFgwyArqtbeI2UxlfyrQpNnxHX+ZAF9aqMNq/A3C4cod2HUTVgVP0FzWLI6hg1RK4xqmcWiosdbVlmZyE3iIqJutWYlDf+x9bAjYsNWNvbtW/GcoB+5Oq0MvcC69020yuo3fAbbrq1U+RBwIDAQABAoIBADkhJfnegPutKD0YGvr261/kBQw3Bo+5KpJqgzE1IWaYF/rOBbzz4LzF+C+gVj+NgFAquRLOffw7uqRxarM4oMYOovFfUCC8bVUIBC+qmkyRNWgKW+8FdidysGF975KcDBb6vHSz+avKI9bjcy9c6Fms2ESYOcDcBkzl8cQh1NiMv+tEQvA3VyUGUzk6IbpN8+kzNtmGZ0zNyehp3Mo4LWCHUJ8Ixmd1+/EzNuUri8XLkJL0/Hn+RQOTi2Z67C9NkZC12bqJIXMZJt46PDMpE/QY4CBhDLGdn5xP0Cw1X7pQ5RV+XP1P32MEfNPTlYidqcT+ZeCEhHjO+ZT+z9aHAVECgYEA5lWqBefJgY32qyDkMZ0X1ObpgAurAshKHaAXDyKcDv5GKAqpRM0+rK26ar8KAh17dYnVDYcmpyxNixgz8oz78EEgshOOqMeNNQ37DIFxEXEQ9xezl4HPbXQ/yc+iKZPZnI1GFgXgpk6GD8TXuNuik2tB7cVHqjOIBphsCV+EKr8CgYEArrCYnMimvlgUWcLD7upw0DYhitdXM3aVl0TGtFs7wUsfvoh0qyDFSg+ENBYyV/RXr17q7nljrXzys7ftkGUecD/O1SZw1ipZhWJ2DJsLOAr2AmhaNPJwkiZrI8ZuSbYkxSZzD4oy5PEYd1ePr5VJaZzC6Z0f120Srl3f3ir/k7kCgYAXs8kDQo7h3hH8Gi5hTKEfL4PnwUufxayaz9aPoCgfAtuFU1OH2PcSHe6I/Y+yGAaUWdKqybWYjl6MabkuxINIfes3Z/vOMnq9curappdUDCaKxs2cUadexA+sXMl7LdO+4GrN6VzswDfbd44bX76jHO5z4VE2mobs5tJ3RHT9UQKBgCujG4xWpyh3MiY1++HLmIC6dOiM4FCPt9CAsq5M+AFR9c0Poy04U3Arrhegz9SeyeSZ7k/B7P9ibfIs6OAgEllx5wXhw2AMVi52qQx/Em9edZOmY5pEUZCAnlTidZxeLpM9BpMEL7B29Wiia9ctkJgcO6hFwrV6nqcF9i02Sn+pAoGAe66CemVpBUAfTBOPTdwDKf/if3n73tbyj7vj3y4QQ9jReZWEmKvGIyhNypj9l6esJQSDgoYcYs6ArGKDWbzeyZSB97Wh44JBIEfYJ0MpEv262MZ46+JRFLvj6FR/egpWdIp44Ys1/SWeuG/U4OlwoXCca4KsonWnOlo0Fa6YSSA=`))
//api = New("2019110769024042", []byte(`MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCIcMwZ1oK6Rdo880Ce6JN5TasuqlCWt/xV76Gfc957cO+8tPDIzjKHyooJngU8IZ9eFktsPIEsNlYlLey2IamDCQGyYKZBqDLMkqYqZnIgWyjLjAFOCPdA9Ol6a0+2voLdCj20XNhMs1z0lmP1m8ekmj2hIPGYIx6XD0gDRSRMe/qgaLJFt4CBJbuvSqobVmxEz9m7omS96whSsar6EJlEWoxd/6zFovlUZ8iMKiqIaFsHSUvU5nK+1pc4FyyLggA9SQOEdQW7VrZYPqZnwaSaHMv9EHNOGIiWPWYHyqMwW01xynPDG0f1G2MI5HftNLppZozwwBa5Jf+vS5QDyVJpAgMBAAECggEAI6gOvsXffhyZLwqHHcA8IhxZGyXpT6ofaLnqLAiU4P+ft1o1/tRcQj59GoxQY+mJg4YiCdQ6EbrVgnvg+6wKZ7Mn3V0Cte/l7q54fGYvdyM7ow4gnSscqr4WciavO1vISUnO3F7TLCBHr6fJ0br3Tp38cypv2Ml8yg91S117Yf00osjeRX+0c7e3hHxdns9g7m1ACCZ7a/3QfCAS+iiurGihgjSYnHL7ESkmAWsXiFZR9W6MgAyRybst8s829vQBhtGsqd86+Dz3iMqnNTL9eFH33KaA1Pz6eMGYNKgrfBaAh6PPj0FVLSIJr4HK7ui9NideuqpGF0eugM0FHbSRzQKBgQDmvSYlcehvrMYTreSTpQWaY3BllHsA8wTM81YEJRFwYNbgLPT+dAooOaXNFgVK7b0RZg8MG9VHNZ5FIL0Ze2QrTvUydPYqdRwkMb+3jbxP8TqKVhCddEDCl/qOYgblMjl1uH3+ScM3rBFixqUTyPX85D6/ala835lqJNmQOQWARwKBgQCXYMdW/0aKA8xohZfcNeDmPcYDp5ZN26bN016YQUtCGmz4GH82M+NZv9S5ON/J1a7EENDAvOR7AWzwgFpr765/hogFFVs9ZTrrB6CMl1qBKu64O94be3/NcNwn7Mm0NqH14pPfmQxsroMbCTO9onqOmkRiMGApgJ3w59PQuMIfzwKBgE3oL6kU/NY4D+k1Hah8X5fxW1HxAFchts08nB5qJak8CVFH3LDNnWBXlpPYi5DxFJV7UDlWbHzOrdHJbA/eicPVtRSESVmskQPniEQBp0OWv51V0eZYCkWp6v+IOavJeX01/dSOM0vo3TXsvHAhumzY5BbdYMwE81fTeWIo3qKhAoGAc9nRNTdw2LdHfMahDhr937dvD+T2Fuf/pI4bWxK9cf2fX8//q4/ScyFov8hTHLi4Y70qxhbKFYllwjm4+doZBegDuUA676XFjZHswSwkS657u+u1c/r0OFojYzrIs28MTI329ay/4X09QTetrXfnq7NMmojDT3/rYC9L3/VGO+kCgYBCNdwrgFm/oET1y+RSIsMsHC8KkmVrOm7utiQBnlacbqJCyzR4XW1OikxOOcbNX1JJ99qeuxxzu36ed2CTQHSciNW3OfVqfASWW7RODKp5xWdSLjclOHHScJ5EN4uD1giihDlFEehugy63wCSBWEXmoV5G5bGwkPPNu6sveT3uHQ==`))
//api = New("2019110769024042", []byte(`MIIEpAIBAAKCAQEAnsbBe0lrK5c4/xhb7ZLDWjGRWmIaj7HyV4LQ9X4EcTV5I5IKLezH1YaNLXytD/VXc5NsJp9IDTFLyOYdXee8lJxAeSQbuBBy1+xLd6qK2JQdVUGP3RZ0pAwVZSc9m0JKj5pYEeA2lvgh4NhSfGEw4BdZacpiDjFWkrQYl+RZkl/eIH2w7sA4wXs/hLSnPiG0VRtLtyYzfGCQdEJNjP5PA6V6CJTd68qTytLnpuaTuVxIYHGGSNd08694b1wOuGpFv6YK+mZkfaGkFoEpp3gUhEQ05duKjNBY71f0ez/Fym7GQYdHNXlsIvCmGQzklkfvQkHj7+MvPpsME4PkqQjRgwIDAQABAoIBAHLzwzDXPtgYbBOEN0oRb43lRS8Cx+gxFRt2goK58c1kwYeXO/dz7loRSDUehs1++wmaOjrcJvYmMpAIykoqdMXDOop6MfdZMUxSr3C78DpNQc9v4BBZKal7diH9/wRhQkolnI2UnvE+RIjdFRsn4pLbVMja1ZMg9WTRLt0JXjAyQZus9pADWADK12OSEIHBvz7/+kiFpq0aM+KPMElQG/mSDg1ESmzfYEbXYmPoiMwU+9frtnprrNdG9h143pb7mdzbXTt/8DbmpFgCfKL7ItpsC3VcZFDsj1Sd3gewrU+FLifH6oPGHTiwEoHNIn5m0RdPVEFoQnQxZnqxzDVBVYECgYEA5zCnBZBLotumxVdIRwncAXKEV5nMHJV2NKVmAc20vHJTsmI4/kA9B2Bjx9jzwwctBzFp1pIadccSbFO48Z5Hn0NdwYOnqba9W50n6R7wO3SnqQuCaoyTAvfkcjrZjZqq88Opa9tKGjD69MFFa+mnK7O7s8B7X6hCa/h80s0zDmkCgYEAr9C5yACb0haAp1WkuYf0B2TyPIofhYOXsjHcJqref+mDHgXSqPntYsXl/RVpJJSAGXJ/CnPd+jHQ0Fis2LuNpZ6ntYzcGoTQtnXx8BdQsnyEjyAvzxWv2JJV12zoSTEW7HL078qqEgbzmort6A8edRiv0kIoNf054QAtv/C9OwsCgYBPATVSlWkDkoR/U8CDZj8kz3miZhB2hC0M+KjPXPiynW80upQ3bsRsTOhMVzuWHlGo7533kZ4xOYJ2OnYtO6XGK0NS6ibVvHkhYadN5yC5cLgK8L/0oW1rykLrNmk6FuzsuKShEyNTqAFauuF6azKRoK44U0LWAa4RL62YbD9SYQKBgQCD0Qp5WXt6WES9MQj/0V607IpxuV1IzRC/GYLlutZ3MKyNpe/7oObKV3XH+nWKZ4xjh+SYAac8Hn1guBtfo77fncQ/6gxcFZgmNOfgCpsGNzVr2cX+jVP6HD0f9xdxSMzXGplp75jzSyL5i5AznKJJSOkJy3A6ilEK0Qd8ERLPYQKBgQC/QSV0c71x3nYz3koOQv7s36i5R0jeHnadSMyGUlrYmn/TaXj0KaUaEYRcgJyWB/dxy3cde8EKlqg0q80Zc6ExkZKhpO6k1lj9Bta+l+KAyVFroYDIy/b0Wukr2qV1mkMK0FQ0X2hVbv6TJBq5RMNeYAy1shOeWIwaS5muSYm4Ig==`))
api = New("2021002159677003", []byte(`
MIIEpAIBAAKCAQEApAsn4U1ivnXsBoR52uKjq5E51i708Q2NYo+0vf3wsL9HjQSDP2iXolHtvXPwWltkDymh5+SeH+RSJph2DJ7rvmeYFiAEI3FTSaL/QRBtQS4wJvpPRXQiqH7GeTV0ApwfEaKaBbVfAA0iNtT/zdxZkELYmIEfv14vvVhiUV7mXkw/zb94HR/QfXazF7py6ePg8Xn/F/Hjurn+f9pY1ns4LzPZXKH07x8Q42eFJMUIxupofGJWf9pZ8jFDxvliDhmk4W28GHenfcUa3d8+4YgYqMBfel94UySitrnBYuQpH+DXw4AejND5uSDObKh1EQTG5RbkwnmOerjsOpJVf9VnzQIDAQABAoIBAQCR5NINELQXS+0kRsHRJ+wEdF6J3K0/jZwG4mQO7UAZEaVjB3Zq+GyTkmXsLqa+1bUBvzcddDgliPx/Eu06gESNzLh4RPUpSGqYfPyjMybX52ov4EKMNKN2U3nU5vNMNuly17hAB3R8KTIargjrX2PQZ4MW7w/7NJskvOyEDfC4P453jYENEIYAiARUC+muK4zriNF2+OCYb2S/WIz3SEBIf+966/QlDJu/GYscE+w2ZKVlA34oZGlWMzeskukKm69k63jw8oSyQRQrEZlGl6Z1LBLNSfphfyt56aS8COezUmxbjc18P2NLHOsTBJxIZlB4X9dkDHeEUndrofNMWJZBAoGBAN4JaulE/Tv47+YtjCjpBqTagl6wTl5UBXYvotQHFbGvDxao/3u/t90h2cUpsEu6eySPCKKcUGhYv9hElIQOyoUpzX/Fqhgf3idNrttTrfnE1qAxsAIlMY9n5BKlWLSTikJ9lGKsJlkxowqZxuuUTkEsNKUVFdP9ceFMdFG5c4CZAoGBAL0i0qUOpLJlqtaqP3IqKZUzjW3cbtN/EqRXOJSPoo93S//+nGPVwZ+7zZoUDNcTMdr94yUgmsaNxC1YD18ekbDrKxAXwenk5Bp8Vmxa6HF1dRMbMm/Cr89bWyye0+Z6rCkuyoiYRYEqzrhOz5XH3Bs+unT/kSmiHmqko7vN2X1VAoGBALucmYmhkZgrMAn+Un/+5m5FdAMuVgm+VR8YAS3HDr2kfctX4QhfZqyi/a9rGlvipkqt0U4VZpvE4dWLnTI4jUcXm1xrWN4pjz0GlskcW9TATdnuIhqt8sKJtl1K+TkbsaedFNSLQZv8JRe/+CT2m2jWQWV7+4W0kZUdVOv5F2+BAoGABL6W4iUX5JHAU1o59Tcxi9ibN6JL9Wo+oXi+pptjzI2FjopoieiWztb7NV5DZDHLEl9ED25d85Ui0rBe0lgF95Yuoly2NJPVVQTBdj5hjlcP9Ma94SfVGTKFev0Q+7sgDnhqBDstoyvbu6vecTduQhC0xLKUhaLXeH1gzhk/13ECgYBbmU0pp7HIHm5hf4/oJoXXW2kMAfYWGQnGW9pkvP0nt1fvGS+ju6Z8vbw/51mmfNWM66kag5Z3O6U8UKZX6RT38xynmleH1w5VicwaRazL+ar+I6YAj8hZkoByseS23kYZCv6gbpUR5bMhUAE3Y6R8G27mXM9IEGm8Y1flBqaB0g==
`))
}

View File

@@ -0,0 +1,43 @@
-----BEGIN CERTIFICATE-----
MIIDrDCCApSgAwIBAgIQICIHBpcwEYU9Q4c9WKX9FTANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UE
BhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmljYXRpb24gQXV0
aG9yaXR5MTkwNwYDVQQDDDBBbnQgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IENs
YXNzIDIgUjEwHhcNMjIwNzA2MDIzNzQ0WhcNMjcwNzA1MDIzNzQ0WjCBjDELMAkGA1UEBhMCQ04x
JzAlBgNVBAoMHuaIkOmDveiLpea6quenkeaKgOaciemZkOWFrOWPuDEPMA0GA1UECwwGQWxpcGF5
MUMwQQYDVQQDDDrmlK/ku5jlrp0o5Lit5Zu9Kee9kee7nOaKgOacr+aciemZkOWFrOWPuC0yMDg4
MDIxMTYyMjIzMTg0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApxRsxFNeXgCE/Qum
HquTjCW7OFcO5ceXhTqcBi8/dROOltlFHVmQMY5iuC+dMklbSarcW4vQS1x0/WSIUQfbihsI2Pka
yegpJfUO6p1rT53kKddD1OUbaMXQ+0HN2qDl8f4tlNvXMc2gzvW8Gy7m0g72kOyYSNd6ht9V88xI
oQpq1oSFLsJlq+zsQ3NhlQLSvFC4JBSL/f3zMyNXz9yPZkHoXjO+XAVdoDVy26tQLqgyvaHt4B1w
Vzl/zNV+9sahbR6ZUZcXfNcPrZ8BggxdkK1gqHQ285TeMW7o286iIswqQ0AyyWH/GqzmlqBxwslL
ky0oVluOmmTH2w5wdugDuQIDAQABoxIwEDAOBgNVHQ8BAf8EBAMCA/gwDQYJKoZIhvcNAQELBQAD
ggEBAKrTlbf3WXZGQFAJrV23yiHuRRl2DbuIFhr33++fFqTf2R1r6p8dxqsYFSSrWnOOm9fAyYev
MGpjwGav0MhopnMldhVUVsBc0G1nXTQyPig4fhIz0OL4LcTeUKiU51/1H4MbdGpCmbPbCsSA/G3T
yXwgRPt2i3KT8NmwYhlwjqDUhylkteZ3m5eeHM7YqZWT6fPAcneWWJa/6SoXYucoYArm4THe72Y/
M1PyKfNB5Jc6l6tqok18IgDO2nDx6fsWIUB/U8A91xJ8OZbZPnlTmmVJyZoEYTyCJCQsKRERG8s6
xERhj/V/qwuxGtu+hNJRswOsKZ+7jtNERxyEhJf9owE=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIE4jCCAsqgAwIBAgIIYsSr5bKAMl8wDQYJKoZIhvcNAQELBQAwejELMAkGA1UEBhMCQ04xFjAU
BgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmljYXRpb24gQXV0aG9yaXR5MTEw
LwYDVQQDDChBbnQgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFIxMB4XDTE4MDMy
MjE0MzQxNVoXDTM3MTEyNjE0MzQxNVowgYIxCzAJBgNVBAYTAkNOMRYwFAYDVQQKDA1BbnQgRmlu
YW5jaWFsMSAwHgYDVQQLDBdDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTE5MDcGA1UEAwwwQW50IEZp
bmFuY2lhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBDbGFzcyAyIFIxMIIBIjANBgkqhkiG9w0B
AQEFAAOCAQ8AMIIBCgKCAQEAsLMfYaoRoPRbmDcAfXPCmKf43pWRN5yTXa/KJWO0l+mrgQvs89bA
NEvbDUxlkGwycwtwi5DgBuBgVhLliXu+R9CYgr2dXs8D8Hx/gsggDcyGPLmVrDOnL+dyeauheARZ
fA3du60fwEwwbGcVIpIxPa/4n3IS/ElxQa6DNgqxh8J9Xwh7qMGl0JK9+bALuxf7B541Gr4p0WEN
G8fhgjBV4w4ut9eQLOoa1eddOUSZcy46Z7allwowwgt7b5VFfx/P1iKJ3LzBMgkCK7GZ2kiLrL7R
iqV+h482J7hkJD+ardoc6LnrHO/hIZymDxok+VH9fVeUdQa29IZKrIDVj65THQIDAQABo2MwYTAf
BgNVHSMEGDAWgBRfdLQEwE8HWurlsdsio4dBspzhATAdBgNVHQ4EFgQUSqHkYINtUSAtDPnS8Xoy
oP9p7qEwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADggIB
AIQ8TzFy4bVIVb8+WhHKCkKNPcJe2EZuIcqvRoi727lZTJOfYy/JzLtckyZYfEI8J0lasZ29wkTt
a1IjSo+a6XdhudU4ONVBrL70U8Kzntplw/6TBNbLFpp7taRALjUgbCOk4EoBMbeCL0GiYYsTS0mw
7xdySzmGQku4GTyqutIGPQwKxSj9iSFw1FCZqr4VP4tyXzMUgc52SzagA6i7AyLedd3tbS6lnR5B
L+W9Kx9hwT8L7WANAxQzv/jGldeuSLN8bsTxlOYlsdjmIGu/C9OWblPYGpjQQIRyvs4Cc/mNhrh+
14EQgwuemIIFDLOgcD+iISoN8CqegelNcJndFw1PDN6LkVoiHz9p7jzsge8RKay/QW6C03KNDpWZ
EUCgCUdfHfo8xKeR+LL1cfn24HKJmZt8L/aeRZwZ1jwePXFRVtiXELvgJuM/tJDIFj2KD337iV64
fWcKQ/ydDVGqfDZAdcU4hQdsrPWENwPTQPfVPq2NNLMyIH9+WKx9Ed6/WzeZmIy5ZWpX1TtTolo6
OJXQFeItMAjHxW/ZSZTok5IS3FuRhExturaInnzjYpx50a6kS34c5+c8hYq7sAtZ/CNLZmBnBCFD
aMQqT8xFZJ5uolUaSeXxg7JFY1QsYp5RKvj4SjFwCGKJ2+hPPe9UyyltxOidNtxjaknOCeBHytOr
-----END CERTIFICATE-----

View File

@@ -0,0 +1,88 @@
-----BEGIN CERTIFICATE-----
MIIBszCCAVegAwIBAgIIaeL+wBcKxnswDAYIKoEcz1UBg3UFADAuMQswCQYDVQQG
EwJDTjEOMAwGA1UECgwFTlJDQUMxDzANBgNVBAMMBlJPT1RDQTAeFw0xMjA3MTQw
MzExNTlaFw00MjA3MDcwMzExNTlaMC4xCzAJBgNVBAYTAkNOMQ4wDAYDVQQKDAVO
UkNBQzEPMA0GA1UEAwwGUk9PVENBMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAE
MPCca6pmgcchsTf2UnBeL9rtp4nw+itk1Kzrmbnqo05lUwkwlWK+4OIrtFdAqnRT
V7Q9v1htkv42TsIutzd126NdMFswHwYDVR0jBBgwFoAUTDKxl9kzG8SmBcHG5Yti
W/CXdlgwDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFEwysZfZ
MxvEpgXBxuWLYlvwl3ZYMAwGCCqBHM9VAYN1BQADSAAwRQIgG1bSLeOXp3oB8H7b
53W+CKOPl2PknmWEq/lMhtn25HkCIQDaHDgWxWFtnCrBjH16/W3Ezn7/U/Vjo5xI
pDoiVhsLwg==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIF0zCCA7ugAwIBAgIIH8+hjWpIDREwDQYJKoZIhvcNAQELBQAwejELMAkGA1UE
BhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmlj
YXRpb24gQXV0aG9yaXR5MTEwLwYDVQQDDChBbnQgRmluYW5jaWFsIENlcnRpZmlj
YXRpb24gQXV0aG9yaXR5IFIxMB4XDTE4MDMyMTEzNDg0MFoXDTM4MDIyODEzNDg0
MFowejELMAkGA1UEBhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNV
BAsMF0NlcnRpZmljYXRpb24gQXV0aG9yaXR5MTEwLwYDVQQDDChBbnQgRmluYW5j
aWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFIxMIICIjANBgkqhkiG9w0BAQEF
AAOCAg8AMIICCgKCAgEAtytTRcBNuur5h8xuxnlKJetT65cHGemGi8oD+beHFPTk
rUTlFt9Xn7fAVGo6QSsPb9uGLpUFGEdGmbsQ2q9cV4P89qkH04VzIPwT7AywJdt2
xAvMs+MgHFJzOYfL1QkdOOVO7NwKxH8IvlQgFabWomWk2Ei9WfUyxFjVO1LVh0Bp
dRBeWLMkdudx0tl3+21t1apnReFNQ5nfX29xeSxIhesaMHDZFViO/DXDNW2BcTs6
vSWKyJ4YIIIzStumD8K1xMsoaZBMDxg4itjWFaKRgNuPiIn4kjDY3kC66Sl/6yTl
YUz8AybbEsICZzssdZh7jcNb1VRfk79lgAprm/Ktl+mgrU1gaMGP1OE25JCbqli1
Pbw/BpPynyP9+XulE+2mxFwTYhKAwpDIDKuYsFUXuo8t261pCovI1CXFzAQM2w7H
DtA2nOXSW6q0jGDJ5+WauH+K8ZSvA6x4sFo4u0KNCx0ROTBpLif6GTngqo3sj+98
SZiMNLFMQoQkjkdN5Q5g9N6CFZPVZ6QpO0JcIc7S1le/g9z5iBKnifrKxy0TQjtG
PsDwc8ubPnRm/F82RReCoyNyx63indpgFfhN7+KxUIQ9cOwwTvemmor0A+ZQamRe
9LMuiEfEaWUDK+6O0Gl8lO571uI5onYdN1VIgOmwFbe+D8TcuzVjIZ/zvHrAGUcC
AwEAAaNdMFswCwYDVR0PBAQDAgEGMAwGA1UdEwQFMAMBAf8wHQYDVR0OBBYEFF90
tATATwda6uWx2yKjh0GynOEBMB8GA1UdIwQYMBaAFF90tATATwda6uWx2yKjh0Gy
nOEBMA0GCSqGSIb3DQEBCwUAA4ICAQCVYaOtqOLIpsrEikE5lb+UARNSFJg6tpkf
tJ2U8QF/DejemEHx5IClQu6ajxjtu0Aie4/3UnIXop8nH/Q57l+Wyt9T7N2WPiNq
JSlYKYbJpPF8LXbuKYG3BTFTdOVFIeRe2NUyYh/xs6bXGr4WKTXb3qBmzR02FSy3
IODQw5Q6zpXj8prYqFHYsOvGCEc1CwJaSaYwRhTkFedJUxiyhyB5GQwoFfExCVHW
05ZFCAVYFldCJvUzfzrWubN6wX0DD2dwultgmldOn/W/n8at52mpPNvIdbZb2F41
T0YZeoWnCJrYXjq/32oc1cmifIHqySnyMnavi75DxPCdZsCOpSAT4j4lAQRGsfgI
kkLPGQieMfNNkMCKh7qjwdXAVtdqhf0RVtFILH3OyEodlk1HYXqX5iE5wlaKzDop
PKwf2Q3BErq1xChYGGVS+dEvyXc/2nIBlt7uLWKp4XFjqekKbaGaLJdjYP5b2s7N
1dM0MXQ/f8XoXKBkJNzEiM3hfsU6DOREgMc1DIsFKxfuMwX3EkVQM1If8ghb6x5Y
jXayv+NLbidOSzk4vl5QwngO/JYFMkoc6i9LNwEaEtR9PhnrdubxmrtM+RjfBm02
77q3dSWFESFQ4QxYWew4pHE0DpWbWy/iMIKQ6UZ5RLvB8GEcgt8ON7BBJeMc+Dyi
kT9qhqn+lw==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIICiDCCAgygAwIBAgIIQX76UsB/30owDAYIKoZIzj0EAwMFADB6MQswCQYDVQQG
EwJDTjEWMBQGA1UECgwNQW50IEZpbmFuY2lhbDEgMB4GA1UECwwXQ2VydGlmaWNh
dGlvbiBBdXRob3JpdHkxMTAvBgNVBAMMKEFudCBGaW5hbmNpYWwgQ2VydGlmaWNh
dGlvbiBBdXRob3JpdHkgRTEwHhcNMTkwNDI4MTYyMDQ0WhcNNDkwNDIwMTYyMDQ0
WjB6MQswCQYDVQQGEwJDTjEWMBQGA1UECgwNQW50IEZpbmFuY2lhbDEgMB4GA1UE
CwwXQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxMTAvBgNVBAMMKEFudCBGaW5hbmNp
YWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgRTEwdjAQBgcqhkjOPQIBBgUrgQQA
IgNiAASCCRa94QI0vR5Up9Yr9HEupz6hSoyjySYqo7v837KnmjveUIUNiuC9pWAU
WP3jwLX3HkzeiNdeg22a0IZPoSUCpasufiLAnfXh6NInLiWBrjLJXDSGaY7vaokt
rpZvAdmjXTBbMAsGA1UdDwQEAwIBBjAMBgNVHRMEBTADAQH/MB0GA1UdDgQWBBRZ
4ZTgDpksHL2qcpkFkxD2zVd16TAfBgNVHSMEGDAWgBRZ4ZTgDpksHL2qcpkFkxD2
zVd16TAMBggqhkjOPQQDAwUAA2gAMGUCMQD4IoqT2hTUn0jt7oXLdMJ8q4vLp6sg
wHfPiOr9gxreb+e6Oidwd2LDnC4OUqCWiF8CMAzwKs4SnDJYcMLf2vpkbuVE4dTH
Rglz+HGcTLWsFs4KxLsq7MuU+vJTBUeDJeDjdA==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDxTCCAq2gAwIBAgIUEMdk6dVgOEIS2cCP0Q43P90Ps5YwDQYJKoZIhvcNAQEF
BQAwajELMAkGA1UEBhMCQ04xEzARBgNVBAoMCmlUcnVzQ2hpbmExHDAaBgNVBAsM
E0NoaW5hIFRydXN0IE5ldHdvcmsxKDAmBgNVBAMMH2lUcnVzQ2hpbmEgQ2xhc3Mg
MiBSb290IENBIC0gRzMwHhcNMTMwNDE4MDkzNjU2WhcNMzMwNDE4MDkzNjU2WjBq
MQswCQYDVQQGEwJDTjETMBEGA1UECgwKaVRydXNDaGluYTEcMBoGA1UECwwTQ2hp
bmEgVHJ1c3QgTmV0d29yazEoMCYGA1UEAwwfaVRydXNDaGluYSBDbGFzcyAyIFJv
b3QgQ0EgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOPPShpV
nJbMqqCw6Bz1kehnoPst9pkr0V9idOwU2oyS47/HjJXk9Rd5a9xfwkPO88trUpz5
4GmmwspDXjVFu9L0eFaRuH3KMha1Ak01citbF7cQLJlS7XI+tpkTGHEY5pt3EsQg
wykfZl/A1jrnSkspMS997r2Gim54cwz+mTMgDRhZsKK/lbOeBPpWtcFizjXYCqhw
WktvQfZBYi6o4sHCshnOswi4yV1p+LuFcQ2ciYdWvULh1eZhLxHbGXyznYHi0dGN
z+I9H8aXxqAQfHVhbdHNzi77hCxFjOy+hHrGsyzjrd2swVQ2iUWP8BfEQqGLqM1g
KgWKYfcTGdbPB1MCAwEAAaNjMGEwHQYDVR0OBBYEFG/oAMxTVe7y0+408CTAK8hA
uTyRMB8GA1UdIwQYMBaAFG/oAMxTVe7y0+408CTAK8hAuTyRMA8GA1UdEwEB/wQF
MAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBLnUTfW7hp
emMbuUGCk7RBswzOT83bDM6824EkUnf+X0iKS95SUNGeeSWK2o/3ALJo5hi7GZr3
U8eLaWAcYizfO99UXMRBPw5PRR+gXGEronGUugLpxsjuynoLQu8GQAeysSXKbN1I
UugDo9u8igJORYA+5ms0s5sCUySqbQ2R5z/GoceyI9LdxIVa1RjVX8pYOj8JFwtn
DJN3ftSFvNMYwRuILKuqUYSHc2GPYiHVflDh5nDymCMOQFcFG3WsEuB+EYQPFgIU
1DHmdZcz7Llx8UOZXX2JupWCYzK1XhJb+r4hK5ncf/w8qGtYlmyJpxk3hr1TfUJX
Yf4Zr0fJsGuv
-----END CERTIFICATE-----

View File

@@ -0,0 +1,24 @@
-----BEGIN CERTIFICATE-----
MIIEqzCCA5OgAwIBAgIQICIHBn5M8wJd0nGCcDiLrjANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UE
BhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmljYXRpb24gQXV0
aG9yaXR5MTkwNwYDVQQDDDBBbnQgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IENs
YXNzIDEgUjEwHhcNMjIwNzA2MDIzNzQzWhcNMjcwNzA1MDIzNzQzWjBzMQswCQYDVQQGEwJDTjEn
MCUGA1UECgwe5oiQ6YO96Iul5rqq56eR5oqA5pyJ6ZmQ5YWs5Y+4MQ8wDQYDVQQLDAZBbGlwYXkx
KjAoBgNVBAMMITIwODgwMjExNjIyMjMxODQtMjAxOTExMDc2OTAyNDA0MjCCASIwDQYJKoZIhvcN
AQEBBQADggEPADCCAQoCggEBAIhwzBnWgrpF2jzzQJ7ok3lNqy6qUJa3/FXvoZ9z3ntw77y08MjO
MofKigmeBTwhn14WS2w8gSw2ViUt7LYhqYMJAbJgpkGoMsySpipmciBbKMuMAU4I90D06XprT7a+
gt0KPbRc2EyzXPSWY/Wbx6SaPaEg8ZgjHpcPSANFJEx7+qBoskW3gIElu69KqhtWbETP2buiZL3r
CFKxqvoQmURajF3/rMWi+VRnyIwqKohoWwdJS9Tmcr7WlzgXLIuCAD1JA4R1BbtWtlg+pmfBpJoc
y/0Qc04YiJY9ZgfKozBbTXHKc8MbR/UbYwjkd+00umlmjPDAFrkl/69LlAPJUmkCAwEAAaOCASkw
ggElMB8GA1UdIwQYMBaAFHEH4gRhFuTl8mXrMQ/J4PQ8mtWRMB0GA1UdDgQWBBT76THTU/u6FWUE
E9tPYxD7XU7MzTBABgNVHSAEOTA3MDUGB2CBHAFuAQEwKjAoBggrBgEFBQcCARYcaHR0cDovL2Nh
LmFsaXBheS5jb20vY3BzLnBkZjAOBgNVHQ8BAf8EBAMCBsAwLwYDVR0fBCgwJjAkoCKgIIYeaHR0
cDovL2NhLmFsaXBheS5jb20vY3JsNjcuY3JsMGAGCCsGAQUFBwEBBFQwUjAoBggrBgEFBQcwAoYc
aHR0cDovL2NhLmFsaXBheS5jb20vY2E2LmNlcjAmBggrBgEFBQcwAYYaaHR0cDovL2NhLmFsaXBh
eS5jb206ODM0MC8wDQYJKoZIhvcNAQELBQADggEBAI5o1y/DkolBm17l6Q7tlrHJgSvg7olJTa9m
zmKiMIMkShEcanQnW2ML3NA4nPA2BBR+10ax1hawJEytUjaEv4aydQbbWl6fk+e1r0bAiF5pCPy/
cu8ZkG3BpMFVihmGovrB0klfTxxHyu3cGpTfmOoA/md/Kh3T+bNxJMQTVyRDx22H86h91cOeKkgp
o4rq2qMUcOI3jtdpADvyU12xoHzI7dgPxEZ3m9WXVpeW6qwz8QIUtY+fK0YS5J/vdoQQ/2poXXqx
RWarcwqjgz0pYTM0ClVGvYHXj380gIBCjCIGl0ixGDo8ojD+R5pZ0xB4zTNGCavESaToMuGC3C6I
FRM=
-----END CERTIFICATE-----

View File

@@ -0,0 +1,18 @@
-----BEGIN CERTIFICATE REQUEST-----
MIICzTCCAbUCAQAwgYcxDzANBgNVBAYMBuS4reWbvTEPMA0GA1UECAwG5Zub5bed
MQ8wDQYDVQQHDAbmiJDpg70xJzAlBgNVBAoMHuaIkOmDveiLpea6quenkeaKgOac
iemZkOWFrOWPuDESMBAGA1UECwwJ56CU5Y+R6YOoMRUwEwYDVQQDEwx3d3cuanhj
cy5uZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCIcMwZ1oK6Rdo8
80Ce6JN5TasuqlCWt/xV76Gfc957cO+8tPDIzjKHyooJngU8IZ9eFktsPIEsNlYl
Ley2IamDCQGyYKZBqDLMkqYqZnIgWyjLjAFOCPdA9Ol6a0+2voLdCj20XNhMs1z0
lmP1m8ekmj2hIPGYIx6XD0gDRSRMe/qgaLJFt4CBJbuvSqobVmxEz9m7omS96whS
sar6EJlEWoxd/6zFovlUZ8iMKiqIaFsHSUvU5nK+1pc4FyyLggA9SQOEdQW7VrZY
PqZnwaSaHMv9EHNOGIiWPWYHyqMwW01xynPDG0f1G2MI5HftNLppZozwwBa5Jf+v
S5QDyVJpAgMBAAGgADANBgkqhkiG9w0BAQQFAAOCAQEAMQf921co42Yplkt/8YxV
xwpQ3jzXQKyl2jNK6aAZV1BpJDo++qtKlHEbWjdK74RwPJnO2VyaX5k3aRteDKOw
iNfZ40XwxXP8xhG5r0CU7KnxH/nSDuKhPTmU5pFR/ccOUKcOeVt2PiZZz2zOpLCU
aw2vAhDuAVK4h3Emc1aOBw8d5tZfWF0vuEmTTs0jqSUgU9ztLGNJgpDL2dSsDhvt
OVbL30WERvSFwtywB1tFDb1JEYqFW0HS5LqC17rZfwPdvv7HNlXbHfVp8mCBZ2sq
WzcOK3aki2GatoJyVcRxxJD9g5RfaSDslFysIl4x5xwivLkYHQ0bUdyIxbsVJHK+
dw==
-----END CERTIFICATE REQUEST-----

View File

@@ -0,0 +1 @@
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAiHDMGdaCukXaPPNAnuiTeU2rLqpQlrf8Ve+hn3Pee3DvvLTwyM4yh8qKCZ4FPCGfXhZLbDyBLDZWJS3stiGpgwkBsmCmQagyzJKmKmZyIFsoy4wBTgj3QPTpemtPtr6C3Qo9tFzYTLNc9JZj9ZvHpJo9oSDxmCMelw9IA0UkTHv6oGiyRbeAgSW7r0qqG1ZsRM/Zu6JkvesIUrGq+hCZRFqMXf+sxaL5VGfIjCoqiGhbB0lL1OZyvtaXOBcsi4IAPUkDhHUFu1a2WD6mZ8GkmhzL/RBzThiIlj1mB8qjMFtNccpzwxtH9RtjCOR37TS6aWaM8MAWuSX/r0uUA8lSaQIDAQAB

View File

@@ -0,0 +1 @@
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCIcMwZ1oK6Rdo880Ce6JN5TasuqlCWt/xV76Gfc957cO+8tPDIzjKHyooJngU8IZ9eFktsPIEsNlYlLey2IamDCQGyYKZBqDLMkqYqZnIgWyjLjAFOCPdA9Ol6a0+2voLdCj20XNhMs1z0lmP1m8ekmj2hIPGYIx6XD0gDRSRMe/qgaLJFt4CBJbuvSqobVmxEz9m7omS96whSsar6EJlEWoxd/6zFovlUZ8iMKiqIaFsHSUvU5nK+1pc4FyyLggA9SQOEdQW7VrZYPqZnwaSaHMv9EHNOGIiWPWYHyqMwW01xynPDG0f1G2MI5HftNLppZozwwBa5Jf+vS5QDyVJpAgMBAAECggEAI6gOvsXffhyZLwqHHcA8IhxZGyXpT6ofaLnqLAiU4P+ft1o1/tRcQj59GoxQY+mJg4YiCdQ6EbrVgnvg+6wKZ7Mn3V0Cte/l7q54fGYvdyM7ow4gnSscqr4WciavO1vISUnO3F7TLCBHr6fJ0br3Tp38cypv2Ml8yg91S117Yf00osjeRX+0c7e3hHxdns9g7m1ACCZ7a/3QfCAS+iiurGihgjSYnHL7ESkmAWsXiFZR9W6MgAyRybst8s829vQBhtGsqd86+Dz3iMqnNTL9eFH33KaA1Pz6eMGYNKgrfBaAh6PPj0FVLSIJr4HK7ui9NideuqpGF0eugM0FHbSRzQKBgQDmvSYlcehvrMYTreSTpQWaY3BllHsA8wTM81YEJRFwYNbgLPT+dAooOaXNFgVK7b0RZg8MG9VHNZ5FIL0Ze2QrTvUydPYqdRwkMb+3jbxP8TqKVhCddEDCl/qOYgblMjl1uH3+ScM3rBFixqUTyPX85D6/ala835lqJNmQOQWARwKBgQCXYMdW/0aKA8xohZfcNeDmPcYDp5ZN26bN016YQUtCGmz4GH82M+NZv9S5ON/J1a7EENDAvOR7AWzwgFpr765/hogFFVs9ZTrrB6CMl1qBKu64O94be3/NcNwn7Mm0NqH14pPfmQxsroMbCTO9onqOmkRiMGApgJ3w59PQuMIfzwKBgE3oL6kU/NY4D+k1Hah8X5fxW1HxAFchts08nB5qJak8CVFH3LDNnWBXlpPYi5DxFJV7UDlWbHzOrdHJbA/eicPVtRSESVmskQPniEQBp0OWv51V0eZYCkWp6v+IOavJeX01/dSOM0vo3TXsvHAhumzY5BbdYMwE81fTeWIo3qKhAoGAc9nRNTdw2LdHfMahDhr937dvD+T2Fuf/pI4bWxK9cf2fX8//q4/ScyFov8hTHLi4Y70qxhbKFYllwjm4+doZBegDuUA676XFjZHswSwkS657u+u1c/r0OFojYzrIs28MTI329ay/4X09QTetrXfnq7NMmojDT3/rYC9L3/VGO+kCgYBCNdwrgFm/oET1y+RSIsMsHC8KkmVrOm7utiQBnlacbqJCyzR4XW1OikxOOcbNX1JJ99qeuxxzu36ed2CTQHSciNW3OfVqfASWW7RODKp5xWdSLjclOHHScJ5EN4uD1giihDlFEehugy63wCSBWEXmoV5G5bGwkPPNu6sveT3uHQ==

View File

@@ -0,0 +1 @@
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnS0dxNVKYXQj1SU3j9LYcx0JiPKQZv6d6MbrX7QyztlvkohtDDcKuLlUFur3lYSPgmx94hkBb+dQLxJba1e/a0H2x4G4MLXmwrmyVw7GySdYBOXlTFmDHDguuqd36HtcCTrKL0Tm4dTmuUn+HgcRfchqtbvpcX6p6snVGXn0ZcYzQsRPEAYQbE7gj2qO3Gih7FyDw6FyFgwyArqtbeI2UxlfyrQpNnxHX+ZAF9aqMNq/A3C4cod2HUTVgVP0FzWLI6hg1RK4xqmcWiosdbVlmZyE3iIqJutWYlDf+x9bAjYsNWNvbtW/GcoB+5Oq0MvcC69020yuo3fAbbrq1U+RBwIDAQAB

View File

@@ -0,0 +1 @@
MIIEogIBAAKCAQEAnS0dxNVKYXQj1SU3j9LYcx0JiPKQZv6d6MbrX7QyztlvkohtDDcKuLlUFur3lYSPgmx94hkBb+dQLxJba1e/a0H2x4G4MLXmwrmyVw7GySdYBOXlTFmDHDguuqd36HtcCTrKL0Tm4dTmuUn+HgcRfchqtbvpcX6p6snVGXn0ZcYzQsRPEAYQbE7gj2qO3Gih7FyDw6FyFgwyArqtbeI2UxlfyrQpNnxHX+ZAF9aqMNq/A3C4cod2HUTVgVP0FzWLI6hg1RK4xqmcWiosdbVlmZyE3iIqJutWYlDf+x9bAjYsNWNvbtW/GcoB+5Oq0MvcC69020yuo3fAbbrq1U+RBwIDAQABAoIBADkhJfnegPutKD0YGvr261/kBQw3Bo+5KpJqgzE1IWaYF/rOBbzz4LzF+C+gVj+NgFAquRLOffw7uqRxarM4oMYOovFfUCC8bVUIBC+qmkyRNWgKW+8FdidysGF975KcDBb6vHSz+avKI9bjcy9c6Fms2ESYOcDcBkzl8cQh1NiMv+tEQvA3VyUGUzk6IbpN8+kzNtmGZ0zNyehp3Mo4LWCHUJ8Ixmd1+/EzNuUri8XLkJL0/Hn+RQOTi2Z67C9NkZC12bqJIXMZJt46PDMpE/QY4CBhDLGdn5xP0Cw1X7pQ5RV+XP1P32MEfNPTlYidqcT+ZeCEhHjO+ZT+z9aHAVECgYEA5lWqBefJgY32qyDkMZ0X1ObpgAurAshKHaAXDyKcDv5GKAqpRM0+rK26ar8KAh17dYnVDYcmpyxNixgz8oz78EEgshOOqMeNNQ37DIFxEXEQ9xezl4HPbXQ/yc+iKZPZnI1GFgXgpk6GD8TXuNuik2tB7cVHqjOIBphsCV+EKr8CgYEArrCYnMimvlgUWcLD7upw0DYhitdXM3aVl0TGtFs7wUsfvoh0qyDFSg+ENBYyV/RXr17q7nljrXzys7ftkGUecD/O1SZw1ipZhWJ2DJsLOAr2AmhaNPJwkiZrI8ZuSbYkxSZzD4oy5PEYd1ePr5VJaZzC6Z0f120Srl3f3ir/k7kCgYAXs8kDQo7h3hH8Gi5hTKEfL4PnwUufxayaz9aPoCgfAtuFU1OH2PcSHe6I/Y+yGAaUWdKqybWYjl6MabkuxINIfes3Z/vOMnq9curappdUDCaKxs2cUadexA+sXMl7LdO+4GrN6VzswDfbd44bX76jHO5z4VE2mobs5tJ3RHT9UQKBgCujG4xWpyh3MiY1++HLmIC6dOiM4FCPt9CAsq5M+AFR9c0Poy04U3Arrhegz9SeyeSZ7k/B7P9ibfIs6OAgEllx5wXhw2AMVi52qQx/Em9edZOmY5pEUZCAnlTidZxeLpM9BpMEL7B29Wiia9ctkJgcO6hFwrV6nqcF9i02Sn+pAoGAe66CemVpBUAfTBOPTdwDKf/if3n73tbyj7vj3y4QQ9jReZWEmKvGIyhNypj9l6esJQSDgoYcYs6ArGKDWbzeyZSB97Wh44JBIEfYJ0MpEv262MZ46+JRFLvj6FR/egpWdIp44Ys1/SWeuG/U4OlwoXCca4KsonWnOlo0Fa6YSSA=

View File

@@ -1,6 +1,8 @@
package alipayapi
import "git.rosy.net.cn/baseapi/utils"
import (
"git.rosy.net.cn/baseapi/utils"
)
type CreatePayParam struct {
OutTradeNo string `json:"out_trade_no"` //商户订单号。 由商家自定义64个字符以内仅支持字母、数字、下划线且需保证在商户端不重复。

View File

@@ -0,0 +1,219 @@
package alipayapi
import (
"crypto/md5"
"crypto/x509"
"encoding/hex"
"encoding/pem"
"errors"
"fmt"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/gopay-main/pkg/util"
"io/ioutil"
"strings"
)
const (
AliPayPublicCertPath = "./config/alipayCertPublicKey_RSA2.crt" // 支付宝公钥证书文件路径
aliPayRootCertPath = "./config/alipayRootCert.crt" // 支付宝根证书文件路径
appCertPath = "./config/appCertPublicKey_2019110769024042.crt" // 应用公钥证书路径
)
// WithdrawalSystemParam 支付包创建提现操作,系统参数
type WithdrawalSystemParam struct {
AppId string `json:"app_id"` // 支付宝分配给开发者的应用ID
Method string `json:"method"` // 接口名称
Charset string `json:"charset"` // 请求使用的编码格式如utf-8,gbk,gb2312等
SignType string `json:"sign_type"` // 商户生成签名字符串所使用的签名算法类型目前支持RSA2和RSA推荐使用RSA2
Sign string `json:"sign"` // 商户请求参数的签名串,详见签名
Timestamp string `json:"timestamp"` // 发送请求的时间,格式"yyyy-MM-dd HH:mm:ss"
Version string `json:"version"` // 调用的接口版本固定为1.0
BizContent string `json:"biz_content"` // 请求参数的集合,最大长度不限,除公共参数外所有请求参数都必须放在这个参数中传递,具体参照各产品快速接入文档
}
// WithdrawalParam 支付宝创建提现操作,请求参数
type WithdrawalParam struct {
// 必填
OutBizNo string `json:"out_biz_no"` // 商家侧唯一订单号,由商家自定义。对于不同转账请求,商家需保证该订单号在自身系统唯一。
TransAmount float64 `json:"trans_amount"` // 订单总金额,单位为元,不支持千位分隔符,精确到小数点后两位,取值范围[0.1,100000000]。
ProductCode string `json:"product_code"` // 销售产品码。单笔无密转账固定为 TRANS_ACCOUNT_NO_PWD。
BizScene string `json:"biz_scene"` // 业务场景。单笔无密转账固定为 DIRECT_TRANSFER。
OrderTitle string `json:"order_title"` // 转账业务的标题,用于在支付宝用户的账单里显示。
PayeeInfo *PayeeInfoParam `json:"payee_info"` // 收款方信息
//AppCertSN string `json:"app_cert_sn"` // 支付宝应用证书
//AliPayPublicCertSN string `json:"ali_pay_public_cert_sn"` // 支付宝公钥证书
//AliPayRootCertSN string `json:"ali_pay_root_cert_sn"` // 支付宝根证书
// 可选参数
Remark string `json:"remark"` // 业务备注。
}
type PayeeInfoParam struct {
Identity string `json:"identity"` // 参与方的标识 ID。 当 identity_type=ALIPAY_USER_ID 时,填写支付宝用户 UID。示例值2088123412341234。 当 identity_type=ALIPAY_LOGON_ID 时填写支付宝登录号。示例值186xxxxxxxx。
IdentityType string `json:"identity_type"` // 参与方的标识类型,目前支持如下枚举: ALIPAY_USER_ID支付宝会员的用户 ID可通过 获取会员信息 能力获取。ALIPAY_LOGON_ID支付宝登录号支持邮箱和手机号格式
// 可选参数
Name string `json:"name"` // 参与方真实姓名。如果非空,将校验收款支付宝账号姓名一致性。 当 identity_type=ALIPAY_LOGON_ID 时,本字段必填。若传入该属性,则在支付宝回单中将会显示这个属性。
}
// Withdrawal4AliPay 单笔转账接口,公司转账给个人
func (a *API) Withdrawal4AliPay(param *WithdrawalParam) (map[string]interface{}, error) {
if param.PayeeInfo.Identity == "" || param.PayeeInfo.Name == "" {
return nil, errors.New("支付宝关联电话和用户正式姓名不能为空")
}
param.ProductCode = "TRANS_ACCOUNT_NO_PWD"
param.BizScene = "DIRECT_TRANSFER"
param.PayeeInfo.IdentityType = "ALIPAY_LOGON_ID"
// 获取证书
appCertSN, aliPayRootCertSN, aliPayPublicCertSN, err := SetCertSnByPath(appCertPath, aliPayRootCertPath, AliPayPublicCertPath)
if err != nil {
return nil, err
}
certSN := make(map[string]interface{}, 3)
certSN["app_cert_sn"] = appCertSN
certSN["alipay_public_cert_sn"] = aliPayPublicCertSN
certSN["alipay_root_cert_sn"] = aliPayRootCertSN
result, err := a.AccessAPI("alipay.fund.trans.uni.transfer", certSN, utils.Struct2FlatMap(param), false) // , "root_cert_content": RootCertContent
if err != nil {
return nil, err
}
return result, nil
}
// SetCertSnByPath 通过应用公钥证书路径设置 app_cert_sn、alipay_root_cert_sn、alipay_cert_sn
// appCertPath应用公钥证书路径
// aliPayRootCertPath支付宝根证书文件路径
// aliPayPublicCertPath支付宝公钥证书文件路径
func SetCertSnByPath(appCertPath, aliPayRootCertPath, aliPayPublicCertPath string) (string, string, string, error) {
appCertSn, err := GetCertSN(appCertPath)
if err != nil {
return "", "", "", fmt.Errorf("get app_cert_sn return err, but alse return alipay client. err: %w", err)
}
rootCertSn, err := GetRootCertSN(aliPayRootCertPath)
if err != nil {
return "", "", "", fmt.Errorf("get alipay_root_cert_sn return err, but alse return alipay client. err: %w", err)
}
publicCertSn, err := GetCertSN(aliPayPublicCertPath)
if err != nil {
return "", "", "", fmt.Errorf("get alipay_cert_sn return err, but alse return alipay client. err: %w", err)
}
return appCertSn, rootCertSn, publicCertSn, nil
}
/*
Q使用公钥证书签名方式下为什么开放平台网关的响应报文需要携带支付宝公钥证书SNalipay_cert_sn
**
A开发者上传自己的应用公钥证书后开放平台会为开发者应用自动签发支付宝公钥证书供开发者下载用来对开放平台网关响应报文做验签。
但是支付宝公钥证书可能因证书到期或者变更CA签发机构等原因可能会重新签发证书。在重新签发前开放平台会在门户上提前提醒开发者支付宝应用公钥证书变更时间。
但为避免开发者因未能及时感知支付宝公钥证书变更而导致验签失败,开放平台提供了一种支付宝公钥证书无感知升级机制,具体流程如下:
1开放平台网关在响应报文中会多返回支付宝公钥证书SN
2开放平台网关提供根据SN下载对应支付宝公钥证书的API接口
3开发者在验签过程中先比较本地使用的支付宝公钥证书SN与开放平台网关响应中SN是否一致。若不一致可调用支付宝公钥证书下载接口下载对应SN的支付宝公钥证书。
4对下载的支付宝公钥证书执行证书链校验若校验通过则用该证书验签。
基于该机制可实现支付宝公钥证书变更时开发者无感知当前开放平台提供的SDK已基于该机制实现对应功能。若开发者未通过SDK接入须自行实现该功能。
*/
// GetCertSN 获取证书序列号SN
// certPathOrData x509证书文件路径(appCertPublicKey.crt、alipayCertPublicKey_RSA2.crt) 或证书 buffer
// 返回 sn证书序列号(app_cert_sn、alipay_cert_sn)
// 返回 errerror 信息
func GetCertSN(certPathOrData interface{}) (sn string, err error) {
var certData []byte
switch pathOrData := certPathOrData.(type) {
case string:
certData, err = ioutil.ReadFile(pathOrData)
if err != nil {
return util.NULL, err
}
case []byte:
certData = pathOrData
default:
return util.NULL, errors.New("certPathOrData 证书类型断言错误")
}
block, _ := pem.Decode(certData)
if block != nil {
cert, err := x509.ParseCertificate(block.Bytes)
if err != nil {
return util.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 == util.NULL {
return util.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,
}
// GetRootCertSN 获取root证书序列号SN
// rootCertPathOrData x509证书文件路径(alipayRootCert.crt) 或文件 buffer
// 返回 sn证书序列号(alipay_root_cert_sn)
// 返回 errerror 信息
func GetRootCertSN(rootCertPathOrData interface{}) (sn string, err error) {
var (
certData []byte
certEnd = `-----END CERTIFICATE-----`
)
switch pathOrData := rootCertPathOrData.(type) {
case string:
certData, err = ioutil.ReadFile(pathOrData)
if err != nil {
return util.NULL, err
}
case []byte:
certData = pathOrData
default:
return util.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 == util.NULL {
sn += hex.EncodeToString(h.Sum(nil))
} else {
sn += "_" + hex.EncodeToString(h.Sum(nil))
}
}
}
if sn == util.NULL {
return util.NULL, errors.New("failed to get sn,please check your cert")
}
return sn, nil
}
// 退款签名

View File

@@ -45,3 +45,21 @@ func TestCreatePay3(t *testing.T) {
}
t.Log(utils.Format4Output(result, false))
}
// 提现操作
func TestCreatePay4(t *testing.T) {
data, err := api.Withdrawal4AliPay(&WithdrawalParam{
OutBizNo: "199308263974Dx1716",
TransAmount: 0.10,
ProductCode: "",
BizScene: "",
OrderTitle: "冲天猴退款",
PayeeInfo: &PayeeInfoParam{
Identity: "18981810340",
Name: "刘磊",
},
Remark: "测试退款",
})
t.Log("data===========", utils.Format4Output(data, false))
t.Log("err===========", err)
}

View File

@@ -0,0 +1 @@
package alipayapi

View File

@@ -5,6 +5,7 @@ import (
"fmt"
"git.rosy.net.cn/baseapi"
"go.uber.org/zap"
"math/rand"
"testing"
)
@@ -198,5 +199,5 @@ func TestDataUnmas(t *testing.T) {
}
func TestErr2CallbackResponse(t *testing.T) {
fmt.Println(20 & 2)
fmt.Println(fmt.Sprintf("%05d", rand.Intn(1000000)))
}