1. geschäftlicher Hintergrund
Ich habe kürzlich mit einigen E-Commerce-Unternehmen in Kontakt gekommen und habe festgestellt, dass beide Schnittstellenparteien beim Umgang mit E-Commerce-Geschäftsoberflächen wie Taobao und Zahlungsschnittstellen die Schnittstellendaten signieren müssen, um sicherzustellen, dass die Datenparameter nicht zu den Datenparametern wurden. Nachdem die Überprüfung verabschiedet wurde, wird die Geschäftslogikverarbeitung durchgeführt. Stellen wir hier hauptsächlich die Verarbeitungsideen vor. Was den Signaturalgorithmus angeht, werde ich ihn nicht zu sehr vorstellen, es gibt viele von ihnen im Internet.
2. Verarbeitung von Ideen
Die beiden Parteien waren sich einig, dass die Parameter in einer bestimmten Reihenfolge angeordnet sind, z. B. in der Reihenfolge des ersten Buchstabens, wie z. B. URL: http: //xxx/xxx.do? Nachdem Sie den eingehenden Parameter erhalten haben, fügen Sie die Parameterzeichenfolge A = WERSD & B = SD2354 & C = 4 gemäß den Signaturregeln hinzu und verwenden Sie MD5, um ihn einmal zu unterzeichnen, und vergleichen Sie ihn dann mit dem Signaturwert des eingehenden Parameters, um zu bestätigen, ob der Anrufer legal ist. Dies ist die Idee der Signaturüberprüfung der Schnittstellen.
3. Beispielübungen
Nach der Kommunikation zwischen der Schnittstelle wurde der folgende Konsens auf der Schnittstelle erreicht:
1. Notizen beziehen sich hauptsächlich auf das Protokoll der Schnittstelle, eingehende Parametertyp, Signaturalgorithmus, Dateiformat usw.
2. Das Folgende ist ein echter Fall einer E-Commerce-Geschäftsschnittstelle. Die beiden Parteien haben sich auf die Grenzflächen -URL, Geschäftsparameter, feste Parameter, Signaturen und Rückgabedatenformate vereinbart.
Beim Aufrufen einer Schnittstelle lautet der Code des Schnittstellenanrufers wie folgt (nur als Referenz): Paket com.pcmall; import java.io.bufufferedReader; import Java.io.dataoutputStream; Import Java.io.ioxception; Import Java.io.inputStreamReader; Import Java.io.unsupportenencoding; Java.net.urlencoder; Import Java.Security.Messagedigest; Import Java.Security.NoSuchalgorithmException; Import Java.util.ArrayList; Klasse apitest {static String test_url = "Ausstehend"; static String test_key = "Ausstehend"; static String test_sec = "Ausstehend"; public static void main (String [] args) löst nicht supportedenCodingException, nosuchalgorithmException {String result = getResult (test_url, getReqParam ()) aus; System.out.print (Ergebnis); } private statische String getReqParam () löscht die nicht supportedenCodingException, NoSuchalgorithmException {Treemap <String, String> Req = New TREEMAP <String, String> (); req.put ("a", test_key); req.put ("f", "json"); req.put ("l", "zh_cn"); req.put ("m", "Zhongan.Repair.Query"); req.put ("v", "1,0"); req.put ("i", "" + system.currentTimemillis () / 1000); req.put ("params", "{/" ordnungsno/":/" test018/"}"); req.put ("s", sign (req, null, test_sec)); StringBuilder param = new StringBuilder (); für (iterator <map.Entry <String, String >> it = req.EnrySet (). iterator (); it.hasnext ();) {map.Entry <string, string> e = it.next (); param.append ("&"). append (e.getkey ()). append ("="). append (urlencoder.encode (e.getValue (), "utf-8"); } return param.toString (). substring (1); } private statische String -Sign (MAP <String, String> Paramvalues, List <String> IgnoreParamNames, String Secret) löst NoSuchalgoritHMexception, unupportEdEcodingException {StringBuilder sb = new StringBuilder () aus; List <string> paramnames = new ArrayList <string> (paramvalues.size ()); paramnames.addall (paramvalues.keyset ()); if (ignoreParamnames! }} Collectionss.sort (Paramnames); Sb.Append (Geheimnis); für (String -ParamName: ParamName) {sb.Append (paramname) .Append (paramvalues.get (paramname)); } SB.Append (Geheimnis); MessagedIGest MD = MessagedIGest.getInstance ("SHA-1"); return byte2hex (md.Digest (sb.tostring (). getBytes ("utf-8")); } private statische String byte2hex (byte [] bytes) {stringBuilder sign = new StringBuilder (); für (int i = 0; i <bytes.length; i ++) {String hex = Integer.tohexString (Bytes [i] & 0xff); if (hex.length () == 1) {sign.Append ("0"); } Sign.Append (hex.touppercase ()); } return sign.toString (); } private statische String getResult (String urlstr, String -Inhalt) {url url = null; HttpurlConnection Connection = null; try {url = new url (urlstr); connection = (httpurlConnection) url.openconnection (); connection.setDooutput (true); Connection.SetDoInput (true); Connection.SetRequestMethod ("Post"); Connection.SetRequestProperty ("Content-Type", "Anwendung/x-www-form-urlencoded; charSet = utf-8"); Connection.SetUSecaches (Falsch); Connection.Connect (); DataOutputStream out = new DataOutputStream (connection.getOutputStream ()); out.write (content.getBytes ("utf-8")); out.flush (); out.close (); BufferedReader reader = neuer bufferedReader (neuer InputStreamReader (Connection.GetInputStream (), "UTF-8")); StringBuffer Buffer = new StringBuffer (); String line = ""; while ((line = reader.readline ())! = null) {buffer.Append (line); } reader.close (); return buffer.toString (); } catch (ioException e) {e.printstacktrace (); } endlich {if (connection! = null) {connection.disconnect (); }} return null; }} Der serverseitige Code lautet wie folgt (nur als Referenz):
@RequestMapping ("/reparaturtakeOrder")@responseBodypublic repairVo reparaturtakeOrder (@RequestBody String jSONSONS) {logger.info ("ReparaturtakeOrder -Parameter:" + JSONSONSE); responsevo responsevo = nul; try {reparaturorder reparaturorder = jackjsonutil.tobean (jakonutil.tobean, jungen), jungen, jungen, jungen, jungen, jungen, jungen, jungen, jungen, jungen, jungen, jungen, jungen, jungen, jungen, still, still, still, still, still, still, still, still, still, still, still, still, still, still, still, still, jungen (j.-nula, J. jämmere, jagel. TREEMAP <string, String> (); paramsmap.put ("gsxx01", reparaturorder.getgsxx01 ()); paramsmap.put ("orderType", reparaturorder.getordertype (). ToString ()); paramsmap.put ("serviceno", reparaturorder. reparaturorder.getvipcard ()); paramsmap.put ("Customername", reparaturorder.getCustomername ()); paramsmap.put ("Customerphone", reparaturorder.getCustomerphone ()); paramsmap.put ("CustomerTel", reparaturorder.getCustomerel (); reparaturorder.getProvince ()); paramsmap.put ("City", reparaturorder.getCity ()); paramsmap.put ("County", Reparaturorder.getCounty ()); paramsmap.put ("Adresse", reparaturorder.getadDress ()); paramsmap.put ("salcode, reparaturorder.," salerCode "," salerCode "," salerCode ". reparaturorder.getSalername ()); paramsmap.put ("StoreCode", reparaturorder.getStoreCode ()); paramsmap.put ("Storename", reparaturorder.getStorename ()); paramsmap.put ("Site", reparaturorder.getSite (); paramsmap.put ("SitteP. Reparaturorder.GetSedSesp ()); paramsmap.put ("EngineerCode", Reparaturorder.GeteGineerCode ()); Paramsmap.put ("Engineername", Reparaturorder.GeteEnName ()); if (reparaturorder.getServicedate ()! (reparaturorder.getSalePrice ()! reparaturorder.getCostCenter ()); paramsmap.put ("gsxx02", reparaturorder.getgsxx02 ()); paramsmap.put ("returnReason", reparaturorder.getReune ()); if (reparaturorder.getoriorder ()! reparaturorder.getoriorder (). toString ());} if (reparaturorder.getoriserviceno ()! RequestUtils.getParamsrc (paramsmap); logger.info ("signorder:" + paramsrc); // Überprüfen Sie die Signaturverifizierungsoperation if (Signutils.VerifyMd5 (paramsrc, reparaturorder.getSign ()) {// Verarbeitung von Business Logic ResponctVO = ERPICEIMPL.Repairtakorder (Reparature -Antwort {ERPSVICEMPL.RepaReInL. Responsevo (); responsevo.setsuSccess (false); responsevo.seterrormSg ("Login -Verifizierung fehlgeschlagen");}} catch (Ausnahme E) {logger.Error ("", e); responsevo = new responsevo (); responsevo.setsuccess (false); reactingVoSpohrorm (ssetRormsg (StringRormsg (StringRorMsG) (StringRormsg (String)). e.getMessage (): "Hintergrundausnahme");} return responsevo;}Der obige Artikel über die Operation Java HTTP Interface Plus und Überprüfung ist der gesamte Inhalt, den ich mit Ihnen teile. Ich hoffe, Sie können Ihnen eine Referenz geben und ich hoffe, Sie können wulin.com mehr unterstützen.