文档章节

饿了么 openapi demo

芥末小弟
 芥末小弟
发布于 2017/03/01 09:54
字数 897
阅读 45
收藏 1
点赞 0
评论 0

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

© 著作权归作者所有

共有 人打赏支持
芥末小弟
粉丝 0
博文 202
码字总数 120715
作品 0
昌平
Yashin/MoveBlog

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

Yashin ⋅ 2015/03/04 ⋅ 0

车江毅/ApiView

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

车江毅 ⋅ 2016/06/02 ⋅ 0

.net API 的接口文档查看网站--ApiView

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

车江毅 ⋅ 2016/06/16 ⋅ 1

【开源】.Net Api开放接口文档网站

开源地址:http://git.oschina.net/chejiangyi/ApiView 开源QQ群: .net 开源基础服务 238543768 ApiView .net api的接口文档查看网站,用于解决分布式开发过程中的Api接口管理和沟通问题。 - ...

车江毅 ⋅ 2016/06/02 ⋅ 0

开源中国开放平台 是怎样搭建的?

开源中国开放平台开放api文档是谁做的? 哪位过来人能分享下经验,给搭建过程写一篇教程.(目前还没有有发现). 就以openapiuser为例,在数据库中在么存放的?请求url设计,如何应对请求,oauth结合过...

seau ⋅ 2014/05/27 ⋅ 2

TinyCMS 1.5 beta 发布,公司信息系统

经过一段时间的沉淀,TInyCMS又有更新的消息了,小伙伴们快来围观 本次升级的功能: 开放平台api:http://demo.59et.com/TinyCMS/OpenApi_index.shtm 增加授权模块,采用发证书模式发放授权证书...

harries ⋅ 2014/07/23 ⋅ 17

车江毅/BSF.Aop

#BSF.Aop# .Net 免费开源,静态Aop织入(直接修改IL中间语言)框架,类似PostSharp(收费); 实现前后Aop切面和INotifyPropertyChanged注入方式。 描述: 静态织入实现,性能几乎接近原生代码...

车江毅 ⋅ 2016/08/29 ⋅ 0

jfinal如何实现restful api中挂子资源的场景

@JFinal 你好,想跟你请教个问题: springmvc对restful的支持很完善,我在一个openapi的设计中使用很广泛。我对jfinal也做了一个demo,确实很简洁,心有向往。 但有一个restful的特性无法实现...

foodon ⋅ 2014/01/23 ⋅ 2

【开源】.Net Aop(静态织入)框架 BSF.Aop

BSF.Aop .Net 免费开源,静态Aop织入(直接修改IL中间语言)框架,类似PostSharp(收费); 实现前后Aop切面和INotifyPropertyChanged注入方式。 开源地址: https://git.oschina.net/chejiangy...

车江毅 ⋅ 2016/08/29 ⋅ 0

百度百聘 实践一(回调地址)

感觉不是很难,但为了避免以后记忆忘却,还是留个痕迹。 首先我们从文档种看到百度给出的调用参数里要有这两个值clientid,redirecturi,是需要我们去获取的,而我的任务就是获取到这两个,cli...

梦游先生 ⋅ 2016/11/04 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JavaScript零基础入门——(十一)JavaScript的DOM操作

JavaScript零基础入门——(十一)JavaScript的DOM操作 大家好,欢迎回到我们的JavaScript零基础入门。最近有些同学问我说,我讲的的比书上的精简不少。其实呢,我主要讲的是我在开发中经常会...

JandenMa ⋅ 23分钟前 ⋅ 0

volatile和synchronized的区别

volatile和synchronized的区别 在讲这个之前需要先了解下JMM(Java memory Model :java内存模型):并发过程中如何处理可见性、原子性、有序性的问题--建立JMM模型 详情请看:https://baike.b...

MarinJ_Shao ⋅ 50分钟前 ⋅ 0

深入分析Kubernetes Critical Pod(一)

Author: xidianwangtao@gmail.com 摘要:大家在部署Kubernetes集群AddOn组件的时候,经常会看到Annotation scheduler.alpha.kubernetes.io/critical-pod"="",以表示这是一个关键服务,那你知...

WaltonWang ⋅ 57分钟前 ⋅ 0

原子性 - synchronized关键词

原子性概念 原子性提供了程序的互斥操作,同一时刻只能有一个线程能对某块代码进行操作。 原子性的实现方式 在jdk中,原子性的实现方式主要分为: synchronized:关键词,它依赖于JVM,保证了同...

dotleo ⋅ 今天 ⋅ 0

【2018.06.22学习笔记】【linux高级知识 14.4-15.3】

14.4 exportfs命令 14.5 NFS客户端问题 15.1 FTP介绍 15.2/15.3 使用vsftpd搭建ftp

lgsxp ⋅ 今天 ⋅ 0

JeeSite 4.0 功能权限管理基础(Shiro)

Shiro是Apache的一个开源框架,是一个权限管理的框架,实现用户认证、用户授权等。 只要有用户参与一般都要有权限管理,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户...

ThinkGem ⋅ 昨天 ⋅ 0

python f-string 字符串格式化

主要内容 从Python 3.6开始,f-string是格式化字符串的一种很好的新方法。与其他格式化方式相比,它们不仅更易读,更简洁,不易出错,而且速度更快! 在本文的最后,您将了解如何以及为什么今...

阿豪boy ⋅ 昨天 ⋅ 0

Python实现自动登录站点

如果我们想要实现自动登录,那么我们就需要能够驱动浏览器(比如谷歌浏览器)来实现操作,ChromeDriver 刚好能够帮助我们这一点(非谷歌浏览器的驱动有所不同)。 一、确认软件版本 首先我们...

blackfoxya ⋅ 昨天 ⋅ 0

线性回归原理和实现基本认识

一:介绍 定义:线性回归在假设特证满足线性关系,根据给定的训练数据训练一个模型,并用此模型进行预测。为了了解这个定义,我们先举个简单的例子;我们假设一个线性方程 Y=2x+1, x变量为商...

wangxuwei ⋅ 昨天 ⋅ 0

容器之查看minikue的environment——minikube的环境信息

执行如下命令 mjduan@mjduandeMacBook-Pro:~/Docker % minikube docker-envexport DOCKER_TLS_VERIFY="1"export DOCKER_HOST="tcp://192.168.99.100:2376"export DOCKER_CERT_PATH="/U......

汉斯-冯-拉特 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部