1. Latar belakang bisnis
Saya baru-baru ini bersentuhan dengan beberapa bisnis e-commerce dan menemukan bahwa ketika berhadapan dengan antarmuka bisnis e-commerce, seperti taobao dan antarmuka pembayaran, kedua pihak antarmuka perlu menandatangani data antarmuka untuk memastikan bahwa parameter data belum dirusak selama proses transmisi. Setelah verifikasi dilewati, pemrosesan logika bisnis dilakukan. Mari kita perkenalkan ide -ide pemrosesan di sini. Adapun algoritma tanda tangan, saya tidak akan terlalu memperkenalkannya, ada banyak dari mereka di internet.
2. Ide pemrosesan
Kedua pihak sepakat bahwa parameter disusun dalam urutan tertentu, seperti dalam urutan huruf pertama, seperti url: http: //xxx/xxx.do? A = wersd & b = sd2354 & c = 4 & tanda tangan = xxxxxxxxxxxxxx (tanda tangan adalah tandatangan. Setelah Anda mendapatkan parameter yang masuk, tambahkan string parameter A = WERSD & B = SD2354 & C = 4 sesuai dengan aturan tanda tangan yang Anda sepakati, dan gunakan MD5 untuk menandatanganinya sekali, dan kemudian membandingkannya dengan nilai tanda tangan dari parameter yang masuk untuk mengonfirmasi apakah penelepon legal. Ini adalah gagasan verifikasi tanda tangan antarmuka.
3. Contoh Latihan
Setelah komunikasi antara antarmuka, konsensus berikut dicapai pada antarmuka:
1. Catatan terutama merujuk pada protokol antarmuka, tipe parameter yang masuk, algoritma tanda tangan, format file, dll.
2. Berikut ini adalah kasus nyata dari antarmuka bisnis e-commerce. Kedua pihak telah menyetujui URL antarmuka, parameter bisnis, parameter tetap, tanda tangan dan format data pengembalian.
Saat memanggil antarmuka, kode antarmuka penelepon adalah sebagai berikut (hanya untuk referensi): Paket com.pcmall; import java.io.bufferedreader; import java.iata.dataoutputStream; import java.io.ioexception; impor java.io.inputStreamreader; impor java.hntportedencodingException; impor java.net.htpurnectportedencodexception; impor java.net.htpurnectportportedencodexception; impor java.net.htpurnectportportedencodexception; impor java.net.htpurnectportportedEncepion; java.net.urlencoder; impor java.security.messagedigest; impor java.security.nosuchalgorithmexception; impor java.util.arraylist; impor java.util.collections; impor java.util.iterator; impor java.util.util; java.util.treemap; kelas publik apitest {static string test_url = "tertunda"; string statis test_key = "tertunda"; string statis test_sec = "tertunda"; public static void main (string [] args) melempar UnsportedencodingException, nosuchalgorithMexception {string result = getResult (test_url, getReQParam ()); System.out.print (hasil); } Private Static String getReQParam () melempar UnsupportedEncodingException, nosuchalgorithMException {treemap <string, string> req = treemap baru <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", "{/" assignno/":/" test018/"}"); req.put ("s", tanda (req, null, test_sec)); StringBuilder param = stringBuilder baru (); untuk (iterator <map.entry <string, string >> it = req.entryset (). 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 static string tanda (peta <string, string> paramValues, daftar <string> IgnorEparamnames, String Secret) melempar nosuchalgorithmException, unsupportedencodingException {stringBuilder SB = stringBuilder baru (); Daftar <String> paramNames = ArrayList baru <string> (paramValues.size ()); paramnames.addall (paramvalues.keyset ()); if (ignoreparamnames! = null && ignoreparamnames.size ()> 0) {for (string ignoreparamname: ignoreparamnames) {paramnames.remove (ignoreparamname); }} Collections.sort (paramNames); SB.Append (Secret); untuk (string paramName: paramName) {sb.append (paramName) .append (paramValues.get (paramName)); } SB.Append (Secret); MessageDigest MD = MessageScageSt.getInstance ("sha-1"); return byte2Hex (md.digest (sb.tostring (). getBytes ("UTF-8")))); } private static string byte2Hex (byte [] bytes) {stringBuilder Sign = new StringBuilder (); untuk (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 static string getResult (string urlstr, string content) {url url = null; Koneksi httpurlconnection = null; coba {url = url baru (urlstr); koneksi = (httpurlconnection) url.openconnection (); Connection.setDoOutput (true); Connection.setDoInput (true); Connection.setRequestMethod ("Post"); connection.setRequestProperty ("tipe konten", "Aplikasi/X-WWW-Form-Urlencoded; charset = UTF-8"); Connection.setusecaches (false); connection.connect (); DataOutputStream out = DataOutputStream baru (Connection.GetOutputStream ()); out.write (content.getbytes ("UTF-8")); out.flush (); out.close (); BufferedReader Reader = BufferedReader baru (inputStreamReader baru (connection.getInputStream (), "UTF-8")); StringBuffer buffer = stringBuffer baru (); String line = ""; while ((line = reader.readline ())! = null) {buffer.append (line); } reader.close (); return buffer.toString (); } catch (ioException e) {e.printstacktrace (); } akhirnya {if (koneksi! = null) {connection.disconnect (); }} return null; }} Kode sisi server adalah sebagai berikut (hanya untuk referensi):
@RequestMapping("/repairTakeOrder")@ResponseBodypublic ResponseVO repairTakeOrder(@RequestBody String jsonStr) {logger.info("repairTakeOrder parameter: " + jsonStr);ResponseVO responseVO = null;try {RepairOrder repairOrder = JackJsonUtil.toBean(jsonStr,RepairOrder.class);TreeMap<String, String> paramsMap = new Treemap <string, string> (); paramsmap.put ("gsxx01", reparyorder.getgsxx01 ()); paramsmap.put ("orderType", reparyorder.getOrderType (). ToString ()); paramsmap.put ("serviceno", repairorder.getServicEno ()); paramsmap.put ("servicEno", repairorder.getServicEno ()); paramsmap.put ("servicEno", reparyorder.getServicEno ()); paramsmap.put ("servicEno", reparyorder.getServicEno ()); Paramsmap.put ("servicEno", reparyorder.getServicEno (); Repairorder.getVipCard ()); paramsmap.put ("CustomerName", Repairorder.getCustomerName ()); paramsmap.put ("customerphone", reparyorder.getCustomerPhone ()); paramsmap.put ("customerTel", reparyorder.getCustomerTel ()); paramsmap.put ("customerTel", reparyorder.getCustomerTel ()); paramsmap.put ("MRUCTEL", MULTERORDER.getCUSTOMERTEL ()); paramSmap.put ("MRUCTEL", MRUCTERD.GETORDE.) (PARAMSMAP.put ("MULDUCORD", MREADORDER. REPYORDERD.GetCity ()); paramsmap.put ("county", flexorder.getCounty ()); paramsmap.put ("address", flexorder.getAddress ()); paramsmap.put ("SalerCode", Repairorder.getSalerCode ()); ParamSmap.put ("Salername", Repairorder.getsalerern ()); Paramsmap.put ("Salername", REPEPREATORDER.GETSALLEN (); REPYORDERD.GETSTORECODE ()); paramsmap.put ("Storename", Repairorder.getStoreName ()); paramsmap.put ("Situs", Repairorder.getSite ()); paramsmap.put ("Sitedesp", Repairorder.getsitedP (); ParamSmap.put ("engineercode", Repairorder.getsited (); Paramsmap.put ("engineercode", repreperorder.getsited (ParamsMap.put ("engineCode (" engineCode ("engineNord.); Repairorder.getEngineerName ()); if (flexorder.getServicedate ()! = null) {paramsmap.put ("servicedate", dateutils.FormatDate (repareOrder.getServicedate ()));} if (Repairorder.getSaleprice ()! = null) {paramsmap.put ("SalepRice ()! repairOrder.getSalePrice().toString());}paramsMap.put("profitCenter", repairOrder.getProfitCenter());paramsMap.put("costCenter", repairOrder.getCostCenter());paramsMap.put("gsxx02", repairOrder.getGsxx02());paramsMap.put("returnReason", Repairorder.getReTurnReason ()); if (flexorder.getoriorder ()! = null) {paramsmap.put ("oriorder", reparyorder.getoriorder (). ToString ());} if (repreaterDer.getoriserviceno ()! = null) {paramsmap.put ("oriserviceno () {paramsmap.put (" oriserviceno () {paramsmap.put ("oriserviceno (" oriserviceno ("oriservicen (" signature original string (a=1&b=2)String paramSrc = RequestUtils.getParamSrc(paramsMap);logger.info("SignOrder:" + paramSrc);//Check the signature verification operation if (SignUtils.verifymd5(paramSrc, repairOrder.getSign())) {//Processing business logic ResponsEvo = erpserviceImpl.repairtakeOrder (RepairOrder);} else {responseVo = responseVo baru (); responseVo.setsuccess (false); responseVo.seterrormsg ("Login Verifikasi Gagal");} Catch (Exception E) {Logger.Ror ("", E); Responsevo (); responseVo.setsuccess (false); responseVo.seterrormsg (stringutils.isnotblank (e.getMessage ())? e.getMessage (): "Latar belakang pengecualian");} return responseVo;}Artikel di atas pada operasi Java HTTP Interface Plus dan verifikasi adalah semua konten yang saya bagikan dengan Anda. Saya harap Anda dapat memberi Anda referensi dan saya harap Anda dapat mendukung wulin.com lebih lanjut.