httpClient.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. import {
  2. requestEncode,
  3. responseDecode
  4. } from "./protoMap"
  5. //import util from '../common/util'
  6. const URL = 'https://test.ohplay.radio1964.net/Ohplay/Web/HttpToTcp';
  7. function post(request) {
  8. let requestBuffer = requestEncode(request)
  9. return uni.request({
  10. url: URL,
  11. header: {
  12. "X-Requested-With": "XMLHttpRequest",
  13. "Content-Type": "application/x-protobuf",
  14. 'Token': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJVc2VyaWQiOjY1MDYzMywibmFtZSI6IjE4MTI2NDQ3MDE1IiwiZXhwIjoxNjIyODg0NTA1fQ.f7jIm0856-VnynA99MBoA2Dl1pePxI0HT_ECsUp5QHA'
  15. },
  16. method: 'POST',
  17. timeout: 15000,
  18. dataType: 'protobuf',
  19. responseType: 'text',
  20. data: requestBuffer
  21. }).then((res) => {
  22. for (let response of res) {
  23. if (response !== null && response !== undefined && response.statusCode === 200) {
  24. try {
  25. console.log(response);
  26. let resJson = JSON.parse(response.data) //转化成json对象
  27. console.log(resJson);
  28. if (resJson.code === 0) {
  29. let base64Str = resJson.data;
  30. //let base64Str = 'DQMAAAAVAQAAAB0CAAAAJeoDAABKlgEKBBICb2sSjQFleUpoYkdjaU9pSklVekkxTmlJc0luUjVjQ0k2SWtwWFZDSjkuZXlKVmMyVnlhV1FpT2pZNE5EQXhNQ3dpYm1GdFpTSTZJalFpTENKbGVIQWlPakUyTWpNME9EWTRNamg5LlNzRlgzdWJ5UFp4NWRCLXJzZHNDd3NGcjlpLUpJczFXeWJBS2pBS3pwdzQ='
  31. let buffer = Buffer.from(base64Str, 'base64')
  32. let data = responseDecode(buffer)
  33. console.log(data);
  34. let code = 0
  35. let msg = "success"
  36. if (typeof data.errInfo !== 'undefined') {
  37. code = data.errInfo.errorCode
  38. if (typeof data.errInfo.errorMessage === 'string') {
  39. msg = data.errInfo.errorMessage
  40. } else {
  41. msg = Buffer.from(data.errInfo.errorMessage).toString()
  42. }
  43. }
  44. return {
  45. code: code,
  46. msg: msg,
  47. data: data
  48. }
  49. } else {
  50. return {
  51. code: resJson.code,
  52. msg: resJson.info
  53. }
  54. }
  55. } catch (e) {
  56. return {
  57. code: -1,
  58. msg: e.toString()
  59. }
  60. }
  61. }
  62. }
  63. })
  64. }
  65. const policy =
  66. '{"expiration": "2120-01-01T12:00:00.000Z","conditions": [["content-length-range", 0, 104857600]]}';
  67. const OSSAccessKeyId = "LTAICUWe9r9tRcPB";
  68. const accessKeySecret = "gCZSuqdztp6X1n2xMaCqzhnBSWVJv6";
  69. //这个是policy编码成base64,使用base64编码的方法需要引入require("crypto-js"); 一下子多了300多kb,所以这里直接写死
  70. const policyBase64 = "eyJleHBpcmF0aW9uIjogIjIxMjAtMDEtMDFUMTI6MDA6MDAuMDAwWiIsImNvbmRpdGlvbnMiOiBbWyJjb250ZW50LWxlbmd0aC1yYW5nZSIsIDAsIDEwNDg1NzYwMF1dfQ=="
  71. //这个是policyBase64经过accessKeySecret的HmacSHA1 加密,然后再base64,需要引入require("crypto-js"); 一下子多了300多kb,所以这里直接写死
  72. const signature = "h2Kwvb9pXKgtWUuw99iHrHQV9fk="
  73. const OSS_URL = 'https://airsmart-photo1.oss-cn-shanghai.aliyuncs.com'
  74. /**
  75. * 这个是加密的方法
  76. * 参考用的
  77. */
  78. function HmacSHA1test() {
  79. //const HmacSHA1 = require("crypto-js/hmac-sha1");
  80. let policyBase64 = util.encodeBase64(policy)
  81. console.log(policyBase64);
  82. // let str = util.decodeBase64(policyBase64);
  83. // console.log(str);
  84. //获取加密参数
  85. const sha1 = HmacSHA1(policyBase64, accessKeySecret);
  86. console.log(`sha1 = ${sha1}`);
  87. const sign = base64.stringify(sha1);
  88. console.log(`sign = ${sign}`);
  89. }
  90. function uploadFile(filePath, contentType) {
  91. let arr = filePath.split('.')
  92. let suffix = arr[arr.length - 1]
  93. let date = new Date();
  94. let dateStr = `${date.getFullYear()}-${date.getMonth()+1}-${date.getDate()}`
  95. let ossPath = `wx/${dateStr}/${date.getTime()}.${suffix}`
  96. return uni.uploadFile({
  97. url: OSS_URL,
  98. filePath: filePath,
  99. name: 'file',
  100. formData: {
  101. 'key': ossPath,
  102. 'success_action_status': 200,///如果该域的值设置为200或者204,OSS返回一个空文档和相应的状态码。
  103. 'OSSAccessKeyId': OSSAccessKeyId,
  104. 'policy': policyBase64,
  105. 'Signature': signature,
  106. 'Content-Type': contentType,
  107. }
  108. }).then((res) => {
  109. console.log(res);
  110. if (res[1].statusCode === 200) {
  111. return `${OSS_URL}/${ossPath}`
  112. } else {
  113. throw new Error(`uoload failed statusCode :${res[1].statusCode}`)
  114. }
  115. });
  116. //'image/jpeg'
  117. }
  118. module.exports = {
  119. post: post,
  120. uploadFile: uploadFile,
  121. }