和链开发者文档
文档中心开发者文档和链浏览器
文档中心开发者文档和链浏览器
  1. 用户指南
  • 平台介绍
    • 平台简介
    • 核心功能
  • 用户指南
    • 接入流程和说明
    • 网关鉴权签名示例
    • 交易结果异步回调通知
  • 常见问题
    • operation_id 的作用
  1. 用户指南

网关鉴权签名示例

Go 语言版本#

Java 语言版本#

提示
Java签名所需依赖(建议选择1.2.79版本)
     <dependency>
         <groupId>com.alibaba</groupId>
         <artifactId>fastjson</artifactId>
         <version>1.2.79</version>
     </dependency>

PHP 语言版本#

Python 语言版本#

C# 语言版本#


    using System;
    using System.Collections.Generic;
    using System.Security.Cryptography;
    using System.Text;
    using Newtonsoft.Json;
    
    namespace Flow.Avata
    {
        public class AvataUitl
        {
            public static string apiSecret = "apiKey";
            public static string apiKey = "apiSecret";
            public static string domain = "http://apis.avata.wjlhshop.com/v1beta1";
    
            /**
              * 对请求参数进行签名处理
              *
              * @param path      请求路径,仅截取域名后及 Query 参数前部分,例:"/v1beta1/accounts";
              * @param query     Query 参数,例:"key1=value1&key2=value2",需转为 Map 格式
              * @param body      Body 参数,例:"{\"count\": 1, \"operation_id\": \"random_string\"}",需转为 Map 格式
              * @param timestamp 当前时间戳(毫秒),例:1647751123703
              * @param apiSecret 应用方的 API Secret,例:"AKIDz8krbsJ5yKBZQpn74WFkmLPc5ab"
              * @return 返回签名结果
              */
            public static String signRequest(String path, Dictionary<String, Object> query, Dictionary<String, Object> body, long timestamp, String apiSecret)
            {
                SortedDictionary<String, Object> paramsMap = new SortedDictionary<String, Object>();
    
                paramsMap.Add("path_url", path);
    
                if (query != null)
                {
                    foreach (var key in query)
                    {
                        paramsMap.Add("query_" + key.Key, key.Value);
                    }
    
                }
    
                if (body != null)
                {
                    foreach (var key in body)
                    {
                        paramsMap.Add("body_" + key.Key, key.Value);
                    }
                }
    
                // 将请求参数序列化为排序后的 JSON 字符串
                String jsonStr = JsonConvert.SerializeObject(paramsMap);
    
                // 执行签名
                String signature = sha256Sum(jsonStr + timestamp.ToString() + apiSecret);
    
                return signature;
            }
    
            /**
            * SHA256 摘要
            *
            * @param str
            * @return
            */
            private static String sha256Sum(String str)
            {
                SHA256 sha256Generator = SHA256.Create();
                byte[] sha256HashBytes = sha256Generator.ComputeHash(Encoding.UTF8.GetBytes(str));
    
                StringBuilder sha256StrBuilder = new StringBuilder();
                foreach (byte @byte in sha256HashBytes)
                {
                    sha256StrBuilder.Append(@byte.ToString("x2"));
                }
                return sha256StrBuilder.ToString();
            }
    
            /// <summary>From:www.uzhanbao.com
            /// DateTime转换为13位时间戳(单位:毫秒)
            /// </summary>
            /// <param name="dateTime"> DateTime</param>
            /// <returns>13位时间戳(单位:毫秒)</returns>
            public static long DateTimeToLongTimeStamp(DateTime dateTime)
            {
                DateTime timeStampStartTime = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
    
                return (long)(dateTime.ToUniversalTime() - timeStampStartTime).TotalMilliseconds;
                //return 1657338317368;
            }
    
            /// <summary>
            /// POST 请求示例
            /// 创建链账户
            /// </summary>
            /// <returns></returns>
            public static account Account(string name, string operation_id)
            {
                try
                {
                    string path = "/v1beta1/account";
                    string url = domain + path;
    
                    Dictionary<string, object> body = new Dictionary<string, object>();
                    body.Add("name", name);
                    body.Add("operation_id", operation_id);
    
    
                    long Timestamp = DateTimeToLongTimeStamp(DateTime.Now);
                    string Signature = signRequest(path, null, body, Timestamp, apiSecret);
    
                    Dictionary<string, string> header = new Dictionary<string, string>();
                    header.Add("X-Api-Key", apiKey);
                    header.Add("X-Timestamp", Timestamp.ToString());
                    header.Add("X-Signature", Signature);
    
                    string bodyJson = JsonConvert.SerializeObject(body);
                    string ret = HttpHelper.PostData(url, bodyJson, "application/json", header, null);
                    return JsonConvert.DeserializeObject<account>(ret);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                    return null;
                }
            }
    
        /// <summary>
        /// 创建账号
        /// </summary>
        public class account
        {
            public accountData data { get; set; }
        }
    
        public class accountData
        {
            public string account { get; set; }
            public string name { get; set; }
            public string operation_id { get; set; }
        }
    }
上一页
接入流程和说明
下一页
交易结果异步回调通知
Built with