必威体育Betway必威体育官网
当前位置:首页 > IT技术

新浪支付接口对接的总结

时间:2019-08-08 05:41:04来源:IT技术作者:seo实验室小编阅读:80次「手机版」
 

新浪支付

最近需要对接新浪支付,看到一篇文章感觉不错,先转载参考。

原文:http://blog.csdn.net/lzlovez/article/details/51167286

1.接口介入方式

这种接口介入的方式,各大平台都差不多的,支付宝啊,微信支付啊,融宝支付啊,银盈通啊。都是系统必要的参数,和接口需要的参数,拼一起然互加密。

新浪支付生成 sign 的方式,签名的方式可以是 RSA 的加密方式和 MD5 的加密的方式,不过新浪推荐的是MD5的加密方式,但是给的demo里面是RSA的方式,所有自己用的也会是RSA的加密方式。

简单的例子 创建激活会员

[java]view plaincopy 在CODE上查看代码片派生到我的代码片

  1. publicstaticSinaPayresponsecreateActivateMember(Map<String,Object>data)throwsException{
  2. SinaPayResponseresponse=newSinaPayResponse();
  3. if(data==null||data.size()==0){
  4. response.setCode(ResponceCodeEnum.Missingparameter.getCode());
  5. response.setERRORMsg("传入的参数为空");
  6. returnresponse;
  7. }
  8. //用户标识信息
  9. if(data.get("identity_id")==null||data.get("identity_id").equals("")){
  10. response.setCode(ResponceCodeEnum.MissingParameter.getCode());
  11. response.setErrorMsg("传入的参数:用户标识信息(identity_id)为空");
  12. returnresponse;
  13. }
  14. Map<String,Object>map=newHashMap<String,Object>();
  15. map.put("identity_id",data.get("identity_id"));
  16. //用户标识类型,目前只支持UID
  17. map.put("identity_type",SinaPayConfig.IDENTITY_TYPE);
  18. //1:个人会员;2:企业会员。默认是1
  19. if(data.get("member_type")!=null&&!data.get("member_type").equals("")){
  20. map.put("member_type",data.get("member_type"));
  21. }
  22. //系统参数
  23. map.put("service",SinaPayConfig.CREATE_ACTIVATE_MEMBER);
  24. Stringstr=SinaUtils.createLinkString(map,true);
  25. Stringres="";
  26. try{
  27. res=CallServiceUtil.sendPost(SinaPayConfig.MEMBER_TSET_URL,str);
  28. }catch(Exceptione){
  29. response.setCode(ResponceCodeEnum.connectionTimedOut.getCode());
  30. response.setErrorMsg("请求超时");
  31. returnresponse;
  32. }
  33. Stringresult=URLDecoder.decode(res,SinaUtils.CHARSET);
  34. Map<String,String>resultMap=GsonUtil.fronJson2Map(result);
  35. if(SinaPayConfig.APPLY_SUCCESS.equals(resultMap.get("response_code"))){//成功
  36. response.setCode(ResponceCodeEnum.success.getCode());
  37. response.setErrorMsg("请求成功");
  38. response.setResponseMap(resultMap);
  39. returnresponse;
  40. }else{
  41. response.setCode(ResponceCodeEnum.requestFails.getCode());
  42. response.setErrorMsg(resultMap.get("response_message"));
  43. response.setResponseMap(resultMap);
  44. returnresponse;
  45. }
  46. }

String str = SinaUtils.createLinkString(map, true);这一步是在吧我们需要的参数,包括 系统的参数,也包括接口需要的参数,生成 待签名的 字符串

[java]view plaincopy 在CODE上查看代码片派生到我的代码片

  1. /**
  2. *把参数重新排序下
  3. *
  4. *@parammap
  5. *@paramb
  6. *@return
  7. *@throwsException
  8. */
  9. publicstaticStringcreateLinkString(Map<String,Object>map,booleanencode)throwsException{
  10. map.put("version",SinaPayConfig.VERSION);
  11. map.put("request_time",SinaTimeUtils.getTime());
  12. map.put("partner_id",SinaPayConfig.PARTNER_ID);
  13. map.put("_input_charset",SinaUtils.CHARSET);
  14. Stringcontent=SinaUtils.getContent(map);
  15. map.put("sign",SinaUtils.getSign(content));
  16. map.put("sign_type",SinaPayConfig.SIGN_TYPE);
  17. List<String>keys=newArrayList<String>(map.keySet());
  18. collections.sort(keys);
  19. Stringprestr="";
  20. Stringcharset=(String)map.get("_input_charset");
  21. for(inti=0;i<keys.size();i++){
  22. Stringkey=keys.get(i);
  23. Stringvalue=(String)map.get(key);
  24. if(encode){
  25. try{
  26. value=URLEncoder.encode(URLEncoder.encode(value,charset),charset);
  27. }catch(UnsupportedEncodingExceptione){
  28. e.printstacktrace();
  29. }
  30. }
  31. if(i==keys.size()-1){
  32. prestr=prestr+key+"="+value;
  33. }else{
  34. prestr=prestr+key+"="+value+"&";
  35. }
  36. }
  37. returnprestr;
  38. }

res = CallServiceUtil.sendPost(SinaPayConfig.MEMBER_TSET_URL, str); 这一步是在请求接口,返回结果

[java]view plaincopy 在CODE上查看代码片派生到我的代码片

  1. publicstaticStringsendPost(Stringurl,Stringparam){
  2. printwriterout=null;
  3. BufferedReaderin=null;
  4. Stringresult="";
  5. try{
  6. URLrealUrl=newURL(url);
  7. URLConnectionconn=realUrl.openConnection();
  8. conn.setrequestproperty("accept","*/*");
  9. conn.setRequestProperty("connection","Keep-Alive");
  10. conn.setRequestProperty("user-agent","Mozilla/4.0(compatible;MSIE6.0;windowsNT5.1;SV1)");
  11. conn.setDoOutput(true);
  12. conn.setDoInput(true);
  13. out=newPrintWriter(conn.getoutputstream());
  14. out.print(param);
  15. out.flush();
  16. in=newBufferedReader(newinputstreamreader(conn.getInputStream()));
  17. Stringline;
  18. while((line=in.readLine())!=null){
  19. result+=line;
  20. }
  21. }catch(Exceptione){
  22. System.out.println("POST请求异常:"+e);
  23. e.printStackTrace();
  24. }finally{
  25. try{
  26. if(out!=null){
  27. out.close();
  28. }
  29. if(in!=null){
  30. in.close();
  31. }
  32. }catch(IOExceptionex){
  33. ex.printStackTrace();
  34. }
  35. }
  36. returnresult;
  37. }

这个时候返回的结果是经过URLencode的代码,所以需要 处理下

String result = URLDecoder.decode(res, SinaUtils.CHARSET);

Map<String, String> resultMap = GsonUtil.fronJson2Map(result); 这一步是在把得到的结果的传,转成Map

[java]view plaincopy 在CODE上查看代码片派生到我的代码片

  1. publicstatic<T>TfronJson2Map(Stringjson){
  2. returngson.fromJson(json,newTypeToken<Map<String,String>>(){
  3. }.getType());
  4. }

大部分的接口都是这样的调用的方式,有些接口需要的一些参数涉及用户的隐私,所以需要对参数进行RSA加密

[java]view plaincopy 在CODE上查看代码片派生到我的代码片

  1. /**
  2. *比如一些参数需要加密的话
  3. *
  4. *@paramstring待加密的信息
  5. *@throwsException
  6. *@throws
  7. */
  8. publicstaticStringgetRSAEncodeDoc(Stringdata)throwsException{
  9. byte[]data_byte=RSA.encryptByPublicKey(data.getBytes(CHARSET),SinaPayConfig.ENCRYPT);
  10. returnbase64.encode(data_byte);
  11. }

这个是 RSA 的类

[java]view plaincopy 在CODE上查看代码片派生到我的代码片

  1. packagecom.sinapay.util;
  2. importjava.io.ByteArrayOutputStream;
  3. importjava.io.UnsupportedEncodingException;
  4. importjava.security.InvalidKeyException;
  5. importjava.security.Key;
  6. importjava.security.KeyFactory;
  7. importjava.security.KeyPair;
  8. importjava.security.KeyPairGenerator;
  9. importjava.security.NoSuchAlgorithmException;
  10. importjava.security.PrivateKey;
  11. importjava.security.PublicKey;
  12. importjava.security.Signature;
  13. importjava.security.SignatureException;
  14. importjava.security.cert.Certificate;
  15. importjava.security.interfaces.RSAPrivateKey;
  16. importjava.security.interfaces.RSAPublicKey;
  17. importjava.security.spec.PKCS8EncodedKeySpec;
  18. importjava.security.spec.X509EncodedKeySpec;
  19. importjava.util.HashMap;
  20. importjava.util.Map;
  21. importjavax.crypto.Cipher;
  22. importorg.apache.commons.codec.binary.Base64;
  23. /**
  24. *
  25. *<p>RSA签名,加解密处理核心文件,注意:密钥长度1024</p>
  26. *@authorleelun
  27. *@version$Id:RSA.java,v0.12013-11-15下午2:33:53lilunExp$
  28. */
  29. publicclassRSA{
  30. /**
  31. *签名算法
  32. */
  33. publicstaticfinalStringSIGNATURE_ALGORITHM="SHA1withRSA";
  34. /**
  35. *加密算法RSA
  36. */
  37. publicstaticfinalStringKEY_ALGORITHM="RSA";
  38. /**
  39. *RSA最大加密明文大小
  40. */
  41. privatestaticfinalintMAX_ENCRYPT_BLOCK=117;
  42. /**
  43. *RSA最大解密密文大小
  44. */
  45. privatestaticfinalintMAX_DECRYPT_BLOCK=128;
  46. /**
  47. *获取公钥的key
  48. */
  49. privatestaticfinalStringPUBLIC_KEY="RSAPublicKey";
  50. /**
  51. *获取私钥的key
  52. */
  53. privatestaticfinalStringPRIVATE_KEY="RSAPrivateKey";
  54. /**
  55. *<p>
  56. *生成密钥对(公钥和私钥)
  57. *</p>
  58. *
  59. *@return
  60. *@throwsException
  61. */
  62. publicstaticMap<String,Object>genKeyPair()throwsException{
  63. KeyPairGeneratorkeyPairGen=KeyPairGenerator.getinstance(KEY_ALGORITHM);
  64. keyPairGen.initialize(1024);
  65. KeyPairkeyPair=keyPairGen.generateKeyPair();
  66. RSAPublicKeypublicKey=(RSAPublicKey)keyPair.getPublic();
  67. RSAPrivateKeyprivateKey=(RSAPrivateKey)keyPair.getPrivate();
  68. Map<String,Object>keyMap=newHashMap<String,Object>(2);
  69. keyMap.put(PUBLIC_KEY,publicKey);
  70. keyMap.put(PRIVATE_KEY,privateKey);
  71. returnkeyMap;
  72. }
  73. publicstaticvoidmain(String[]args)throwsException{
  74. Map<String,Object>genKeyPair=genKeyPair();
  75. Stringbase64publicKey=getPublicKey(genKeyPair);
  76. System.out.println("公钥\n"+base64publicKey);
  77. Stringbase64privateKey=getPrivateKey(genKeyPair);
  78. System.out.println("私钥\n"+base64privateKey);
  79. Stringpasswd="cat123113";
  80. StringcharsetName="utf-8";
  81. StringencryptByPublicKey=Base64.encodeBase64String((encryptByPublicKey(
  82. passwd.getBytes(charsetName),base64publicKey)));
  83. System.out.println("加密\n"+encryptByPublicKey);
  84. byte[]decryptByPrivateKey=decryptByPrivateKey(Base64.decodeBase64(encryptByPublicKey),
  85. base64privateKey);
  86. Stringstring=newString(decryptByPrivateKey,"utf-8");
  87. System.out.println("解密后\n"+string);
  88. }
  89. /**
  90. *签名字符串
  91. *
  92. *@paramtext
  93. *需要签名的字符串
  94. *@paramprivateKey私钥(BASE64编码)
  95. *
  96. *@paramcharset
  97. *编码格式
  98. *@return签名结果(BASE64编码)
  99. */
  100. publicstaticStringsign(Stringtext,StringprivateKey,Stringcharset)throwsException{
  101. byte[]keyBytes=Base64.decodeBase64(privateKey);
  102. PKCS8EncodedKeySpecpkcs8KeySpec=newPKCS8EncodedKeySpec(keyBytes);
  103. KeyFactorykeyFactory=KeyFactory.getInstance(KEY_ALGORITHM);
  104. PrivateKeyprivateK=keyFactory.generatePrivate(pkcs8KeySpec);
  105. Signaturesignature=Signature.getInstance(SIGNATURE_ALGORITHM);
  106. signature.initSign(privateK);
  107. signature.update(getContentBytes(text,charset));
  108. byte[]result=signature.sign();
  109. returnBase64.encodeBase64String(result);
  110. }
  111. publicstaticStringsign(Stringtext,PrivateKeyprivateKey,Stringcharset)
  112. throwsSignatureException,
  113. InvalidKeyException{
  114. try{
  115. Signaturesignature=Signature.getInstance(SIGNATURE_ALGORITHM);
  116. signature.initSign(privateKey);
  117. signature.update(getContentBytes(text,charset));
  118. byte[]result=signature.sign();
  119. returnBase64.encodeBase64String(result);
  120. }catch(NoSuchAlgorithmExceptione){
  121. //不可能发生,
  122. returnnull;
  123. }
  124. }
  125. /**
  126. *签名字符串
  127. *
  128. *@paramtext
  129. *需要签名的字符串
  130. *@paramsign
  131. *客户签名结果
  132. *@parampublicKey
  133. *公钥(BASE64编码)
  134. *@paramcharset
  135. *编码格式
  136. *@return验签结果
  137. */
  138. publicstaticbooleanverify(Stringtext,Stringsign,StringpublicKey,Stringcharset)
  139. throwsException{
  140. byte[]keyBytes=Base64.decodeBase64(publicKey);
  141. X509EncodedKeySpeckeySpec=newX509EncodedKeySpec(keyBytes);
  142. KeyFactorykeyFactory=KeyFactory.getInstance(KEY_ALGORITHM);
  143. PublicKeypublicK=keyFactory.generatePublic(keySpec);
  144. Signaturesignature=Signature.getInstance(SIGNATURE_ALGORITHM);
  145. signature.initVerify(publicK);
  146. signature.update(getContentBytes(text,charset));
  147. returnsignature.verify(Base64.decodeBase64(sign));
  148. }
  149. /**
  150. *<P>
  151. *私钥解密
  152. *</p>
  153. *
  154. *@paramencryptedData已加密数据
  155. *@paramprivateKey私钥(BASE64编码)
  156. *@return
  157. *@throwsException
  158. */
  159. publicstaticbyte[]decryptByPrivateKey(byte[]encryptedData,StringprivateKey)
  160. throwsException{
  161. byte[]keyBytes=Base64.decodeBase64(privateKey);
  162. PKCS8EncodedKeySpecpkcs8KeySpec=newPKCS8EncodedKeySpec(keyBytes);
  163. KeyFactorykeyFactory=KeyFactory.getInstance(KEY_ALGORITHM);
  164. KeyprivateK=keyFactory.generatePrivate(pkcs8KeySpec);
  165. Ciphercipher=Cipher.getInstance(keyFactory.getAlgorithm());
  166. cipher.init(Cipher.DECRYPT_MODE,privateK);
  167. intinputLen=encryptedData.length;
  168. ByteArrayOutputStreamout=newByteArrayOutputStream();
  169. intoffset=0;
  170. byte[]cache;
  171. inti=0;
  172. //对数据分段解密
  173. while(inputLen-offSet>0){
  174. if(inputLen-offSet>MAX_DECRYPT_BLOCK){
  175. cache=cipher.doFinal(encryptedData,offSet,MAX_DECRYPT_BLOCK);
  176. }else{
  177. cache=cipher.doFinal(encryptedData,offSet,inputLen-offSet);
  178. }
  179. out.write(cache,0,cache.length);
  180. i++;
  181. offSet=i*MAX_DECRYPT_BLOCK;
  182. }
  183. byte[]decryptedData=out.toByteArray();
  184. out.close();
  185. returndecryptedData;
  186. }
  187. /**
  188. *<p>
  189. *公钥解密
  190. *</p>
  191. *
  192. *@paramencryptedData已加密数据
  193. *@parampublicKey公钥(BASE64编码)
  194. *@return
  195. *@throwsException
  196. */
  197. publicstaticbyte[]decryptByPublicKey(byte[]encryptedData,StringpublicKey)
  198. throwsException{
  199. byte[]keyBytes=Base64.decodeBase64(publicKey);
  200. X509EncodedKeySpecx509KeySpec=newX509EncodedKeySpec(keyBytes);
  201. KeyFactorykeyFactory=KeyFactory.getInstance(KEY_ALGORITHM);
  202. KeypublicK=keyFactory.generatePublic(x509KeySpec);
  203. Ciphercipher=Cipher.getInstance(keyFactory.getAlgorithm());
  204. cipher.init(Cipher.DECRYPT_MODE,publicK);
  205. intinputLen=encryptedData.length;
  206. ByteArrayOutputStreamout=newByteArrayOutputStream();
  207. intoffSet=0;
  208. byte[]cache;
  209. inti=0;
  210. //对数据分段解密
  211. while(inputLen-offSet>0){
  212. if(inputLen-offSet>MAX_DECRYPT_BLOCK){
  213. cache=cipher.doFinal(encryptedData,offSet,MAX_DECRYPT_BLOCK);
  214. }else{
  215. cache=cipher.doFinal(encryptedData,offSet,inputLen-offSet);
  216. }
  217. out.write(cache,0,cache.length);
  218. i++;
  219. offSet=i*MAX_DECRYPT_BLOCK;
  220. }
  221. byte[]decryptedData=out.toByteArray();
  222. out.close();
  223. returndecryptedData;
  224. }
  225. /**
  226. *<p>
  227. *公钥加密
  228. *</p>
  229. *
  230. *@parAMData源数据
  231. *@parampublicKey公钥(BASE64编码)
  232. *@return
  233. *@throwsException
  234. */
  235. publicstaticbyte[]encryptByPublicKey(byte[]data,StringpublicKey)throwsException{
  236. byte[]keyBytes=Base64.decodeBase64(publicKey);
  237. X509EncodedKeySpecx509KeySpec=newX509EncodedKeySpec(keyBytes);
  238. KeyFactorykeyFactory=KeyFactory.getInstance(KEY_ALGORITHM);
  239. KeypublicK=keyFactory.generatePublic(x509KeySpec);
  240. //对数据加密
  241. Ciphercipher=Cipher.getInstance(keyFactory.getAlgorithm());
  242. cipher.init(Cipher.ENCRYPT_MODE,publicK);
  243. intinputLen=data.length;
  244. ByteArrayOutputStreamout=newByteArrayOutputStream();
  245. intoffSet=0;
  246. byte[]cache;
  247. inti=0;
  248. //对数据分段加密
  249. while(inputLen-offSet>0){
  250. if(inputLen-offSet>MAX_ENCRYPT_BLOCK){
  251. cache=cipher.doFinal(data,offSet,MAX_ENCRYPT_BLOCK);
  252. }else{
  253. cache=cipher.doFinal(data,offSet,inputLen-offSet);
  254. }
  255. out.write(cache,0,cache.length);
  256. i++;
  257. offSet=i*MAX_ENCRYPT_BLOCK;
  258. }
  259. byte[]encryptedData=out.toByteArray();
  260. out.close();
  261. returnencryptedData;
  262. }
  263. /**
  264. *<p>
  265. *公钥加密
  266. *</p>
  267. *
  268. *@paramdata源数据
  269. *@paramcert证书
  270. *@return
  271. *@throwsException
  272. */
  273. publicstaticbyte[]encryptByPublicKey(byte[]data,Certificatecert)throwsException{
  274. //对数据加密
  275. PublicKeyuk=cert.getPublicKey();
  276. Ciphercipher=Cipher.getInstance(uk.getAlgorithm());
  277. cipher.init(Cipher.ENCRYPT_MODE,uk);
  278. intinputLen=data.length;
  279. ByteArrayOutputStreamout=newByteArrayOutputStream();
  280. intoffSet=0;
  281. byte[]cache;
  282. inti=0;
  283. //对数据分段加密
  284. while(inputLen-offSet>0){
  285. if(inputLen-offSet>MAX_ENCRYPT_BLOCK){
  286. cache=cipher.doFinal(data,offSet,MAX_ENCRYPT_BLOCK);
  287. }else{
  288. cache=cipher.doFinal(data,offSet,inputLen-offSet);
  289. }
  290. out.write(cache,0,cache.length);
  291. i++;
  292. offSet=i*MAX_ENCRYPT_BLOCK;
  293. }
  294. byte[]encryptedData=out.toByteArray();
  295. out.close();
  296. returnencryptedData;
  297. }
  298. /**
  299. *<p>
  300. *私钥加密
  301. *</p>
  302. *
  303. *@paramdata源数据
  304. *@paramprivateKey私钥(BASE64编码)
  305. *@return
  306. *@throwsException
  307. */
  308. publicstaticbyte[]encryptByPrivateKey(byte[]data,StringprivateKey)throwsException{
  309. byte[]keyBytes=Base64.decodeBase64(privateKey);
  310. PKCS8EncodedKeySpecpkcs8KeySpec=newPKCS8EncodedKeySpec(keyBytes);
  311. KeyFactorykeyFactory=KeyFactory.getInstance(KEY_ALGORITHM);
  312. KeyprivateK=keyFactory.generatePrivate(pkcs8KeySpec);
  313. Ciphercipher=Cipher.getInstance(keyFactory.getAlgorithm());
  314. cipher.init(Cipher.ENCRYPT_MODE,privateK);
  315. intinputLen=data.length;
  316. ByteArrayOutputStreamout=newByteArrayOutputStream();
  317. intoffSet=0;
  318. byte[]cache;
  319. inti=0;
  320. //对数据分段加密
  321. while(inputLen-offSet>0){
  322. if(inputLen-offSet>MAX_ENCRYPT_BLOCK){
  323. cache=cipher.doFinal(data,offSet,MAX_ENCRYPT_BLOCK);
  324. }else{
  325. cache=cipher.doFinal(data,offSet,inputLen-offSet);
  326. }
  327. out.write(cache,0,cache.length);
  328. i++;
  329. offSet=i*MAX_ENCRYPT_BLOCK;
  330. }
  331. byte[]encryptedData=out.toByteArray();
  332. out.close();
  333. returnencryptedData;
  334. }
  335. /**
  336. *@paramcontent
  337. *@paramcharset
  338. *@return
  339. *@throwsSignatureException
  340. *@throwsUnsupportedEncodingException
  341. */
  342. privatestaticbyte[]getContentBytes(Stringcontent,Stringcharset){
  343. if(charset==null||"".equals(charset)){
  344. returncontent.getBytes();
  345. }
  346. try{
  347. returncontent.getBytes(charset);
  348. }catch(UnsupportedEncodingExceptione){
  349. thrownewruntimeexception("签名过程中出现错误,指定的编码集不对,您目前指定的编码集是:"+charset);
  350. }
  351. }
  352. /**
  353. *<p>
  354. *获取私钥
  355. *</p>
  356. *
  357. *@paramkeyMap密钥对
  358. *@return
  359. *@throwsException
  360. */
  361. publicstaticStringgetPrivateKey(Map<String,Object>keyMap)throwsException{
  362. Keykey=(Key)keyMap.get(PRIVATE_KEY);
  363. returnBase64.encodeBase64String(key.getEncoded());
  364. }
  365. /**
  366. *<p>
  367. *获取公钥
  368. *</p>
  369. *
  370. *@paramkeyMap密钥对
  371. *@return
  372. *@throwsException
  373. */
  374. publicstaticStringgetPublicKey(Map<String,Object>keyMap)throwsException{
  375. Keykey=(Key)keyMap.get(PUBLIC_KEY);
  376. returnBase64.encodeBase64String(key.getEncoded());
  377. }
  378. }

大概就是这么多了,可能还有些要注意的地方

1.在请求审核企业会员资质(audit_member_infos)中需要上传 一个zip的压缩包,里面需要的内容都是定好了的,比如上传了8个文件,每个文件都以名称和后缀的形式放在一起,然后压缩成zip包,zip包的命名和 这个接口需要的传的参数 fileName 要一样,然后,用工具类,对zip包进行 MD5 摘要计算,计算的代码

[java]view plaincopy 在CODE上查看代码片派生到我的代码片

  1. publicstaticStringgetFileMD5(Filefile){
  2. if(!file.isFile()){
  3. returnnull;
  4. }
  5. MessageDigestdigest=null;
  6. fileinputstreamin=null;
  7. bytebuffer[]=newbyte[1024];
  8. intlen;
  9. try{
  10. digest=MessageDigest.getInstance("MD5");
  11. in=newFileInputStream(file);
  12. while((len=in.read(buffer,0,1024))!=-1){
  13. digest.update(buffer,0,len);
  14. }
  15. in.close();
  16. }catch(Exceptione){
  17. e.printStackTrace();
  18. returnnull;
  19. }

然后调用它给的一个上传文件工具类,上传的代码

[java]view plaincopy 在CODE上查看代码片派生到我的代码片

  1. Stringfile_path=data.get("file_path").toString();
  2. Filefile=newFile(file_path);
  3. Stringfilemd5=Tools.getFileMD5(file);
  4. System.out.println(filemd5);
  5. System.out.println("-------------------------start------------------------------");
  6. System.out.println("链接sftp");
  7. sftps=newsftp();
  8. try{
  9. s.upload("/upload/",file_path,s.connectSFTP());
  10. System.out.print("sftp文件上传成功!");
  11. s.ls("/upload/",s.connectSFTP());
  12. }catch(SftpExceptione){
  13. e.printStackTrace();
  14. System.out.print("sftp文件上传失败!");
  15. response.setCode(ResponceCodeEnum.fileUploadFail.getCode());
  16. response.setErrorMsg("sftp文件上传失败!");
  17. returnresponse;
  18. }
  19. System.out.println("sftp关闭");
  20. System.out.println("-------------------------end------------------------------");

sftp 类

[java]view plaincopy 在CODE上查看代码片派生到我的代码片

  1. packagecom.sinapay.util;
  2. importjava.io.File;
  3. importjava.io.FileInputStream;
  4. importjava.util.Properties;
  5. importjava.util.vector;
  6. importcom.jcraft.jsch.Channel;
  7. importcom.jcraft.jsch.ChannelSftp;
  8. importcom.jcraft.jsch.JSch;
  9. importcom.jcraft.jsch.JSchException;
  10. importcom.jcraft.jsch.session;
  11. importcom.jcraft.jsch.SftpException;
  12. publicclasssftp{
  13. protectedStringhost="";//新浪的给的服务器地址
  14. protectedStringusername="";//用户名
  15. protectedStringpassword;
  16. protectedStringprivateKey="c:\\data\\id_rsa";//秘钥的位置
  17. protectedStringpassphrase;
  18. protectedintport=50022;//端口
  19. publicChannelSftpconnectSFTP(){
  20. JSchjsch=newJSch();
  21. Channelchannel=null;
  22. try{
  23. if(privateKey!=null&&!"".equals(privateKey)){
  24. if(passphrase!=null&&"".equals(passphrase)){
  25. jsch.addIdentity(privateKey,passphrase);
  26. }else{
  27. jsch.addIdentity(privateKey);
  28. }
  29. }
  30. Sessionsession=jsch.getSession(username,host,port);
  31. if(password!=null&&!"".equals(password)){
  32. session.setPassword(password);
  33. }
  34. PropertiessshConfig=newProperties();
  35. sshConfig.put("StrictHostKeyChecking","no");//donotverifyhostkey
  36. session.setConfig(sshConfig);
  37. session.setServerAliveInterval(92000);
  38. session.connect();
  39. channel=session.openChannel("sftp");
  40. channel.connect();
  41. }catch(JSchExceptione){
  42. e.printStackTrace();
  43. }
  44. return(ChannelSftp)channel;
  45. }
  46. publicvoidupload(Stringdirectory,StringuploadFile,ChannelSftpsftp){
  47. try{
  48. sftp.cd(directory);
  49. Filefile=newFile(uploadFile);
  50. sftp.put(newFileInputStream(file),file.getName());
  51. }catch(Exceptione){
  52. e.printStackTrace();
  53. }
  54. }
  55. @SuppressWarnings("rawtypes")
  56. publicvoidls(Stringdirectory,ChannelSftpsftp)throwsSftpException{
  57. sftp.cd(directory);
  58. Vectorv=sftp.ls("*.*");
  59. for(inti=0;i<v.size();i++){
  60. System.out.println(v.get(i));
  61. }
  62. }
  63. publicvoiddownload(Stringdirectory,StringdownloadFile,StringsaveFile,ChannelSftpsftp){
  64. try{
  65. sftp.cd(directory);
  66. sftp.get(downloadFile,saveFile);
  67. }catch(Exceptione){
  68. e.printStackTrace();
  69. }
  70. }
  71. publicvoiddelete(Stringdirectory,StringdeleteFile,ChannelSftpsftp){
  72. try{
  73. sftp.cd(directory);
  74. sftp.rm(deleteFile);
  75. }catch(Exceptione){
  76. e.printStackTrace();
  77. }
  78. }
  79. publicvoiddisconnected(ChannelSftpsftp){
  80. if(sftp!=null){
  81. try{
  82. sftp.getSession().disconnect();
  83. }catch(JSchExceptione){
  84. e.printStackTrace();
  85. }
  86. sftp.disconnect();
  87. }
  88. }
  89. }

其他的都是接口调用了,都没啥了。

相关阅读

和第三方接口对接总结

接口对接分为两种形式: 我方A公司提供接口给B公司,B公司进行一些操作时调用我们的接口进行实现。 例:A开发会员等级同步接口,供B同步

防踩坑指南:对接支付渠道二三事

今天要分享的内容,会以商家的视角去分析对接渠道过程中需要关注的问题。一. 支付渠道业务规则这部分内容主要介绍常见支付渠道的业

对接企业支付宝的流程(电脑和手机)

因为项目的需求,所以对于支付这块,对接的企业支付宝的电脑网站支付和手机支付。写这篇博客的主要目的就是想把支付这块的对接给详细

天猫如何转型做好数据化运营和消费者对接

一直以来天猫能提供的只有买卖行为缺乏品牌建设,当商品在不同平台都能买到的时候,天猫的差异化在哪?除了价格战天猫还能做什么?未来

机顶盒遥控器和电视机遥控器怎么对接?

在使用机顶盒遥控器的操作电视机时电视机遥控器和机顶盒遥控器不通用,这样用起来十分不方便,我们可能要一手拿电视机遥控器一手拿机

分享到:

栏目导航

推荐阅读

热门阅读