收藏
回答

接入讯飞星火4.0Ultra总是显示WebSocket connection失败,大佬请看看?

测试的时候正常填入了三个鉴权参数信息

Page({

  /**

   * 页面的初始数据

   */

  data: {

    httpUrl: 'wss://spark-api.xf-yun.com/v4.0/chat',

    TEXT: '什么是离心泵',

    // 地址必须填写,代表着大模型的版本号!!!!!!!!!!!!!!!!

    modelDomain: '4.0Ultra',

    // V1.1-V3.5动态获取,高于以上版本手动指定

    APPID: '****', // 这里应该是字符串

    // 控制台获取填写

    APISecret: '***', // 这里应该是字符串

    APIKey: '***', // 这里应该是字符串

    sparkResult: '',

    historyTextList: [],

    // 历史会话信息,由于最大token12000,可以结合实际使用,进行移出

    tempRes: '' // 临时答复保存

  },


  /**

   * 生命周期函数--监听页面加载

   */

  onLoad(options) {},


  /**

   * 生命周期函数--监听页面初次渲染完成

   */

  onReady() {},


  /**

   * 生命周期函数--监听页面显示

   */

  onShow() {

    var self = this;

    self.onWorker();

  },


  /**

   * 生命周期函数--监听页面隐藏

   */

  onHide() {},


  /**

   * 生命周期函数--监听页面卸载

   */

  onUnload() {},


  /**

   * 页面相关事件处理函数--监听用户下拉动作

   */

  onPullDownRefresh() {},


  /**

   * 页面上拉触底事件的处理函数

   */

  onReachBottom() {},


  /**

   * 用户点击右上角分享

   */

  onShareAppMessage() {},


  // 获取鉴权参数

  getWebSocketUrl() {

    const CryptoJS = require('crypto-js');

    const base64 = require('base-64');

    var self = this;

    var httpUrlHost = self.data.httpUrl.substring(8, 28);

    var httpUrlPath = self.data.httpUrl.substring(28);

    var url = "wss://" + httpUrlHost + httpUrlPath;

    console.log(url)

    var host = "spark-api.xf-yun.com";

    var apiKeyName = "api_key";

    var date = new Date().toGMTString();

    var algorithm = "hmac-sha256";

    var headers = "host date request-line";

    var signatureOrigin = "host: ".concat(host, "\ndate: ").concat(date, "\nGET ").concat(httpUrlPath, " HTTP/1.1");

    var signatureSha = CryptoJS.HmacSHA256(signatureOrigin, self.data.APISecret);

    var signature = CryptoJS.enc.Base64.stringify(signatureSha);

    var authorizationOrigin = apiKeyName + "=\"" + self.data.APIKey + "\",algorithm=\"" + algorithm + "\",headers=\"" + headers + "\",signature=\"" + signature + "\"";

    var authorization = base64.encode(authorizationOrigin);

    url = url + "?authorization=" + authorization + "&date=" + encodeURI(date) + "&host=" + host;

    console.log(url)

    return url; // 主要是返回地址

  },


  /**

   * 创建WebSocket连接

   */

  onWorker: function () {

    const self = this;

    // 发送消息参数

    var params = {

      "header": {

        "app_id": self.data.APPID

      },

      "parameter": {

        "chat": {

          "domain": "4.0Ultra",

          "temperature": 0.5,

          "max_tokens": 4096

        }

      },

      "payload": {

        "message": {

          "text": [

            {"role":"system","content":"你是一个设备专家,请回答用户的问题。"} ,

          {"role": "user", "content": "你是谁"} ,

          {"role": "assistant", "content": self.data.historyTextList} ]

        }

      }

    }

    // 根据文档要求 历史对话添加参数

    self.data.historyTextList.push({

      "role": "user",

      "content": self.data.TEXT

    });

    // 获取webscoket 链接地址

    let url = this.getWebSocketUrl();

    console.log(url);

    // 初始化

    wx.connectSocket({

      url: url,

      success(res) {

        console.log('success', res); // 修正分号

      },

      fail(res) {

        console.log('fail', res)

      }

    })

    // 连接成功

    wx.onSocketOpen(function (res) {

      console.log("webscoket 链接成功!");

      console.log(res);

      console.log(params);

      wx.sendSocketMessage({

        data: JSON.stringify(params)

      })

    })

    // 接收数据

    wx.onSocketMessage(function (data) {

      console.log(data);

      var objData = JSON.parse(data.data); 

      console.log(objData);

    })

    // 连接失败

    wx.onSocketError(function () {

      console.log('websocket连接失败!');

    })

    // 断开连接

    wx.onSocketClose(function (res) {

      console.log('WebSocket 已关闭!')

    })

  },

})    

回答关注问题邀请回答
收藏

1 个回答

  • 会飞的风筝
    会飞的风筝
    04-20

    我这边也是,python后端就没问题

    04-20
    有用
    回复
登录 后发表内容