腾讯云,云点播,小程序上传视频 报 data: {code: 10012, message: "ugc upload | signature verify error"}

小程序代码:https://cloud.tencent.com/document/product/266/18177

签名代码:https://cloud.tencent.com/document/product/266/10638

js代码如下


  getSignature: function (callback) {
    wx.request({
      //url: 'https://xzb.qcloud.com/get_vod_sign',
      //url: "http://192.168.2.29:5000/api/ShortVideo/GetUploadSignature",
      url:"http://localhost:5000/weatherforecast/GetUploadSignature",
      method: 'POST',
      /*data: {
        Action: 'GetVodSignatureV2'
      },*/
      dataType: 'json',
      success: function (res) {
        console.log(res);
        /*if (res.data && res.data.data.signature) {
           console.log("callback:"+res.data.data.signature)
           callback(res.data.data.signature);
         } else {
           return '获取签名失败';
         }*/
        if (res.data && res.data.signature) {
          console.log("callback:" + res.data.signature)
          callback(res.data.signature);
        } else {
          return '获取签名失败';
        }
      }
    });
  },

   服务端签名类


using System;
using System.Security.Cryptography;
using System.Text;

    /// <summary>
    /// 云点播签名
    /// 
    /// 腾讯云点播(Video on Demand,VOD)基于腾讯多年技术积累与基础设施建设,
    /// 为有音视频应用相关需求的客户提供包括音视频存储管理、音视频转码处理、音视频加速播放和音视频通信服务的一站式解决方案。
    /// 
    /// </summary>
    public class VODSignature
    {
        public string m_strSecId;
        public string m_strSecKey;
        public int m_iRandom;
        public long m_qwNowTime;
        public int m_iSignValidDuration;
        public static long GetIntTimeStamp()
        {
            TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1);
            return Convert.ToInt64(ts.TotalSeconds);
        }
        private byte[] hash_hmac_byte(string signatureString, string secretKey)
        {
            var enc = Encoding.UTF8; HMACSHA1 hmac = new HMACSHA1(enc.GetBytes(secretKey));
            hmac.Initialize();
            byte[] buffer = enc.GetBytes(signatureString);
            return hmac.ComputeHash(buffer);
        }
        public string GetUploadSignature()
        {
            string strContent = "";
            strContent += ("secretId=" + Uri.EscapeDataString((m_strSecId)));
            strContent += ("&currentTimeStamp=" + m_qwNowTime);
            strContent += ("&expireTime=" + (m_qwNowTime + m_iSignValidDuration));
            strContent += ("&random=" + m_iRandom);
            //strContent += ("&procedure=XIAOZHIBO-DEFAULT");

            byte[] bytesSign = hash_hmac_byte(strContent, m_strSecKey);
            byte[] byteContent = System.Text.Encoding.UTF8.GetBytes(strContent);
            byte[] nCon = new byte[bytesSign.Length + byteContent.Length];
            bytesSign.CopyTo(nCon, 0);
            byteContent.CopyTo(nCon, bytesSign.Length);
            return Convert.ToBase64String(nCon);
        }

    }

提供服务的Controller

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using System;
using System.Security.Cryptography;
using System.Text;

namespace WebApplication2.Controllers
{
    [ApiController]
    [Route("[controller]/[action]")]
    public class WeatherForecastController : ControllerBase
    {        
        [HttpPost]
        [HttpGet]
        public object GetUploadSignature()
        {
            VODSignature sign = new VODSignature();
            sign.m_strSecId = "id";// configuration["TXY_SDKAppID"];
            sign.m_strSecKey = "key";// configuration["TXY_SecretKey"];
            sign.m_qwNowTime = VODSignature.GetIntTimeStamp();
            sign.m_iRandom = new Random().Next(0, 1000000);
            sign.m_iSignValidDuration = 3600 * 24 * 2;
            return new { signature =   sign.GetUploadSignature()  };
        }
    }
}

error 错误

{"data":{"code":10004,"message":"ugc upload | invalid signature"},"header":{"Server":"openresty","Date":"Wed, 15 Apr 2020 12:53:26 GMT","Content-Type":"text/plain; charset=utf-8","Content-Length":"57","Connection":"close","Access-Control-Allow-Headers":"Accept, Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization","Access-Control-Allow-Methods":"POST, GET, OPTIONS, PUT, DELETE","Access-Control-Allow-Origin":"*"},"statusCode":200,"cookies":[],"errMsg":"request:ok"}

换成python的demo在试试

还是一样的效果 ,失败。

在用C#在服务器上上传下试试是可以成功的。

于是再次确认id和key,正确。

我用了一个我自己的key 是可以上传的,but 考录到公司人员变动,就在腾讯云上弄了个Api的用户

分配了一个 云点播的 VODFullAccess权限

小程序中就可以正常了。

注意权限分配

发布了28 篇原创文章 · 获赞 0 · 访问量 2632

猜你喜欢

转载自blog.csdn.net/oopxiajun2011/article/details/105543867