心雨纷扬

 

阿里云消息队列的C#使用http接口发送消息实例

app.config

  <appSettings>
    <clear/>
    <add key="Ons_Topic" value="XXX_FinishOrder"/>
    <add key="Ons_AccessKey" value="jmXXXXXBov"/>
    <add key="Ons_SecretKey" value="VXXXXXjRD7pxYCpjtnJDDbsH"/>
    <add key="Ons_ConsumerId" value="CID_xxxxxxxx"/>
    <add key="Ons_ProducerID" value="PID_xxxxxxxxxxx"/>
  </appSettings>

 

program.cs

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using ons;
using test;
using System.Security.Cryptography;

namespace MqSDk
{
    class Program
    {
        /// <summary>
        /// method to generate a MD5 hash of a string
        /// </summary>
        /// <param name="strToHash">string to hash</param>
        /// <returns>hashed string</returns>
        public static string GenerateMd5(string strToHash)
        {
            var md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
            byte[] emailBytes = Encoding.UTF8.GetBytes(strToHash.ToLower());
            byte[] hashedEmailBytes = md5.ComputeHash(emailBytes);
            StringBuilder sb = new StringBuilder();
            foreach (var b in hashedEmailBytes)
            {
                sb.Append(b.ToString("x2").ToLower());
            }
            return sb.ToString();
        }

        static void Main(string[] args)
        {
                        //# 公测url
                        string url = "http://publictest-rest.ons.aliyun.com/";
                        HttpClient client = new HttpClient();
                        string onsTopic = ConfigurationManager.AppSettings["Ons_Topic"];
                        string onsProducerId = ConfigurationManager.AppSettings["Ons_ProducerID"];
                        string onsAccessKey = ConfigurationManager.AppSettings["Ons_AccessKey"];
                        string onsSecretKey = ConfigurationManager.AppSettings["Ons_SecretKey"];
                        string onsConsumerId = ConfigurationManager.AppSettings["Ons_ConsumerId"];
                        String body = @"{""value"": ""test""}";
                        var newline = "\n";
                        for (int i = 0; i < 10; i++)
                        {
                            //var date = DateTime.Now.TimeOfDay.TotalMilliseconds.ToString("F0");
                            TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
                            var date = Convert.ToInt64(ts.TotalMilliseconds).ToString();
                            HttpContent content = new StringContent(body);
                            var md5Str = GenerateMd5(body);
                            //db2421caefd6e8163e1928da4f53cc67
                            var signString = onsTopic + newline + onsProducerId + newline + md5Str + newline + date;
                            String sign = EncryptToSha1(signString, onsSecretKey);
                            Console.WriteLine(sign);
                            content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
                            content.Headers.Add("Signature", sign);
                            content.Headers.Add("AccessKey", onsAccessKey);
                            content.Headers.Add("ProducerID", onsProducerId);
                            var rurl = url + "message/?topic=" + onsTopic + "&time=" + date + "&tag=http" + "&key=http";
                            Console.WriteLine(rurl);
                            client.PostAsync(rurl, content).ContinueWith(
                                requestTask =>
                                {
                                    // Get HTTP response from completed task. 
                                    HttpResponseMessage response = requestTask.Result;

                                    // Check that response was successful or throw exception 
                                    response.EnsureSuccessStatusCode();

                                    // Read response asynchronously as JsonValue and write out top facts for each country 
                                    response.Content.ReadAsStringAsync().ContinueWith(
                                        (readTask) =>
                                        {
                                            Console.WriteLine(readTask.Result);
                                        });
                                }
                                );
                        }
                        Console.ReadLine();
        }

        #region 获取由SHA1加密的字符串

        /// <summary>
        /// sha1 加密,与php加密结果一样
        /// </summary>
        /// <param name="str"></param>
        /// <param name="keys"></param>
        /// <returns></returns>
        public static string EncryptToSha1(string str, string keys)
        {
            return hash_hmac(str, keys, true);
        }
        private static string hash_hmac(string signatureString, string secretKey, bool raw_output = false)
        {
            var enc = Encoding.UTF8;
            HMACSHA1 hmac = new HMACSHA1(enc.GetBytes(secretKey));
            hmac.Initialize();

            byte[] buffer = enc.GetBytes(signatureString);
            if (raw_output)
            {
                return Convert.ToBase64String(hmac.ComputeHash(buffer));
            }
            else
            {
                return BitConverter.ToString(hmac.ComputeHash(buffer)).Replace("-", "").ToLower();
            }
        }
        #endregion

    }
}

 

posted on 2017-01-21 14:14  心雨纷扬  阅读(3089)  评论(6编辑  收藏  举报

导航