码迷,mamicode.com
首页 > Windows程序 > 详细

C# 阿里巴巴开放平台调用示例

时间:2015-04-01 15:17:48      阅读:681      评论:0      收藏:0      [点我收藏+]

标签:

其实自己在撸这篇文章之前,就已经一直想要在博客园上写写博,奈何自己是个菜鸟,且从来没写过博,所以一直拖着,现在有些空闲时间,所以撸篇文章给从来没接触过开放平台的朋友走个捷径。

所以在正式介绍之前,先熟悉熟悉现在开放平台用的最多的Oauth2.0协议,建议这篇文章,自己读过后感觉非常好。http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html

所以看过上面那篇文章之后,应该了解到,在开放平台的调用中,无非就是这么一个过程。

技术分享

 

以上如图,其实很简单,只要滤清楚就好。

以下便开始具体的调用过程:

1.首先需在阿里巴巴开放平台(http://open.1688.com/)上Get一个开发者账号。

2.其次在自己的开发者账号中Get若干的客户端。得到对应的AppKey和AppSecretKey

3.有了上面这些,我们就要开始向服务器发送请求了。

4.所以打开vs,新建一个Dos程序,填入如下代码:

技术分享
 1         static void Main(string[] args)
 2         {
 3             //通过执行以下代码获得用户授权地址
 4             GetAuthUrl();
 5         }
 6 
 7         public static string GetAuthUrl()
 8         {
 9 
10             //1.根据已有的appkey:appAppSecretKey开始请求code
11             var model = GetAppModel();
12             //2.新建一个数组加入需要的参数
13             var dics = new Dictionary<string, string>();
14             dics.Add("client_id", model.AppKey);
15             dics.Add("site", "china");
16             dics.Add("redirect_uri", "http://localhost:51006/Test/Authroize?state=" + model.AppKey);
17 
18             var str = Sign(string.Empty, dics, model.AppSecreKey);
19             //拼接出用户登录连接
20             var url =
21                 "http://gw.open.1688.com/auth/authorize.htm?" +
22                 "client_id=" + model.AppKey +
23                 "&site=china&redirect_uri=http://localhost:51006/Test/Authroize?state=" + model.AppKey +
24                 "&_aop_signature=" +
25                 str;
26             return SeedHttpRequest(url);
27         }
28         /// <summary>
29         /// 发送http请求
30         /// </summary>
31         /// <param name="url">请求的url</param>
32         /// <returns></returns>
33         static string SeedHttpRequest(string url)
34         {
35             var req = (HttpWebRequest)WebRequest.Create(url);
36             try
37             {
38                 using (var hwr = (HttpWebResponse)req.GetResponse())
39                 {
40                     using (var sr = new StreamReader(hwr.GetResponseStream(), Encoding.UTF8))
41                     {
42                         return sr.ReadToEnd();
43                     }
44                 }
45             }
46             catch
47             {
48                 return "出错:Url" + url;
49             }
50         }
51         /// <summary>
52         /// 此方法为阿里巴巴参数戳加密方法
53         /// </summary>
54         /// <param name="urlPath"></param>
55         /// <param name="paramDic"></param>
56         /// <param name="secretKey"></param>
57         /// <returns></returns>
58        static string Sign(string urlPath, Dictionary<string, string> paramDic, string secretKey = null)
59         {
60             if (string.IsNullOrEmpty(secretKey))
61             {
62                 return null;
63             }
64             byte[] signatureKey = Encoding.UTF8.GetBytes(secretKey);//此处用自己的签名密钥
65             List<string> list = new List<string>();
66             foreach (KeyValuePair<string, string> kv in paramDic)
67             {
68                 list.Add(kv.Key + kv.Value);
69             }
70             list.Sort();
71             string tmp = urlPath;
72             foreach (string kvstr in list)
73             {
74                 tmp = tmp + kvstr;
75             }
76 
77             HMACSHA1 hmacsha1 = new HMACSHA1(signatureKey);
78             hmacsha1.ComputeHash(Encoding.UTF8.GetBytes(tmp));
79 
80             byte[] hash = hmacsha1.Hash;
81             return BitConverter.ToString(hash).Replace("-", string.Empty).ToUpper();
82         }
83         static MyClass GetAppModel()
84         {
85             return new MyClass();
86         }
87     }
View Code

5.这个时候我们已经Get到一个用户授权页面的地址了。

出现如下界面:

技术分享

这个时候让用户输入账号之后,页面就会被重定向至之前app的返回地址。并把code和state传给此返回地址,

然后我们在此程序中再次加入一个方法,用于获得访问令牌和刷新令牌

技术分享
        private string GetUserBase(AppInfo model,string code)
        {
            string loginUrl = "https://gw.open.1688.com/openapi/http/1/system.oauth2/getToken/" + model.AppKey;
            var parameters = new Dictionary<string, string>();
            parameters.Add("grant_type", "authorization_code");
            parameters.Add("need_refresh_token", "true");
            parameters.Add("client_id", model.AppKey);
            parameters.Add("client_secret", model.AppSecretKey);
            parameters.Add("redirect_uri", "http://localhost:51006/Test/Index");
            parameters.Add("code", code);
//此处的必须发送https请求
          return GetSeedPostHttpData(loginUrl, parameters);
        }
View Code

经过这个方法执行之后,我们已经Get该用户的基本信息,访问令牌的过期时间为9小时,刷新令牌过期时间为半年

详细的调接口方式,就不赘述了。

 

 详细请见:http://open.1688.com/doc/api/cn/sys_auth.htm?ns=cn.alibaba.open#

C# 阿里巴巴开放平台调用示例

标签:

原文地址:http://www.cnblogs.com/TznBlog/p/4383345.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!