文档章节

饿了么 openapi demo

芥末小弟
 芥末小弟
发布于 2017/03/01 09:54
字数 897
阅读 71
收藏 1

http://merchant.openapi.eleme.io/merchant.html#id215

class Program
    {
        static void Main(string[] args)
        {
            EleMakSign.SignValue.Add("consumer_key", "0170804777");
            //EleMakSign.SignValue.Add("consumer_secret", "87217cb263701f90316236c4df00d9352fb1da76");
            EleMakSign.SignValue.Add("timestamp", "1466412691398");
            //EleMakSign.SignValue.Add("food_id", "20385638");
            //EleMakSign.SignValue.Add("name", "肥牛套餐 + 可乐");
            //EleMakSign.SignValue.Add("description", "精选五星肥牛,御用厨师:李大胖,倾情烹制");
            //EleMakSign.SignValue.Add("stock", 1000);
            //Root r = new Root() { key1 = "value1", key2 = "value2" };

            //EleMakSign.SignValue.Add("json", JsonConvert.SerializeObject(r));

            string val=EleMakSign.genMakSig("http://v2.openapi.ele.me/restaurant/62028381/", EleMakSign.SignValue, EleMeConfig.consumer_secret);
            Console.Write(val);



            //获取订单
            //
            string requrl = "http://v2.openapi.ele.me/order/new/";

            EleMakSign.SignValue.Clear();
            string consumer_key="0170804777";
            EleMakSign.SignValue.Add("consumer_key", consumer_key);
            string timsp=ElemeMakSignHelper.GetTimeStamp();
            EleMakSign.SignValue.Add("timestamp",timsp );
            string consumer_secret="87217cb263701f90316236c4df00d9352fb1da76";            
             string restaurant_id="62028381";
            EleMakSign.SignValue.Add("restaurant_id", restaurant_id);
            string sig=EleMakSign.genMakSig(requrl, EleMakSign.SignValue, consumer_secret);

            EleMakSign.SignValue.Clear();
            EleMakSign.SignValue.Add("consumer_key", consumer_key);
            EleMakSign.SignValue.Add("timestamp",timsp );
                 EleMakSign.SignValue.Add("restaurant_id", restaurant_id);
                 EleMakSign.SignValue.Add("sig", sig);

            string str = ElemeMakSignHelper.concatParams(EleMakSign.SignValue);
            str = requrl + "?" + str;
            string result=HttpUtilsHelper.HttpGet(str,"");
            Console.Write(result);
            Console.ReadKey();
            //字符串a
            //字符串b
            //字符串c


        }
    }
View Code
/// <summary>
    /// ele  签名
    /// </summary>
    public class EleMakSign
    {

        //对参数进行排序得到 字符串A
        //将所有参数(sig除外)按照参数名的字母顺序排序,并用 & 连接:
        //consumer_key=7284397484&timestamp=1374908054

        public static SortedDictionary<string, object> SignValue = new SortedDictionary<string, object>();


        /**
        * 设置某个字段的值
        * @param key 字段名
         * @param value 字段值
        */
        public void SetValue(string key, object value)
        {
            SignValue[key] = value;
        }

        /**
        * 根据字段名获取某个字段的值
        * @param key 字段名
         * @return key对应的字段值
        */
        public object GetValue(string key)
        {
            object o = null;
            SignValue.TryGetValue(key, out o);
            return o;
        }

        /**
         * 判断某个字段是否已设置
         * @param key 字段名
         * @return 若字段key已被设置,则返回true,否则返回false
         */
        public bool IsSet(string key)
        {
            object o = null;
            SignValue.TryGetValue(key, out o);
            if (null != o)
                return true;
            else
                return false;
        }


        public static string sortedToString(SortedDictionary<string, object> SignValue, string key)
        {
            string str = "";
            foreach (var item in SignValue)
                str += item + key;
            return str;
        }


        public static string genMakSig(string pathUrl, SortedDictionary<string, object> dics,
                                    string consumerSecret)
        {
            string str = ElemeMakSignHelper.concatParams(dics);
            str = pathUrl + "?" + str + consumerSecret;
            System.Security.Cryptography.SHA1 sha1 = System.Security.Cryptography.SHA1.Create();
            return ElemeMakSignHelper.byte2hex(sha1.ComputeHash(Encoding.UTF8.GetBytes(ElemeMakSignHelper.byte2hex(Encoding.UTF8.GetBytes(str)))));
        }

    }
elemksign
/// <summary>
    /// 饿了么商家信息配置
    /// consumer_key: 0170804777
    ///consumer_secret: 87217cb263701f90316236c4df00d9352fb1da76
    ///restaurant_id: 62028381
    ///restaurant_name: 饿了么开放平台测试
    ///餐厅下单测试地址: http://r.ele.me/openapi-test
    ///关于 POST / PUT 请求头中 contennt_type 的说明:
    ///除特别声明需要指定的请求头(如图片接口的图片内容参数 file,使用 multipart/form-data )之外,
    ///其他接口默认使用 application/x-www-form-urlencoded
    /// </summary>
    public static class EleMeConfig
    {
        public static string comsumer_key = "0170804777";
        public static string consumer_secret = "87217cb263701f90316236c4df00d9352fb1da76";
        public static int restaurant_id = 62028381;
        public static string reqBaseUrl = "http://v2.openapi.ele.me/restaurant/62028381/";
    }
饿了么商家信息配置
public static class ElemeMakSignHelper
    {

        public static string concatParams(SortedDictionary<string, object> dics)
        {
            string str = "";
            foreach (var key in dics.Keys)
            {
                object tval = "";
                if (dics.TryGetValue(key, out tval))
                {
                    //string tkey = EleMakSign.UrlEncode(key);
                    //string ttval = EleMakSign.UrlEncode(tval.ToString());
                    string tkey = key;
                    string ttval = tval.ToString();
                    str += "&" + tkey + "=" + ttval;
                }
            }
            return str.Substring(1);
        }

        public static string byte2hex(byte[] b)
        {
            StringBuilder enText = new StringBuilder();
            int i;
            for (int offset = 0; offset < b.Length; offset++)
            {
                i = b[offset];
                if (i < 0)
                    i += 256;
                if (i < 16)
                    enText.Append("0");
                enText.Append(ElemeMakSignHelper.toHexString(i));
            }
            return enText.ToString();
        }

        private static string toHexString(int i)
        {
            return ElemeMakSignHelper.toUnsignedString(i, 4);
        }
        private static String toUnsignedString(int i, int shift)
        {
            char[] buf = new char[32];
            int charPos = 32;
            int radix = 1 << shift;
            int mask = radix - 1;
            do
            {
                buf[--charPos] = digits[i & mask];
                i = foo(i, shift);
            } while (i != 0);

            return new String(buf, charPos, (32 - charPos));
        }
        public static int foo(int x, int y)
        {
            int mask = 0x7fffffff; //Integer.MAX_VALUE
            for (int i = 0; i < y; i++)
            {
                x >>= 1;
                x &= mask;
            }
            return x;
        }
        public static char[] digits = {
            '0' , '1' , '2' , '3' , '4' , '5' ,
            '6' , '7' , '8' , '9' , 'a' , 'b' ,
            'c' , 'd' , 'e' , 'f' , 'g' , 'h' ,
            'i' , 'j' , 'k' , 'l' , 'm' , 'n' ,
            'o' , 'p' , 'q' , 'r' , 's' , 't' ,
            'u' , 'v' , 'w' , 'x' , 'y' , 'z'
            };


        /// <summary>  
        /// 获取时间戳  
        /// </summary>  
        /// <returns></returns>  
        public static string GetTimeStamp()
        {
            TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
            return Convert.ToInt64(ts.TotalSeconds).ToString();
        }  
    }
ElemeMakSignHelper
/// <summary>
    /// http get post helper class
    /// </summary>
    public static class HttpUtilsHelper
    {
        public static string HttpGet(string Url, string postDataStr)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url + (postDataStr == "" ? "" : "?") + postDataStr);
            request.Method = "GET";
            request.ContentType = "text/html;charset=UTF-8";

            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            Stream myResponseStream = response.GetResponseStream();
            StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
            string retString = myStreamReader.ReadToEnd();
            myStreamReader.Close();
            myResponseStream.Close();

            return retString;
        }

        public static string HttpPost(string Url, string postDataStr)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
            request.Method = "POST";
            request.ContentType = "application/json;charset=UTF-8";
            string paraUrlCoded = postDataStr;
            byte[] payload;
            payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded);
            request.ContentLength = payload.Length;
            Stream writer = request.GetRequestStream();
            writer.Write(payload, 0, payload.Length);
            writer.Close();
            System.Net.HttpWebResponse response;
            response = (System.Net.HttpWebResponse)request.GetResponse();
            System.IO.Stream s;
            s = response.GetResponseStream();
            string StrDate = "";
            string strValue = "";
            StreamReader Reader = new StreamReader(s, Encoding.UTF8);
            while ((StrDate = Reader.ReadLine()) != null)
            {
                strValue += StrDate + "\r\n";
            }
            return strValue;
        }
    }
HttpUtilsHelper

 完整代码在:http://download.csdn.net/detail/u010683837/9555239

© 著作权归作者所有

共有 人打赏支持
上一篇: servlet 访问流程
下一篇: CornerStone的使用
芥末小弟
粉丝 0
博文 202
码字总数 120715
作品 0
昌平
私信 提问
Web项目调用饿了么API接口,

我最近研究调用外部接口,没写过,饿了么的沙箱测试,帐号搞定了,申请已通过,去看了一下SDK,选Java的,人家封装过的,我直接全部下载本地了,放到了我的项目里,项目是多模块的Maven项目,...

辉煌霸猪
03/07
756
0
外卖聚合系统

帮助商户在收银系统实现外卖订单的全部处理流程 1.商户无需切换多个系统端处理外卖业务 a.门店的映射及解绑; b.可操作开关店; c.菜品上下架和数据维护; 2.减少商户在收银系统录入外卖订单...

广州鼎牛网络科技有限公司
07/05
0
0
Yashin/MoveBlog

基于osc openapi 以及 webmagic爬虫 开发的oschina博客搬家应用。 本应用作为oschina openAPI的一个实用demo,向各位OSCer 展示OSC openAPI 如何使用,以及可以实现什么功能 2014.6.6 新增功...

Yashin
2015/03/04
0
0
车江毅/ApiView

ApiView .net api的接口文档查看网站,用于解决分布式开发过程中的Api接口管理和沟通问题。 自动生成api文档; 方便api调试及第三方开发人员对接,可以应用在asp.net mvc,wcf,webservice 中...

车江毅
2016/06/02
0
0
.net API 的接口文档查看网站--ApiView

.net API 的接口文档查看网站,用于解决分布式开发过程中的Api接口管理和沟通问题。 - 自动生成api文档; - 方便api调试及第三方开发人员对接,可以应用在asp.net mvc,wcf,webservice 中使用...

车江毅
2016/06/16
2.4K
1

没有更多内容

加载失败,请刷新页面

加载更多

PHP生成CSV之内部换行

当我们使用PHP将采集到的文件内容保存到csv文件时,往往需要将采集内容进行二次过滤处理才能得到需要的内容。比如网页中的换行符,空格符等等。 对于空格等处理起来都比较简单,这里我们单独...

豆花饭烧土豆
今天
2
0
使用 mjml 生成 thymeleaf 邮件框架模板

发邮件算是系统开发的一个基本需求了,不过搞邮件模板实在是件恶心事,估计搞过的同仁都有体会。 得支持多种客户端 支持响应式 疼彻心扉的 outlook 多数客户端只支持 inline 形式的 css 布局...

郁也风
今天
8
0
让哲学照亮我们的人生——读《医务工作者需要学点哲学》有感2600字

让哲学照亮我们的人生——读《医务工作者需要学点哲学》有感2600字: 作者:孙冬梅;以前读韩国前总统朴槿惠的著作《绝望锻炼了我》时,里面有一句话令我印象深刻,她说“在我最困难的时期,...

原创小博客
今天
4
0
JAVA-四元数类

public class Quaternion { private final double x0, x1, x2, x3; // 四元数构造函数 public Quaternion(double x0, double x1, double x2, double x3) { this.x0 = ......

Pulsar-V
今天
18
0
Xshell利用Xftp传输文件,使用pure-ftpd搭建ftp服务

Xftp传输文件 如果已经通过Xshell登录到服务器,此时可以使用快捷键ctrl+alt+f 打开Xftp并展示Xshell当前的目录,之后直接拖拽传输文件即可。 pure-ftpd搭建ftp服务 pure-ftpd要比vsftp简单,...

野雪球
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部