diff --git a/platformapi/alipayapi/alipayapi.go b/platformapi/alipayapi/alipayapi.go index ef6170f7..46f639ef 100644 --- a/platformapi/alipayapi/alipayapi.go +++ b/platformapi/alipayapi/alipayapi.go @@ -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", diff --git a/platformapi/alipayapi/alipayapi_test.go b/platformapi/alipayapi/alipayapi_test.go index 6df5aca1..729bdfac 100644 --- a/platformapi/alipayapi/alipayapi_test.go +++ b/platformapi/alipayapi/alipayapi_test.go @@ -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== -`)) } diff --git a/platformapi/alipayapi/config/alipayCertPublicKey_RSA2.crt b/platformapi/alipayapi/config/alipayCertPublicKey_RSA2.crt new file mode 100644 index 00000000..b91b17ad --- /dev/null +++ b/platformapi/alipayapi/config/alipayCertPublicKey_RSA2.crt @@ -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----- diff --git a/platformapi/alipayapi/config/alipayRootCert.crt b/platformapi/alipayapi/config/alipayRootCert.crt new file mode 100644 index 00000000..76417c53 --- /dev/null +++ b/platformapi/alipayapi/config/alipayRootCert.crt @@ -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----- \ No newline at end of file diff --git a/platformapi/alipayapi/config/appCertPublicKey_2019110769024042.crt b/platformapi/alipayapi/config/appCertPublicKey_2019110769024042.crt new file mode 100644 index 00000000..fbd53ed0 --- /dev/null +++ b/platformapi/alipayapi/config/appCertPublicKey_2019110769024042.crt @@ -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----- \ No newline at end of file diff --git a/platformapi/alipayapi/config/www.jxcs.net.csr b/platformapi/alipayapi/config/www.jxcs.net.csr new file mode 100644 index 00000000..cbdd4f01 --- /dev/null +++ b/platformapi/alipayapi/config/www.jxcs.net.csr @@ -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----- diff --git a/platformapi/alipayapi/config/www.jxcs.net_公钥.txt b/platformapi/alipayapi/config/www.jxcs.net_公钥.txt new file mode 100644 index 00000000..487e8ded --- /dev/null +++ b/platformapi/alipayapi/config/www.jxcs.net_公钥.txt @@ -0,0 +1 @@ +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAiHDMGdaCukXaPPNAnuiTeU2rLqpQlrf8Ve+hn3Pee3DvvLTwyM4yh8qKCZ4FPCGfXhZLbDyBLDZWJS3stiGpgwkBsmCmQagyzJKmKmZyIFsoy4wBTgj3QPTpemtPtr6C3Qo9tFzYTLNc9JZj9ZvHpJo9oSDxmCMelw9IA0UkTHv6oGiyRbeAgSW7r0qqG1ZsRM/Zu6JkvesIUrGq+hCZRFqMXf+sxaL5VGfIjCoqiGhbB0lL1OZyvtaXOBcsi4IAPUkDhHUFu1a2WD6mZ8GkmhzL/RBzThiIlj1mB8qjMFtNccpzwxtH9RtjCOR37TS6aWaM8MAWuSX/r0uUA8lSaQIDAQAB \ No newline at end of file diff --git a/platformapi/alipayapi/config/www.jxcs.net_私钥.txt b/platformapi/alipayapi/config/www.jxcs.net_私钥.txt new file mode 100644 index 00000000..0b480c88 --- /dev/null +++ b/platformapi/alipayapi/config/www.jxcs.net_私钥.txt @@ -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== \ No newline at end of file diff --git a/platformapi/alipayapi/config/应用公钥2048.txt b/platformapi/alipayapi/config/应用公钥2048.txt new file mode 100644 index 00000000..861b2869 --- /dev/null +++ b/platformapi/alipayapi/config/应用公钥2048.txt @@ -0,0 +1 @@ +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnS0dxNVKYXQj1SU3j9LYcx0JiPKQZv6d6MbrX7QyztlvkohtDDcKuLlUFur3lYSPgmx94hkBb+dQLxJba1e/a0H2x4G4MLXmwrmyVw7GySdYBOXlTFmDHDguuqd36HtcCTrKL0Tm4dTmuUn+HgcRfchqtbvpcX6p6snVGXn0ZcYzQsRPEAYQbE7gj2qO3Gih7FyDw6FyFgwyArqtbeI2UxlfyrQpNnxHX+ZAF9aqMNq/A3C4cod2HUTVgVP0FzWLI6hg1RK4xqmcWiosdbVlmZyE3iIqJutWYlDf+x9bAjYsNWNvbtW/GcoB+5Oq0MvcC69020yuo3fAbbrq1U+RBwIDAQAB \ No newline at end of file diff --git a/platformapi/alipayapi/config/应用私钥2048.txt b/platformapi/alipayapi/config/应用私钥2048.txt new file mode 100644 index 00000000..4f3e0fb3 --- /dev/null +++ b/platformapi/alipayapi/config/应用私钥2048.txt @@ -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= \ No newline at end of file diff --git a/platformapi/alipayapi/pay.go b/platformapi/alipayapi/pay.go index 66acd989..02e857b6 100644 --- a/platformapi/alipayapi/pay.go +++ b/platformapi/alipayapi/pay.go @@ -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个字符以内,仅支持字母、数字、下划线且需保证在商户端不重复。 diff --git a/platformapi/alipayapi/pay_for_user.go b/platformapi/alipayapi/pay_for_user.go new file mode 100644 index 00000000..7042604c --- /dev/null +++ b/platformapi/alipayapi/pay_for_user.go @@ -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:使用公钥证书签名方式下,为什么开放平台网关的响应报文需要携带支付宝公钥证书SN(alipay_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) +// 返回 err:error 信息 +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) +// 返回 err:error 信息 +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 +} + +// 退款签名 diff --git a/platformapi/alipayapi/pay_test.go b/platformapi/alipayapi/pay_test.go index 67da3592..70e7bea3 100644 --- a/platformapi/alipayapi/pay_test.go +++ b/platformapi/alipayapi/pay_test.go @@ -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) +} diff --git a/platformapi/alipayapi/xxx.go b/platformapi/alipayapi/xxx.go new file mode 100644 index 00000000..f30b67a7 --- /dev/null +++ b/platformapi/alipayapi/xxx.go @@ -0,0 +1 @@ +package alipayapi diff --git a/platformapi/fnpsapi/fn_test.go b/platformapi/fnpsapi/fn_test.go index 5a87f050..4cc61899 100644 --- a/platformapi/fnpsapi/fn_test.go +++ b/platformapi/fnpsapi/fn_test.go @@ -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))) }