.net Core 2.2实现京东宙斯API采用OAuth授权方式调用
生活随笔
收集整理的這篇文章主要介紹了
.net Core 2.2实现京东宙斯API采用OAuth授权方式调用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.實現對接京東接口,這里主要是寫了采用Oauth授權的方式調用。
2.VS2017 使用了.net core 2.2 控制臺程序,json庫使用 jil(這個比較輕量級,加載數據較快,但也需要注意有小坑),使用了自動排序的 SortedDictionary
3.該例子通過創建實體的方式,實例化實體,入參。
4.安裝jil 可以通過nuget程序包管理器控制臺:install-package jil ?就會自動安裝啦
?5.這里只要填入?appSecret,app_key,access_token 對應值,即可。
using System; using System.Collections.Generic; using System.Xml;namespace JdServices {internal class Program{private static void Main(string[] args){/** 以 jingdong.pop.order.search 方法為例**/SortedDictionary<string, string> param = new SortedDictionary<string, string>();JilJsonSerializer serializer = new JilJsonSerializer();PopOrderSearch popOrder = new PopOrderSearch(){optional_fields = @"vender_id,order_id,pay_type,order_total_price,freight_price,seller_discount,order_payment,delivery_type,order_state,order_state_remark,invoice_info,order_remark,order_start_time,order_end_time,consignee_info,item_info_list",order_state = "WAIT_SELLER_STOCK_OUT",page = "1",page_size = "20",start_date = "2019-09-01 00:00:00",end_date = "2019-09-01 18:00:00",};var jdApi = "https://api.jd.com/routerjson";var appSecret = "";var app_key = "";var access_token = "";//參數param.Add("app_key", app_key);param.Add("access_token", access_token);param.Add("format", "json");param.Add("v", "2.0");param.Add("timestamp", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));param.Add("method", "jingdong.pop.order.search");param.Add("360buy_param_json", serializer.ToJson<PopOrderSearch>(popOrder));//生成簽名string sign = JdServices.JdHelper.GetSign(param, appSecret);param.Add("sign", sign);//生成請求URLvar resultUrl = JdHelper.BuildGetUrl(jdApi, param);Console.ReadKey();}} } 一、Main運行入口代碼 using System; using System.Collections.Generic; using System.Linq; using System.Security.Cryptography; using System.Text;namespace JdServices {public static class JdHelper{/// <summary>/// 獲取簽名/// </summary>/// <param name="parameters">組成簽名的參數</param>/// <param name="appSecret">secret</param>/// <param name="accessToken">token</param>/// <returns></returns>public static string GetSign(SortedDictionary<string, string> parameters, string appSecret, string accessToken = ""){//參數排序var str = new StringBuilder();foreach (var kv in parameters){if (!string.IsNullOrWhiteSpace(kv.Key) && !string.IsNullOrWhiteSpace(kv.Value)){str.Append(kv.Key).Append(kv.Value);}}// 使用MD5加密轉大寫var result = EncryptMD5(str + appSecret).ToUpper();return result;}///<summary>/// 給一個字符串進行MD5加密///</summary>///<param name="strText">待加密字符串</param>///<returns>加密后的字符串</returns>public static string EncryptMD5(string strText){MD5 md5 = new MD5CryptoServiceProvider();byte[] hashBytes = md5.ComputeHash(Encoding.UTF8.GetBytes(strText));return string.Join("", hashBytes.Select(i => i.ToString("x2")));}/// <summary>/// 生成請求連接地址./// </summary>/// <param name="url"></param>/// <param name="param"></param>/// <returns></returns>public static string BuildGetUrl(string url, SortedDictionary<string, string> param){var strMsg = new StringBuilder();foreach (var (key, value) in param){strMsg.AppendFormat(@"&{0}={1}", key, value);}//?. 是C#6.0的語法,叫Null-Conditional Operator(null條件運算符)// 我們經常需要判斷對象是否為null(不判斷就會報異常System.NullReferenceException之類的信息)if (url?.IndexOf("?") != -1){url += "&" + strMsg;}else{url += "?" + strMsg;}return url.ToString();}} } 二、創建JdHelper幫助類 using Jil; using System; using System.Collections.Generic; using System.Text;namespace JdServices {public class JilJsonSerializer{private readonly Encoding _encoding;public JilJsonSerializer(bool isCamelCase = false): this(new Options(prettyPrint: true,excludeNulls: false,jsonp: false,dateFormat: DateTimeFormat.ISO8601,includeInherited: true,serializationNameFormat: isCamelCase ? SerializationNameFormat.CamelCase : SerializationNameFormat.Verbatim,unspecifiedDateTimeKindBehavior: UnspecifiedDateTimeKindBehavior.IsUTC)){_encoding = Encoding.UTF8;}private JilJsonSerializer(Options options){if (options == null) throw new ArgumentNullException(nameof(options));JSON.SetDefaultOptions(options);}public byte[] Serialize(Type type, object obj){var jsonString = JSON.Serialize(obj);return _encoding.GetBytes(jsonString);}public byte[] Serialize<T>(T t){var s = JSON.Serialize(t);return _encoding.GetBytes(s);}public object Deserialize(Type type, byte[] serializedObject){var jsonString = _encoding.GetString(serializedObject);return JSON.Deserialize(jsonString, type);}public T Deserialize<T>(byte[] serializedObject){return JSON.Deserialize<T>(_encoding.GetString(serializedObject));}public string ToJson<T>(T t){var bytes = Serialize(t);return _encoding.GetString(bytes);}public T ToObject<T>(string json){return JSON.Deserialize<T>(json);}} } 三、創建 JilJsonSerializer 幫助類 using System.Collections.Generic; using System.Text;namespace JdServices {/// <summary>/// jingdong.pop.order.search接口參數實體/// </summary>public class PopOrderSearch{public string end_date { get; set; }public string optional_fields { get; set; }public string order_state { get; set; }public string page { get; set; }public string page_size { get; set; }public string start_date { get; set; }} } 四、創建接口 PopOrderSearch 對象?
至此,OAuth授權方式調用實現完成,整個例子很簡單,無非就是jil使用需要注意點,也可以使用Newtonsoft.Json 庫,看自己個人習慣。
?
轉載于:https://www.cnblogs.com/bmyblogs/p/11453990.html
總結
以上是生活随笔為你收集整理的.net Core 2.2实现京东宙斯API采用OAuth授权方式调用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Omron HostLink通讯协议
- 下一篇: 关于如何通过IE浏览器获取客户端的IP地