阿里云自动生产接入指南

一、获取阿里云市场Key

登录服务商管理后台(msp.aliyun.com)概览页面,获取“Key 值”;Key用在验证Token是否正确。

二、验证Token

阿里云的每一条数据请求都会带上token参数,用于验证数据的有效性!

 1         /// <summary>
 2         /// 验证Token
 3         /// </summary>
 4         /// <param name="url"></param>
 5         /// <param name="reqToken"></param>
 6         /// <returns></returns>
 7         public static bool CheckToken(Uri url, string reqToken)
 8         {
 9             /*
10              * token 值
11             1) 说明:token 值作为云市场与服务商之间进行安全校验必有参数,云市场每次调用服务
12             商接口的参数中都会带有 token 值。服务商根据生成规则生成 token 值,并与接口中获
13             取的 token 值进行比较。完全相同即为校验通过。
14             2) 生成规则:取所有的 http get 请求参数(排除 token),对参数名进行字典排序,在字符串的
15             最后加上你的 key,然后对整个字符串进行 md5 加密。
16             3) 举例:
17           服务商收到的调用请求数据示例:
18             http://www.isvwebsite.com?p1=1&p2=2&p3=3&token=xxxx
19           sort(P1,P2,P3); 不要加入 token
20           token 生成:”p1=1&p2=2&p3=3&key=isvkey”.toMD5()
21             */
22 
23             string key = HostManager.Config.AliyunMarketKey;
24             SortedDictionary<string, string> sortDict = GetUrlPara(url); //排序,按key的首字母从小到大排序 如 abcd...z
25             Dictionary<string, string> dict = FilterPara(sortDict); //筛选,去掉不参加的key,如sign , sign_type , token
26             string localToken = Sign(CreateLinkString(dict), "&key=" + key, "utf-8");
27 
28             return localToken == reqToken; //比较自己生成的token和参数中的token
29         }

生成签名

 1         /// <summary>
 2         /// 签名字符串
 3         /// </summary>
 4         /// <param name="prestr">需要签名的字符串</param>
 5         /// <param name="key">密钥</param>
 6         /// <param name="_input_charset">编码格式</param>
 7         /// <returns>签名结果</returns>
 8         public static string Sign(string prestr, string key, string _input_charset)
 9         {
10             StringBuilder sb = new StringBuilder(32);
11 
12             prestr = prestr + key;
13 
14             MD5 md5 = new MD5CryptoServiceProvider();
15             byte[] t = md5.ComputeHash(Encoding.GetEncoding(_input_charset).GetBytes(prestr));
16             for (int i = 0; i < t.Length; i++)
17             {
18                 sb.Append(t[i].ToString("x").PadLeft(2, '0'));
19             }
20 
21             return sb.ToString();
22         }

只有请求的token和我们自己生成的token对应,才认为是完整可靠的数据!

三、参数

阿里云通过url传递参数。如

http://master.ue.net.cn/YunMarket/AliyunReq.aspx?token=a8a7a6e1b9615b85ddaa2297d45233b4&action=createInstance&skuId=yuncode1670300001&orderBizId=5814572&aliUid=1958990661482662&accountQuantity=1&trial=false&orderId=202104434880603&package_version=yuncode1670300001&expiredOn=2019-06-09+00:00:00

token用于验证签名。action表示要执行的操作。skuId是商品规格标识,与商品唯一对应。

orderId 订单ID,orderBizId 业务ID。一个订单有多个商品时,需要分批生成,那每个单次操作就用业务ID区分!

四、新购商品,创建实例

        string startDate = System.DateTime.Now.AddDays(1).ToString("yyyy-MM-dd"); //从明天开始算起
            string endDate = WebUtils.GetQueryString("expiredOn"); //过期的时间

            AliyunMarketInstanceResponse response = BLL.AliyunMarket.CreateSite(req, startDate, endDate); //用于返回信息给阿里云市场
            req.Status = response.instanceId == "0" ? 0 : 1; //成功的
            req.BackResult = JsonUtils.ObjectToJson<AliyunMarketInstanceResponse>(response);

需要返回给阿里云的数据结构

public class AliyunMarketInstanceResponse : YunMarketResponse
    {
        /// <summary>
        /// 实例 ID,服务商提供的唯一标识
        /// </summary>
        public string instanceId { get; set; }
        /// <summary>
        /// 主机信息
        /// </summary>
        public HostInfo hostInfo { get; set; }
        /// <summary>
        /// 网站信息
        /// </summary>
        public AppInfo appInfo { get; set; }
        /// <summary>
        /// 自定义 Key-Value 数据
        /// </summary>
        public string info { get; set; }
    }

如:

{
    "instanceId": "5814572",
    "hostInfo": {
        "name": "FTP登录信息",
        "ip": "39.108.247.1**",
        "innerIp": null,
        "username": null,
        "password": null,
        "cname": null,
        "tempDomain": null,
        "ftpUsername": "a32b29c6",
        "ftpPassword": "7e7ec1a501",
        "region": null,
        "beianInfo": null,
        "databaseInfo": null
    },
    "appInfo": {
        "frontEndUrl": "http://a32b29c6.master.ue.net.cn",
        "adminUrl": "http://a32b29c6.master.ue.net.cn/platform/login",
        "username": "admin",
        "password": "d22***",
        "authUrl": "http://master.ue.net.cn/user/login?906AF91E891321B6E13C56E7C16E3172E946BB6B4483E0204A0CC2E6AE9D****"
    },
    "info": ""
}

instanceId 实例唯一标识。

创建实例(网站)成功后,需要返回给阿里云,阿里云收到后认为实例创建成功。

其它操作,如续费,销毁等,阿里云会传递此Id给服务商。

用户查看订单可以查看详情

五、其它

用户下单后,阿里云会不断的发出请求,直到服务商返回成功的信息。

更多的请查看api文档

云市场商品接入API文档
https://help.aliyun.com/knowledge_detail/37986.html

阿里云市场自动生产接入指南

腾讯云市场自动生产接入指南

猜你喜欢

转载自www.cnblogs.com/singoocms/p/9237746.html